单片机综合设计实验.docx

上传人:b****6 文档编号:5886367 上传时间:2023-01-01 格式:DOCX 页数:21 大小:42KB
下载 相关 举报
单片机综合设计实验.docx_第1页
第1页 / 共21页
单片机综合设计实验.docx_第2页
第2页 / 共21页
单片机综合设计实验.docx_第3页
第3页 / 共21页
单片机综合设计实验.docx_第4页
第4页 / 共21页
单片机综合设计实验.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

单片机综合设计实验.docx

《单片机综合设计实验.docx》由会员分享,可在线阅读,更多相关《单片机综合设计实验.docx(21页珍藏版)》请在冰豆网上搜索。

单片机综合设计实验.docx

单片机综合设计实验

大连理工大学本科设计报告

题目:

基于PCF8563的时钟系统设计

课程名称:

学院

(系):

业:

级:

号:

学生姓名:

绩:

2014年7月10日

题目:

基于PCF8563的时钟系统设计

1设计要求

实验要求:

(1)显示两位小时、两位分钟和两位秒参数,相互之间有分隔符号:

(2)按住KEY1可显示四位年、两位月、两位日:

(3)具备整点报时功能(模拟广播电台的整点报时从59分55秒开始,每一秒驱动蜂鸣器一次,其中前5次为低频,00秒时为髙频驱动):

(4)具备键盘修改时间功能。

可修改小时、分钟和秒参数:

(5)修改时间时具备“回显”功能,以方便观察:

(6)输入时间参数时应具有“自动纠错”功能,以免错误数据的输入:

(7)在修改时间参数时具备“参数闪烁”功能,是操作更人性化:

2设计分析及系统方案设计

(1)主程序算法描述

主程序中定义端口名称、弗I器件读写地址增强程序的可读性。

设置中断服务程序入口地址,将硬件电路连接与之对应。

INT_RCTDUI对应INT_0中断服务程序,INT_7290对应INTI的中断服务程序。

开始时先对硬件电路进行复位操作。

然后设定PCF8563T的时间和命令参数存放在单片机内部的1OH-1DH单元,将其写入到8563的OOH-ODH单元。

使总的中断使能端有效,开INTO和INT1中断,使触发极性为下降沿。

等待中断的到来。

(2)INT_RCT中断子程序算法描述

调读数据子程序,将读出的8563中O2H-O8H单元的内容存放于单片机内部2OH~26H单元。

判断时、分的数值,当时间在**-59-55至**-59-59时调用低频蜂鸣器BUZZL.当时间为**-00-00时调用高频蜂鸣器BUZZH.实现整点报时。

调整时间,将20H-26H单元中内容拆分查表后送到28H-2FH

(年,月,日)和38H~3FH(时,分,秒)。

使P1.2控制显示内容,当P1.2=l时,显示时,分,秒;当P1.2=0时,显示年,月,日。

(3)蜂鸣器发声子程序(BUZZL和BUZZH)

设宜初始值使BUZZL发声频率为500H乙BUZZH发声频率为1500HZ。

(4)键盘修改子程序

读入进入中断前的数据,将8563的20H单元内容送入单片机内部12H单元(秒):

21H单元内容送入单片机内部13H单元(分):

22H单元内容送入单片机内部14H单元(时)便于修改后显示。

读入输入的键值为0AH时,为A键修改小时参数。

设置小时的十位闪烁命令等待按键操作,读入键值判断是否超过三,超过则报警且要求重新输入。

输入正确时回显,设垃小时的个位闪烁命令等待按键操作,读入键值判断个位不超过9,然后判断小时整个数是否小于24。

分和秒的设垃与小时类似,不同的是十位不能超过5个位不能超过9。

(5)闪烁子程序

设置入口闪烁参数单元值

3系统电路图

4外围接口模块硬件电路功能描述

ZLG7290B

驱动8个数码管显示时钟时间,管理按键并读取键值,和/INT1相连,引发中断。

PCF8563T

设置时钟时间,控制时间的运行,和/INTO相连,每一秒产生一次中断。

蜂鸣器

整点报时,错误提示

KEY1

控制显示时间或日期

5主程序中主要变量定义

变量名称

RAM单元/寄存器

功能

WSLA_8563

0A2H

PCF8563T写地址

RSLA.8563

0A3H

PCF8563T读地址

WSLA.7290

70H

ZLG729OB写地址

RSLA.7290

71H

ZLG7290B读地址

SS

50H

为闪烁程序传递参数

10H-1DH

准备向时钟芯片写入的值

07H

写入参数个数

00H

参数和控制命令缓冲区首地址

02H

从器件内部地址

03H

从器件写地址

30H

写入闪烁控制字使闪烁速度最快

6系统软件中各个子程序的功能描述

子程序名称

入口参数

出口参数

功能描述

INT.RCT

丿二

读取时间参数送数码管显

示,并在整点时刻报警

BUZZL

蜂鸣器以500HZ频率发声

BUZZH

蜂鸣器以1500HZ频率发声

ADJUST

20H-26H单元

20H-26H单元

将20H-26H中从PCF8563中读出的7个参数无关位屏蔽掉

CHAIFEN

20H-26H单元

28H-2FH单元

38H-3FH单元

将20H-26H单元的参数拆分并在查表后送28H-2FH,38H-3FH

CF

累加器A

R4(H)R3

将A中的数据拆分为两个独立的BCD码并査表结果存于R4R3

INT_7290

丿二

修改时间、回显、纠错、闪

FLASH

SS

控制闪烁位置

RDKEY

累加器A

读键值子程序

WR8563

10H-1DH单元

向日历芯片写入时间参数

WRNBYT

多字节写操作

RDADD

多字节读操作

MOV1BH・#OOH;设圧日报警

8程序清单

MOV1CH.#OOH;设龙星期报警

SDABITP1.0

MOV1DH.#83H;设立CLKOUT的频率,

SCLBITP1.1

1秒周期方波

WSLA_8563EQU0A2H:

PCF8563T口地址

MOVR7.#0EH;写入参数个数

RSLA_8563EQU0A3H

MOVR0.#10H渗数与控制命令缓冲区

WSLA_7290EQU70H

亿LG7290B口地址

首地址

RSLA_7290EQU71H

MOVR2.#00H;从器件内部子地址

MOVR3,#WSLA_8563;准备向PCF8563T

ORG8000H

写入数据串

UMP8Q40H

LCALLWRNBYT;写入时间,控制命令到

ORG8003H

PCF8563T

UMPINT.RCT

SETBEA;启动总中断

ORG8013H

SETBEX0;启动INT_RCT(INT_O)

UMPINT_7290

SETBITO淀时器0下降沿有效

SETBEX1;启动INT_7290(INT_7290)

ORG8040H

SETBIT1;泄时器1下降沿有效

START:

MOVSP.#60H

SJMPS;等待中断

CLRP1.7

:

ZLG7290复位

・*****$**********************************

LCALLDELAY

;中断服务子程序INT_RCT

SETBP1.7

・**************##$$*****#******

・****************************$$******

INT_RCT:

MOVR7.#07H;数据块字节数

;设左pdf8563tdc时间和命令参数(参数和控制

MOVR0.#20H;内部数拯块首地址

命令缓冲区10HJDH)

MOVR2.#02H;内部寄存器首地址

・****************************$$******

MOVR3.#WSLA_8563:

向8563写地址

MOV10H・#00H

;启动控制字

MOVR4.#RSLA_8563;从8563读地址

MOV11H,#1FH

;设苣报警及左时器中断

LCALLRDADD;调读数据子程序,

MOV12H.#50H

;秒单元

将读出的数据存放于单片机20H-26H中

MOV13H.#59H

汾单元

MOVA.21H;判断是否为59分

MOV14H.#08H

;小时单元

CJNEA.#59H・NEXT1

MOV15H.#01H

;日期单元

MOVA.20H;判断是否为55秒

MOV16H.#01H

;星期单元

CJNEA・#55H.NEXT2

MOV17H.#01H

;月单元

LCALLBUZZL

MOV18H.#10H

;年单元

SJMPNEXT

MOV19H・#00H

;设定分报警

NEXT2:

CJNEA.#56H.NEXT3

MOV1AH,#OOH

;设左小时报警

LCALLBUZZL

SJMPNEXT

SETBTRO

NEXT3:

CJNEA・#57H.NEXT4

LOOPL:

JNBTF05

LCALLBUZZL

CLRTFO

SJMPNEXT

MOVTL0.#66H

NEXT4:

CJNEA.#58H.NEXT5

MOVTH0J0FCH

LCALLBUZZL

CPLP3.4

;驱动蜂鸣器

SJMPNEXT

DJNZR7.LOOPL

NEXT5:

CJNEA・#59H.NEXT

SETBP3.4

LCALLBUZZL

POP07H

SJMPNEXT

RET

NEXT1:

CJNEA.#OOH.NEXT

BUZZH:

PUSH07H

MOVA.20H

MOVTMOD.#01H

CJNEA.#OOH.NEXT

MOVTLO.frOCDH

;高频1500HZ

LCALLBUZZH

MOVTHOJOFEH

NEXT:

LCALLADJUST;调时间调整子程序

MOVR7.#100

LCALLCHAIFEN;调拆分子程序,将

SETBTRO

20H-26H中的参数分别存28H-2FH38H-3FH中

LOOPH:

JNBTF0.$

MOVR7.#O8H

CLRTFO

MOVR2・#10H

MOVTLO.frOCDH

MOVR3,#WSLA_7290

MOVTHOJOFEH

JNBP1.2.YEARS;使用戸1・2控制显示

CPLP3.4

;驱动蜂鸣器

内容

DJNZR7.LOOPH

MOVR0.#38H;显示时分秒

SETBP3.4

SJMPDISP

POP07H

YEARS:

MOVR0.#28H;显示年月日

RET

DISP:

LCALLWRNBYT;调7290显示子程序

・************************************

JNBP32$

;键盘修改中断服务程序INT_7290

RETI

・******$*********************************

・******************************“********

INT_7290:

PUSHOOH

:

BUZZ

PUSH02H

・****************************$$******

PUSH03H

BUZZL:

PUSH07H

PUSH04H

MOVTMOD,#01H;方式1

PUSH07H

MOVTL0.#66H;低频500HZ

PUSHACC

MOVTH0,#0FCH

PUSHPSW

MOVR7.#50

MOVR7.#O7H

;写入参数个数

MOVR0.#20H;参数和控制命令缓冲区

首地址

MOVR2,#02H;从器件内部从地址

MOVR3.#WSLA_8563;准备向8563写入数据串

MOVR4.#RSLA_8563;准备从8563读取数据串

LCALLRDADD

MOV12H.20H;写入秒单元

MOV13H.21H;写入分单元

MOV14H.22H;写入时单元

RE:

JBP3.3,$;以査询方式等待下一次按键

LCALLRDKEY;读取键值

CJNEA・#OAH.BKEY;判断是否为A键

AKEY:

MOV51H.#80H

LCALLFLASH

JBP3・3$

LCALLRDKEY

CJNEA.#03H.HOUR1;判断键入的数是否满足小时十位的要求

HOUR1:

JNCERROR1;若键值大于2,则报错

SWAPA;将键值处理成小时数据的十位

ANL14H.#0FH

ORL14H,A;小时数拯的十位生成

LCALLWR8563;写入8563

LCALLCF;拆分,査表,R4(H),R3(L)

MOV3FH.R4;回显

MOVR7,#01H

MOVR0,#3FH

MOVR2,#17H

MOVR3、#WSLA_7290

LCALLWRNBYT

LJMPHOUR2

ERROR1:

LCALLBUZZH;报错,返回重新键入

LJMPAKEY

HOUR2:

MOV51H.#40H

LCALLFLASH

JBP3・3,$

LCALLRDKEY

CJNEA・#OAH.STEP1;判断键值是否满足小时个位的要求(小于10)

STEP1:

JNCERR0R2

ANL14H.#0F0H

ORL14H,A

MOVAJ4H

CJNEA,#24HJJJ;判断小时的值是否满足要求(小于24)

JJJ:

JNCERROR2

LCALLWR8563

LCALLCF拆分,査表,R4(H),R3(L)

MOV3EH.R3;回显

MOVR7.#01H

MOVR0.#3EH

MOVR2.#16H

MOVR3.#WSLA_7290

LCALLWRNBYT

MOV51H.#OOH;停止闪烁

LCALLFLASH

UMPDOWN

ERR0R2:

LCALLBUZZH

UMPHOUR2

BKEY:

CJNEA・#0BH.CKEY

MOV51H.#10H

LCALLFLASH

JBP3・3,$

LCALLRDKEY

CJNEA,#O6H,MIN1

MINI:

JNCERROR3

SWAPA

ANL13H,#0FH

ORL13H.A

LCALLWR8563

LCALLCF;拆分,査表,R4(H),R3(L)

MOV3CH.R4;回显

MOVR7.#01H

MOVR0,#3CH

MOVR2.#14H

MOVR3,#WSLA_7290

LCALLWRNBYT

LJMPMIN2

ERROR3:

LCALLBUZZH

LJMPBKEY

MIN2:

MOV51H.#08H

LCALLFLASH

JBP3・3,$

LCALLRDKEY

CJNEA・#0AH,STEP2

STEP2:

JNCERROR4

ANL13H.#0F0H

ORL13H.A

LCALLWR8563

LCALLCF;拆分,査表,R4(H),R3(L)

MOV3BH.R3;回显

MOVR7,#01H

MOVR0.#3BH

MOVR2,#13H

MOVR3、#WSLA_7290

LCALLWRNBYT

MOV51H.#OOH

LCALLFLASH

LJMPDOWN

ERROR4:

LCALLBUZZH

LJMPMIN2

CKEY:

CJNEA.#OCH.ERROR

MOV51H.#02H

LCALLFLASH

JBP3・3,$

LCALLRDKEY

CJNEA,#O6H.SEC1

SEC1:

JNCERROR5

SWAPA

ANL12H.#0FH

ORL12H,A

LCALLWR8563

LCALLCF;拆分,查表,R4(H),R3(L)

MOV39H.R4;回显

MOVR7.#01H

MOVR0.#39H

MOVR2JH1H

MOVR3,#WSLA_7290

LCALLWRNBYT

UMPSEC2

ERROR5:

LCALLBUZZH

UMPCKEY

SEC2:

MOV51HJ01H

LCALLFLASH

JBP3・3,$

LCALLRDKEY

CJNEA・#0AH.STEP3

STEP3:

JNCERROR6

ANL12H.#OFOH

ORL12H,A

LCALLWR8563

LCALLCF;拆分,査表,R4(H),R3(L)

MOV38H.R3;回显

MOVR7,#01H

MOVRO,#38H

MOVR2.#10H

MOVR3.#WSLA_7290

LCALLWRNBYT

MOV51H.#OOH

LCALLFLASH

UMPDOWN

ERROR6:

LCALLBUZZH

LJMPSEC2

ERROR:

LCALLBUZZH;若键入数不为A、

B、C中的一个,则报错

LCALLDELAY

LCALLBUZZL

DOWN:

CLRIE1

CLRIEO

POPPSW

POPACC

POP07H

POP04H

POP03H

POP02H

POPOOH

RETI

・********$$#*********************总总

;读键值子程序(岀口参数累加器A——获取到的键值)

・********$$#*********************总总

RDKEY:

MOVRO.#1FH

MOVR7.#01H

MOVR2.#01H

MOVR3.#WSLA_7290

MOVR4.#RSLA_7290

LCALLRDADD

MOVAJFH

DECA

RET

・******************************“********

;向日历芯片写入时间参数子程序

;将RAM的10HJDH中的时间参数(含控制字)

写入芯片的00H-0DH单元

・******奪*********************************

WR8563:

MOVR7,#0EH

MOVR0.#10H

MOVR2.#00H

MOVR3、#WSLA_8563

LCALLWRNBYT

RET

・**************枠***********************$

;闪烁子程序

・********************#*$$****************

FLASH:

PUSHOOH

PUSH02H

PUSH03H

PUSH07H

MOV50H.#70H

MOVR7.#O2H

MOVR0.#50H

MOVR2.#O7H

MOVR3,#WSLA_7290

LCALLWRNBYT

POP07H

POP03H

POP02H

POPOOH

RET

・****************************************

;各子程序

・**************##$$*****#******

CHAIFEN:

PUSHPSW

PUSHACC

PUSH03H

PUSHQ4H

MOVA.20H

LCALLCF

MOV38H.R3

MOV39H.R4

MOV3AH.#O2H

MOVA,21H

LCALLCF

MOV3BH.R3

MOV3CH.R4

PUSHDPL

MOV3DH,#O2H

MOVDPTR、#LEDSEG

MOVA.22H

MOVR2.A

LCALLCF

ANLA,#0FH

MOV3EH.R3

MOVCA.@A+DPTR

MOV3FH.R4

MOVR3、A

MOVA,23H

MOVA,R2

LCALLCF

SWAPA

MOVA.R3

ANLA,#0FH

ORLA.#01H

MOVCA,@A+DPTR

MOVR3,A

MOVR4.A

MOV28H.R3

POPDPL

MOV29H.R4

POPDPH

MOVA,25H

POP02H

LCALLCF

RET

MOVA.R3

LEDSEG:

DB

ORLA.#01H

0FCH.60H.0DAH.0F2H66HQB6H.0BEH.0E4H

MOVR3,A

DB

MOV2AH,R3

0FEH,0F6H.0EEH,3EH,9CH.7AH.9EH,8EH

MOV2BH.R4

・****************************************

MOVA,26H

;将20H-26H中从PCF8563T中读岀的7个字节

LCALLCF

参数的无关位屏蔽掉

MOVA.R3

・****************************************

ORLA.#01H

ADJUST:

PUSHACC

MOVR3,A

MOVA,20H

MOV2CH.R3

ANLA,#7FH

MOV2DH.R4

MOV20H.A

MOV2EH.#0FCH

MOVA,21H

MOV2FH.#0DAH

ANLA,#7FH

POPQ4H

MOV21H.A

POP03H

MOVA,22H

POPACC

ANLA,#3FH

POPPSW

MOV22H.A

RET

MOVA,23H

CF:

PUSH02H

ANLA,#3FH

PUSHDPH

MOV23H.A

MOVA,24H

ANLA.#07H

MOV24H.A

MOVA,25H

ANLA,#1FH

MOV25H.A

POPACC

RET

・***********************$**************$$9

;延时子程序

・*****************************$**********

DELAY:

PUSHOOH

PUSH01H

MOVR0.#00H

DELAY1:

MOVRL#01H

DJNZR15

DJNZR0.DELAY1

POPOIH

POPOOH

RET

・****$$$**************$$$*****$#*****

;I2C子程序

・****************************************

END

9系统调试运行结果说明、分析所出现得问题,设计体会与建议

硬件环境:

DP-51PR0C单片机综合仿真实验台,TKSMonitor51仿真器。

软件环境:

PC及Keil软件。

结果说明:

可通过8563日历显示芯片将时间显示在数码管上,按KEY1键可显示日期,按A、B、C键可分别改变时、分、秒,按错键时会有警告音提醒并要求重新输入。

可进行整点报时。

调试中出现的问题及解决方法:

(1)显示两位小时、两位分钟和两位秒参数,相互之间有分隔符号功能:

在该环节中,利用书上的参考程序,实现每Is进入一次中断实现读取时间参数,并进行拆分显示等操作。

最后能够在数码管上显示出初

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1