单片机综合设计实验.docx
- 文档编号:5886367
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:21
- 大小:42KB
单片机综合设计实验.docx
《单片机综合设计实验.docx》由会员分享,可在线阅读,更多相关《单片机综合设计实验.docx(21页珍藏版)》请在冰豆网上搜索。
单片机综合设计实验
大连理工大学本科设计报告
题目:
基于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进入一次中断实现读取时间参数,并进行拆分显示等操作。
最后能够在数码管上显示出初
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 综合 设计 实验