单片机综合设计实验

单片机综合设计实验
单片机综合设计实验

大连理工大学本科设计报告题目:基于PCF8563的时钟系统设计

课程名称:

学院(系):

专业:

班级:

学号:

学生姓名:

成绩:

2014 年7 月10 日

题目:基于PCF8563的时钟系统设计

1 设计要求

实验要求:

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

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

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

(4)具备键盘修改时间功能。可修改小时、分钟和秒参数;

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

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

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

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

(1)主程序算法描述

主程序中定义端口名称、围器件读写地址增强程序的可读性。设置中断服务程序入口地址,将硬件电路连接与之对应。INT_RCTDUI对应INT_0中断服务程序,INT_7290对应INT1的中断服务程序。开始时先对硬件电路进行复位操作。然后设定PCF8563T的时间和命令参数存放在单片机内部的10H~1DH单元,将其写入到8563的00H~0DH单元。使总的中断使能端有效,开INT0和INT1中断,使触发极性为下降沿。等待中断的到来。

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

调读数据子程序,将读出的8563中02H~08H单元的内容存放于单片机内部20H~26H单元。判断时、分的数值,当时间在**-59-55至**-59-59时调用低频蜂鸣器BUZZL,当时间为**-00-00时调用高频蜂鸣器BUZZH。实现整点报时。调整时间,将20H-26H单元中内容拆分查表后送到28H~2FH (年,月,日)和38H~3FH(时,分,秒)。使P1.2控制显示内容,当P1.2=1时,显示时,分,秒;当P1.2=0时,显示年,月,日。

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

设置初始值使BUZZL发声频率为500HZ,BUZZH发声频率为1500HZ。

(4)键盘修改子程序

读入进入中断前的数据,将8563的20H单元内容送入单片机内部12H单元(秒);21H单元内容送入单片机内部13H单元(分);22H单元内容送入单片机内部14H单元(时)便于修改后显示。读入输入的键值为0AH时,为A键修改小时参数。设置小时的十位闪烁命令等待按键操作,读入键值判断是否超过三,超过则报警且要求重新输入。输入正确时回显,设置小时的个位闪烁命令等待按键操作,读入键值判断个位不超过9,然后判断小时整个数是否小于24。分和秒的设置与小时类似,不同的是十位不能超过5个位不能超过9。

(5)闪烁子程序

设置入口闪烁参数单元值

3 系统电路图

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

5 主程序中主要变量定义

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

8 程序清单

SDA BIT P1.0

SCL BIT P1.1

WSLA_8563 EQU 0A2H ;PCF8563T口地址RSLA_8563 EQU 0A3H

WSLA_7290 EQU 70H ;ZLG7290B口地址RSLA_7290 EQU 71H

ORG 8000H

LJMP 8040H

ORG 8003H

LJMP INT_RCT

ORG 8013H

LJMP INT_7290

ORG 8040H

START: MOV SP,#60H

CLR P1.7 ;ZLG7290复位

LCALL DELAY

SETB P1.7

;**************************************** ;设定pdf8563tde时间和命令参数(参数和控制命令缓冲区10H-1DH)

;**************************************** MOV 10H,#00H ;启动控制字

MOV 11H,#1FH ;设置报警及定时器中断MOV 12H,#50H ;秒单元

MOV 13H,#59H ;分单元

MOV 14H,#08H ;小时单元

MOV 15H,#01H ;日期单元

MOV 16H,#01H ;星期单元

MOV 17H,#01H ;月单元

MOV 18H,#10H ;年单元

MOV 19H,#00H ;设定分报警

MOV 1AH,#00H ;设定小时报警

MOV 1BH,#00H ;设定日报警

MOV 1CH,#00H ;设定星期报警

MOV 1DH,#83H ;设定CLKOUT的频率,1秒周期方波

MOV R7,#0EH ;写入参数个数

MOV R0,#10H ;参数与控制命令缓冲区首地址

MOV R2,#00H ;从器件内部子地址

MOV R3,#WSLA_8563;准备向PCF8563T 写入数据串

LCALL WRNBYT ;写入时间,控制命令到PCF8563T

SETB EA ;启动总中断

SETB EX0 ;启动INT_RCT(INT_0)

SETB IT0 ;定时器0下降沿有效

SETB EX1 ;启动INT_7290(INT_7290)

SETB IT1 ;定时器1下降沿有效

SJMP $ ;等待中断

;**************************************** ;中断服务子程序INT_RCT

;**************************************** INT_RCT:MOV R7,#07H ;数据块字节数

MOV R0,#20H ;内部数据块首地址

MOV R2,#02H ;内部寄存器首地址

MOV R3,#WSLA_8563;向8563写地址

MOV R4,#RSLA_8563;从8563读地址

LCALL RDADD ;调读数据子程序,将读出的数据存放于单片机20H-26H中

MOV A,21H ;判断是否为59分

CJNE A,#59H,NEXT1

MOV A,20H ;判断是否为55秒

CJNE A,#55H,NEXT2

LCALL BUZZL

SJMP NEXT

NEXT2: CJNE A,#56H,NEXT3

LCALL BUZZL

SJMP NEXT

NEXT3: CJNE A,#57H,NEXT4

LCALL BUZZL

SJMP NEXT

NEXT4: CJNE A,#58H,NEXT5

LCALL BUZZL

SJMP NEXT

NEXT5: CJNE A,#59H,NEXT

LCALL BUZZL

SJMP NEXT

NEXT1: CJNE A,#00H,NEXT

MOV A,20H

CJNE A,#00H,NEXT

LCALL BUZZH

NEXT: LCALL ADJUST ;调时间调整子程序LCALL CHAIFEN ;调拆分子程序,将20H-26H中的参数分别存28H-2FH,38H-3FH中MOV R7,#08H

MOV R2,#10H

MOV R3,#WSLA_7290

JNB P1.2,YEARS ;使用P1.2控制显示内容

MOV R0,#38H ;显示时分秒

SJMP DISP

YEARS: MOV R0,#28H ;显示年月日DISP: LCALL WRNBYT ;调7290显示子程序JNB P3.2,$

RETI

;**************************************** ;BUZZ

;**************************************** BUZZL: PUSH 07H

MOV TMOD,#01H ;方式1

MOV TL0,#66H ;低频500HZ

MOV TH0,#0FCH

MOV R7,#50

SETB TR0

LOOPL: JNB TF0,$

CLR TF0

MOV TL0,#66H

MOV TH0,#0FCH

CPL P3.4 ;驱动蜂鸣器

DJNZ R7,LOOPL

SETB P3.4

POP 07H

RET

BUZZH: PUSH 07H

MOV TMOD,#01H

MOV TL0,#0CDH ;高频1500HZ

MOV TH0,#0FEH

MOV R7,#100

SETB TR0

LOOPH: JNB TF0,$

CLR TF0

MOV TL0,#0CDH

MOV TH0,#0FEH

CPL P3.4 ;驱动蜂鸣器

DJNZ R7,LOOPH

SETB P3.4

POP 07H

RET

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

;**************************************** INT_7290:PUSH 00H

PUSH 02H

PUSH 03H

PUSH 04H

PUSH 07H

PUSH ACC

PUSH PSW

MOV R7,#07H ;写入参数个数

MOV R0,#20H ;参数和控制命令缓冲区首地址

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

MOV R3,#WSLA_8563;准备向8563写入数据串

MOV R4,#RSLA_8563;准备从8563读取数据串

LCALL RDADD

MOV 12H,20H ;写入秒单元

MOV 13H,21H ;写入分单元

MOV 14H,22H ;写入时单元

RE: JB P3.3,$ ;以查询方式等待下一次按键LCALL RDKEY ;读取键值

CJNE A,#0AH,BKEY;判断是否为A键AKEY: MOV 51H,#80H

LCALL FLASH

JB P3.3,$

LCALL RDKEY

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

HOUR1: JNC ERROR1;若键值大于2,则报错SW AP A;将键值处理成小时数据的十位

ANL 14H,#0FH

ORL 14H,A ;小时数据的十位生成

LCALL WR8563 ;写入8563

LCALL CF ;拆分,查表,R4(H),R3(L) MOV 3FH,R4 ;回显

MOV R7,#01H

MOV R0,#3FH

MOV R2,#17H

MOV R3,#WSLA_7290

LCALL WRNBYT

LJMP HOUR2

ERROR1: LCALL BUZZH;报错,返回重新键入LJMP AKEY

HOUR2: MOV 51H,#40H

LCALL FLASH

JB P3.3,$

LCALL RDKEY

CJNE A,#0AH,STEP1;判断键值是否满足小时个位的要求(小于10)

STEP1:JNC ERROR2

ANL 14H,#0F0H

ORL 14H,A

MOV A,14H

CJNE A,#24H,JJJ;判断小时的值是否满足要求(小于24)

JJJ: JNC ERROR2

LCALL WR8563

LCALL CF ;拆分,查表,R4(H),R3(L) MOV 3EH,R3 ;回显

MOV R7,#01H

MOV R0,#3EH

MOV R2,#16H

MOV R3,#WSLA_7290

LCALL WRNBYT

MOV 51H,#00H ;停止闪烁

LCALL FLASH

LJMP DOWN

ERROR2: LCALL BUZZH

LJMP HOUR2

BKEY: CJNE A,#0BH,CKEY

MOV 51H,#10H

LCALL FLASH

JB P3.3,$

LCALL RDKEY

CJNE A,#06H,MIN1

MIN1: JNC ERROR3

SWAP A

ANL 13H,#0FH

ORL 13H,A

LCALL WR8563

LCALL CF ;拆分,查表,R4(H),R3(L) MOV 3CH,R4 ;回显

MOV R7,#01H

MOV R0,#3CH

MOV R2,#14H

MOV R3,#WSLA_7290

LCALL WRNBYT

LJMP MIN2

ERROR3: LCALL BUZZH

LJMP BKEY

MIN2: MOV 51H,#08H

LCALL FLASH

JB P3.3,$

LCALL RDKEY

CJNE A,#0AH,STEP2

STEP2: JNC ERROR4

ANL 13H,#0F0H

ORL 13H,A

LCALL WR8563

LCALL CF ;拆分,查表,R4(H),R3(L) MOV 3BH,R3 ;回显

MOV R7,#01H

MOV R0,#3BH

MOV R2,#13H

MOV R3,#WSLA_7290

LCALL WRNBYT

MOV 51H,#00H

LCALL FLASH

LJMP DOWN

ERROR4: LCALL BUZZH

LJMP MIN2

CKEY: CJNE A,#0CH,ERROR

MOV 51H,#02H

LCALL FLASH

JB P3.3,$

LCALL RDKEY

CJNE A,#06H,SEC1

SEC1: JNC ERROR5

SWAP A

ANL 12H,#0FH

ORL 12H,A

LCALL WR8563

LCALL CF ;拆分,查表,R4(H),R3(L) MOV 39H,R4 ;回显

MOV R7,#01H

MOV R0,#39H

MOV R2,#11H

MOV R3,#WSLA_7290

LCALL WRNBYT

LJMP SEC2

ERROR5: LCALL BUZZH

LJMP CKEY

SEC2: MOV 51H,#01H

LCALL FLASH

JB P3.3,$

LCALL RDKEY

CJNE A,#0AH,STEP3

STEP3: JNC ERROR6

ANL 12H,#0F0H

ORL 12H,A

LCALL WR8563

LCALL CF ;拆分,查表,R4(H),R3(L) MOV 38H,R3 ;回显

MOV R7,#01H

MOV R0,#38H

MOV R2,#10H

MOV R3,#WSLA_7290

LCALL WRNBYT

MOV 51H,#00H

LCALL FLASH

LJMP DOWN

ERROR6: LCALL BUZZH

LJMP SEC2

ERROR: LCALL BUZZH ;若键入数不为A、B、C中的一个,则报错

LCALL DELAY

LCALL BUZZL

DOWN: CLR IE1

CLR IE0

POP PSW

POP ACC

POP 07H

POP 04H

POP 03H

POP 02H

POP 00H

RETI

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

;**************************************** RDKEY: MOV R0,#1FH

MOV R7,#01H

MOV R2,#01H

MOV R3,#WSLA_7290

MOV R4,#RSLA_7290

LCALL RDADD

MOV A,1FH

DEC A

RET

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

;将RAM的10H-1DH中的时间参数(含控制字)写入芯片的00H-0DH单元

;**************************************** WR8563: MOV R7,#0EH

MOV R0,#10H

MOV R2,#00H

MOV R3,#WSLA_8563

LCALL WRNBYT

RET

;**************************************** ;闪烁子程序

;**************************************** FLASH: PUSH 00H

PUSH 02H

PUSH 03H

PUSH 07H

MOV 50H,#70H

MOV R7,#02H

MOV R0,#50H

MOV R2,#07H

MOV R3,#WSLA_7290

LCALL WRNBYT

POP 07H

POP 03H

POP 02H

POP 00H

RET

;**************************************** ;各子程序

;**************************************** CHAIFEN:PUSH PSW

PUSH ACC

PUSH 03H

PUSH 04H

MOV A,20H

LCALL CF

MOV 38H,R3

MOV 39H,R4

MOV 3AH,#02H

MOV A,21H

LCALL CF

MOV 3BH,R3

MOV 3CH,R4

MOV 3DH,#02H

MOV A,22H

LCALL CF

MOV 3EH,R3

MOV 3FH,R4

MOV A,23H

LCALL CF

MOV A,R3

ORL A,#01H

MOV R3,A

MOV 28H,R3

MOV 29H,R4

MOV A,25H

LCALL CF

MOV A,R3

ORL A,#01H

MOV R3,A

MOV 2AH,R3

MOV 2BH,R4

MOV A,26H

LCALL CF

MOV A,R3

ORL A,#01H

MOV R3,A

MOV 2CH,R3

MOV 2DH,R4

MOV 2EH,#0FCH

MOV 2FH,#0DAH

POP 04H

POP 03H

POP ACC

POP PSW

RET

CF: PUSH 02H

PUSH DPH

PUSH DPL

MOV DPTR,#LEDSEG

MOV R2,A

ANL A,#0FH

MOVC A,@A+DPTR

MOV R3,A

MOV A,R2

SWAP A

ANL A,#0FH

MOVC A,@A+DPTR

MOV R4,A

POP DPL

POP DPH

POP 02H

RET

LEDSEG:DB

0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H DB

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

;**************************************** ;将20H-26H中从PCF8563T中读出的7个字节参数的无关位屏蔽掉

;**************************************** ADJUST: PUSH ACC

MOV A,20H

ANL A,#7FH

MOV 20H,A

MOV A,21H

ANL A,#7FH

MOV 21H,A

MOV A,22H

ANL A,#3FH

MOV 22H,A

MOV A,23H

ANL A,#3FH

MOV 23H,A

相关主题
相关文档
最新文档