大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计说明.docx

上传人:b****6 文档编号:8599675 上传时间:2023-02-01 格式:DOCX 页数:25 大小:104.27KB
下载 相关 举报
大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计说明.docx_第1页
第1页 / 共25页
大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计说明.docx_第2页
第2页 / 共25页
大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计说明.docx_第3页
第3页 / 共25页
大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计说明.docx_第4页
第4页 / 共25页
大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计说明.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计说明.docx

《大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计说明.docx》由会员分享,可在线阅读,更多相关《大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计说明.docx(25页珍藏版)》请在冰豆网上搜索。

大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计说明.docx

大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计说明

理工大学本科设计报告

 

题目:

基于ZLG7290B、PCF8563的时钟系统设计

 

课程名称:

单片机原理及应用实验

学院(系):

电子信息与电气工程学部

专业:

班级:

学号:

学生:

成绩:

 

2015年5月4日

《计算机技术实验室安全操作规》

1.实验前认真阅读安全操作规程,不得擅自触及总电源开关。

2.实验期间学生不准使用与实验无关的电气设备。

3.实验过程中若遇计算机故障时,交由指导老师负责,不允许学生私自开箱维修。

4.在实验过程中,连接实验设备的220v电源时,要保持手部干燥,并注意操作安全,不允许使用金属物件触碰220v电源线及电源插座的带点部位。

5.学生实验期间,在连接导线时不允许实验台带电操作,连接完成后经检查无误时再将实验台上电。

完成实验时先将实验台断电后再进行导线的拆除。

6.实验期间要关闭手机等通讯工具,实验室一律禁止携带饮料、食品、禁止吸烟、喧哗、嬉闹、确保实验室卫生、整洁。

7.学生完成实验后,必须关闭所有实验设备的电源。

8.如果实验过程中发生“突发事件”时,不要慌、应沉着冷静,采取相关的措施。

必要时拨打校晋级(84708110)或拨打110、120报警。

电工电子实验教学中心

计算机技术实验室

个人签字:

题目:

基于ZLG7290B、PCF8563的时钟系统设计

1设计要求

(1)由PCF8563提供时间参数并由ZLG7290进行显示;

(2)能够利用键盘实现时间参数的修改,修改过程可加入“回显”、“闪烁”、“容错”等功能;

(3)利用蜂鸣器实现时钟系统的“整点报时”功能;

(4)要求程序中有中断环节;

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

(1)由PCF8563T实时时钟芯片提供时间数据,由ZLG7290B显示电路控制8位数码管显示当前时间,二者通过I2C总线结构与AT89C51单片机相连,SDA和SCK分别接P1.0和P1.1。

(2)该系统采用双中断结构,时钟输出CLKOUT接INT0,为低优先级,每一秒触发一次中断;键盘中断输出信号INT接INT1,为高优先级,每当有按键时触发中断。

(3)算法说明:

●10H-1DH:

向PCF8563T输入的相关参数的数据块;

●20H-26H:

从PCF8563T中读出的时间参数(秒、分、小时、日、星期、月、年)。

通过CHAIFEN子程序将20H-26H中获取时间参数拆分查表后送入下列缓冲区:

●28H-2FH:

年(4单元)、月(2单元)、日(2单元);

●38H-3FH:

小时、分钟、秒(各占单元)。

键盘修改时间子程序中先将键值读入A,经判断转换后送入缓冲区20H-22H。

主程序功能:

Ø将10H-1DH中特定时间和控制命令送入PCF8563T对应寄存器中,等待中断。

Ø由于PCF8563T的CLKOUT设定输出频率为1HZ,将其与INT0相连,每秒引发一次中断。

在时钟中断服务程序中读取时间参数,调整各参数后进入整点报时子程序,判断是否报时。

然后将时间参数经拆分查表等操作,将年、月、日送28H-2FH缓冲区,将小时、分、秒送38H-3FH缓冲区,最后根据P1.2电平决定哪个缓冲区容送ZLG7290B进行显示。

ØZLG7290B的键盘中断输出信号INT与INT1相连,每当有按键是触发中断,先读入键值至A中,判断是A、B或C,分别对应修改时、分、秒,进入对应子程序然后在等待两次输入,经转换设置成十位和个位,存入入12H-14H对应单元,再送入PCF8563T对应寄存器。

3系统电路

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

(1)ZLG7290B:

数码管动态显示驱动、键盘扫描管理芯片,可驱动8位共阴极结构LED数码管,同时可管理64个按键扫描识别,接口采用I2C结构。

(2)PCF8563T:

由Philips公司设计的低功耗CMOS实时时钟日历芯片,具有1.0-5.5V的电压工作围、一个可编程时钟输出和掉电检测电路,接口采用I2C结构,每次读写操作部地址寄存器自动产生增量。

(3)交流驱动蜂鸣器:

一种发声元件,体积小,使用PNP驱动,需要一交变信号驱动才能发出相应频率的声音。

5主程序中主要变量定义

RAM单元或工作寄存器定义、功能等。

变量名称

RAM单元/寄存器

功能

PCF8563T时间和控制命令参数

10H-1DH

设定PCF8563T时间和

命令参数的缓冲区

时间参数

20H-26H

从PCF8563T中读出的时间参数(秒、分、小时、日、星期、月、年)缓冲区

年月日

28H-2FH

拆分查表所得年月日缓冲区以待显示

时分秒

38H-3FH

拆分查表所得时分秒缓冲区以待显示

键值

1FH

读入的键值存储单元

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

子程序的名称、功能,以及入口、出口参数。

子程序名称

入口参数

出口参数

功能描述

INT_RCT

时钟中断服务子程序

PANDUAN

20-21H

判断并进行整点报时

CHAIFEN

20-26H

28-2FH、38-3FH

将时间参数拆分查表

CF

A

R4、R3

将A中数据拆违两独立的十六进制数并查表得到对应字型码

ADJUST

20-25H

20-25H

屏蔽各时间参数无关位

INT_7290

键盘修改时间中断服务子程序

RDKEY

A

读键值子程序

WR8563

R7、R0、R2、R3

向日历芯片写时间参数

WRNBYT

R7、R0、R2、R3

带有部单元地址的多字节写操作子程序

RDADD

R7、R0、R2、R3、R4

带有部单元地址的多字节读操作子程序

7主程序程序流程图

 

N

Y

 

N

YN

NWAIT1

N

Y

Y

 

WAIT2

N

Y

 

8程序清单

;************************************************************

;由PCF8563提供时间参数并由ZLG7290进行显示

;能够利用键盘实现时间参数的修改,修改过程可加入回显、闪烁、容错等功能

;利用蜂鸣器实现时钟系统整点报时功能

;要求程序中有中断环节

;转换显示:

P1.2与KEY1连接,按下KEY1显示年月日,平时显示时分秒

;设定时钟芯片CLKOUT输出秒脉冲且与P3.2连接

;采用中断的方式来显示时间(每秒钟刷新一次显示)

;ZLG7290B芯片的RST_L复位端与P1.7口连接,以便复位操作

;************************************************************

SDABITP1.0;定义I2C信号引脚

SCLBITP1.1

WSLA_8563EQU0A2H;PCF8563T口地址

RSLA_8563EQU0A3H

WSLA_7290EQU70H;ZLG7290B口地址

RSLA_7290EQU71H

ORG8000H

LJMP8100H

ORG8003H

LJMPINT_RCT

ORG8013H

LJMPINT_7290

ORG8100H

START:

MOVSP,#60H

CLRP1.7;ZLG7290B复位

LCALLDELAY

SETBP1.7

;******************************

;设定PCF8563T的时间和命令参数

;******************************

MOV10H,#00H;启动控制字

MOV11H,#1FH;设置报警及定时器中断

MOV12H,#50H;秒单元

MOV13H,#59H;分单元

MOV14H,#10H;时单元

MOV15H,#29H;日期单元

MOV16H,#03H;星期单元

MOV17H,#04H;月单元

MOV18H,#15H;年单元

MOV19H,#00H;设定分报警

MOV1AH,#00H;设定小时报警

MOV1BH,#00H;设定日报警

MOV1CH,#00H;设定星期报警

MOV1DH,#83H;设定CLKOUT的频率(1S)

;*****************************

MOVR7,#0EH;写入参数个数(时间和控制字)

MOVR0,#10H;参数和控制命令缓冲区首地址

MOVR2,#00H;从器件部从地址

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

LCALLWRNBYT;写入时间、控制命令到PCF8563T

MOVIP,02H

SETBEA

SETBEX0

SETBEX1

SETBIT0

SETBIT1

SJMP$;等待中断

;******************************

;时钟中断服务子程序

;******************************

INT_RCT:

MOVR7,#07H;读出数个数

MOVR0,#20H;目标数据块首地址

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

MOVR3,#WSLA_8563

MOVR4,#RSLA_8563;准备读PCF8563T的时间参数

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

LCALLADJUST;调时间调整子程序

LCALLPANDUAN;调判断键值子程序

LCALLCHAIFEN;调拆分子程序(包含查表),将20H~26H中的参数分别存于28H~2FH、38H~3FH单元中

MOVR7,#08H

MOVR2,#10H

MOVR3,#WSLA_7290

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

MOVR0,#38H;显示小时、分钟和秒

SJMPDISP

YEARS:

MOVR0,#28H;显示年月日

DISP:

LCALLWRNBYT;调ZLG7290B显示

JNBP3.2,$

RETI

;******************************

;整点报时子程序

;******************************

PANDUAN:

MOVA,21H

CJNEA,#59H,PDFEN

MOVA,20H

CJNEA,#56H,PD57

LCALLBAOSHI1

AJMPEXIT

PD57:

CJNEA,#57H,PD58

LCALLBAOSHI1

AJMPEXIT

PD58:

CJNEA,#58H,PD59

LCALLBAOSHI1

AJMPEXIT

PD59:

CJNEA,#59H,EXIT

LCALLBAOSHI1

AJMPEXIT

PDFEN:

CJNEA,#00H,EXIT

MOVA,20H

CJNEA,#00H,EXIT

LCALLBAOSHI2

EXIT:

RET

;*******************************

;低音1S报时

BAOSHI1:

PUSHPSW

PUSH00H

MOVR0,#0FFH

MOVTMOD,#10H

MOVTL1,#00H

MOVTH1,#0FEH

SETBTR1

WORK1:

JNBTF1,$

CLRTF1

MOVTL1,#00H

MOVTH1,#0FEH

CPLP1.4

DJNZR0,WORK1

POP00H

POPPSW

RET

;*****************************

;高音1S报时

BAOSHI2:

PUSHPSW

PUSH00H

PUSH01H

MOVR0,#04H

WORK2:

MOVR1,#00H

MOVTMOD,#10H

MOVTL1,#00H

MOVTH1,#0FFH

SETBTR1

WORK3:

JNBTF1,$

CLRTF1

MOVTL1,#00H

MOVTH1,#0FFH

CPLP1.4

DJNZR1,WORK3

DJNZR0,WORK2

POP01H

POP00H

POPPSW

RET

;******************************

;各子程序

;*****************************

ORG8300H

CHAIFEN:

PUSHPSW;对20H~26H单元的参数拆分并在查表后送28H~2FH(年月日)和38H~3FH(时分秒)

PUSHACC

PUSH03H

PUSH04H

MOVA,20H;取秒参数

LCALLCF;拆分、查表在R4、R3中

MOV38H,R3;送秒的个位

MOV39H,R4;送秒的十位

MOV3AH,#02H;送分隔符

MOVA,21H;取分参数

LCALLCF

MOV3BH,R3;送分的个位

MOV3CH,R4;送分的十位

MOV3DH,#02H;送分隔符

MOVA,22H;取小时参数

LCALLCF

MOV3EH,R3;送小时的个位

MOV3FH,R4;送小时的十位

MOVA,23H;取日期参数

LCALLCF

MOVA,R3

MOVR3,A

MOV28H,R3

MOV29H,R4

MOVA,25H;取月参数

LCALLCF

MOVA,R3

ORLA,#01H

MOVR3,A

MOV2AH,R3

MOV2BH,R4

MOVA,26H;取年参数

LCALLCF

MOVA,R3

ORLA,#01H

MOVR3,A

MOV2CH,R3

MOV2DH,R4

MOV2EH,#0FCH;年的高两位处理

MOV2FH,#0DAH

POP04H

POP03H

POPACC

POPPSW

RET

;*************************************************************

;将A中的数据拆分成两个独立的BCD码并查表,结果分别存放于R4、R3中

CF:

PUSH02H

PUSHDPH

PUSHDPL

MOVDPTR,#LEDSEG

MOVR2,A

ANLA,#0FH

MOVCA,A+DPTR

MOVR3,A

MOVA,R2

SWAPA

ANLA,#0FH

MOVCA,A+DPTR

MOVR4,A

POPDPL

POPDPH

POP02H

RET

;******************************************************************

LEDSEG:

DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H

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

;******************************************************************

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

;******************************************************************

ADJUST:

PUSHACC

MOVA,20H

ANLA,#7FH

MOV20H,A

MOVA,21H

ANLA,#7FH

MOV21H,A

MOVA,22H

ANLA,#3FH

MOV22H,A

MOVA,23H

ANLA,#3FH

MOV23H,A

MOVA,24H

ANLA,#07H

MOV24H,A

MOVA,25H

ANLA,#1FH

MOV25H,A

POPACC

RET

;**************************

;延时子程序

;***************************

DELAY:

PUSH00H

PUSH01H

MOVR0,#00H

DELAY1:

MOVR1,#00H

DJNZR1,$

DJNZR0,DELAY1

POP01H

POP00H

RET

;******************************

;键盘修改时间中断服务子程序

;*******************************

INT_7290:

PUSH00H

PUSH02H

PUSH03H

PUSH04H

PUSH07H

PUSHACC

PUSHPSW

LCALLRDKEY;读取第一个按键值(功能键)

;*************************

;修改小时

;********************************

AKEY:

CJNEA,#0AH,BKEY;判断是A键吗?

不是跳转判断是B

P3.3,$;以查询的方式等待下一次按键操作

LCALLRDKEY;读取第二个按键值(小时的十位数?

SWAPA

ANL14H,#0FH

ORL14H,A;14H单元中的“十位数”生成

P3.3,$;以查询的方式等待下一次按键操作

LCALLRDKEY;读取第三个按键值(小时的个位数)

ANL14H,#0F0H;将键值数据处理成小时的个位

ORL14H,A

MOVR7,#01H

MOVR0,#14H

MOVR2,#04H

MOVR3,#WSLA_8563

LCALLWRNBYT;将修改后的时间参数送PCF8563T

LJMPDOWN

;**********************

;修改分

BKEY:

CJNEA,#0BH,CKEY

P3.3,$

LCALLRDKEY

SWAPA

ANL13H,#0FH

ORL13H,A

P3.3,$

LCALLRDKEY

ANL13H,#0F0H

ORL13H,A

MOVR7,#01H

MOVR0,#13H

MOVR2,#03H

MOVR3,#WSLA_8563

LCALLWRNBYT

LJMPDOWN

;**********************

;修改秒

CKEY:

CJNEA,#0CH,DOWN

P3.3,$

LCALLRDKEY

SWAPA

ANL12H,#0FH

ORL12H,A

P3.3,$

LCALLRDKEY

ANL12H,#0F0H

ORL12H,A

MOVR7,#01H

MOVR0,#12H

MOVR2,#02H

MOVR3,#WSLA_8563

LCALLWRNBYT

LJMPDOWN

;*******************

;中断返回退出

DOWN:

CLRIE0

POPPSW

POPACC

POP07H

POP04H

POP03H

POP02H

POP00H

RETI

;*************************

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

RDKEY:

MOVR0,#1FH;键值缓冲单元

MOVR7,#01H;取键值数据

MOVR2,#01H;指向部数据键值寄存器地址

MOVR3,#WSLA_7290;取器件写地址

MOVR4,#RSLA_7290;取器件读地址

LCALLRDADD;读出7290的01H单元中的键值

MOVA,1FH;取键值送缓冲单元

DECA

RET

;*************************

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

WR8536:

MOVR7,#07H;写入参数个数(时间和控制字)

MOVR0,#12H;参数和控制命令缓冲区首地址

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

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

LCALLWRNBYT;写入时间、控制命令到PCF8563T

RET

;************************

;相关I2C子程序

;************************

;带有部单元地址的多字节写操作子程序WRNBYT

;通用的I2C通讯子程序(多字节写操作)

;入口参数R7字节数,R0:

源数据块首地址

;R0原数据块首地址;R2从器件部子地址;R3:

外围器件地址(写)

;相关子程序WRBYT、STOP、CACK、STA

WRNBYT:

PUSHPSW

PUSHACC

WRADD:

MOVA,R3;取外围器件地地址(包含r/w=0)

LCALLSTA;发送起始信号S

LCALLWRBYT;发送外围地址

LCALLCACK;检测外围器件的应答信号

F0,WRADD;如果应

MOVA,R2

LCALLWRBYT;发送部寄存器首地址

LCALLCACK;检测外围器件的应答信号

F0,WRADD;如果应答不正确返回重来

WRDA:

MOVA,R0

LCALLWRBYT;发送外围地址

LCALLCACK;检测外围器件的应答信号

F0,WRADD;如果应答不正确返回重来

INCR0

DJNZR7,WRDA

LCALLSTOP

POPACC

POPPSW

RET

;***********************************

;带有部单元地址的多字节读操作子程序RDADD

;入口参数R7字节数;

;R0目标数据块首地址;R2从器件部子地址;

;R3器件地址(写);R4器件地址(读)

;相关子程序WRBYT、STOP、CACK、STA、MACK、MNACK

RDADD:

PUSHPSW;从PCF8563的02H单元读入7个参数

PUSHACC;存放于20H-26H单元

RD

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

当前位置:首页 > 高等教育 > 农学

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

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