自动报时设计VHDL.docx

上传人:b****5 文档编号:7778684 上传时间:2023-01-26 格式:DOCX 页数:25 大小:118.12KB
下载 相关 举报
自动报时设计VHDL.docx_第1页
第1页 / 共25页
自动报时设计VHDL.docx_第2页
第2页 / 共25页
自动报时设计VHDL.docx_第3页
第3页 / 共25页
自动报时设计VHDL.docx_第4页
第4页 / 共25页
自动报时设计VHDL.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

自动报时设计VHDL.docx

《自动报时设计VHDL.docx》由会员分享,可在线阅读,更多相关《自动报时设计VHDL.docx(25页珍藏版)》请在冰豆网上搜索。

自动报时设计VHDL.docx

自动报时设计VHDL

题目:

自动报时系统设计

1设计要求

(1)使用PCF8563T实时时钟芯片与ZLG7290B显示电路结合起来,构成一时钟系统。

(2)由8位数码管显示当前时间,并通过一按钮开关,不按下时显示“时、分、秒”,按下时显示“年、月、日”。

(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程序清单

SDABITP1.0

SCLBITP1.1

WSLA_8563EQU0A2H

RSLA_8563EQU0A3H

WSLA_7290EQU70H

RSLA_7290EQU71H

ORG8000H

LJMP8100H

ORG8003H

LJMPINT_RCT

ORG8013H

LJMPINT_7290

ORG8100H

START:

MOVSP,#60H

CLRP1.7

LCALLDELAY

SETBP1.7

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

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

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

MOV10H,#00H

MOV11H,#1FH

MOV12H,#50H;秒

MOV13H,#59H;分

MOV14H,#01H;时

MOV15H,#09H;日期

MOV16H,#04H;星期

MOV17H,#06H;月

MOV18H,#11H;年

MOV19H,#00H

MOV1AH,#00H

MOV1BH,#00H

MOV1CH,#00H

MOV1DH,#83H

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

MOVR7,#0EH

MOVR0,#10H

MOVR2,#00H

MOVR3,#WSLA_8563

LCALLWRNBYT

MOVIP,02H

SETBEA

SETBEX0

SETBEX1

SETBIT0

SETBIT1

SJMP$

 

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

;时钟中断服务子程序

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

INT_RCT:

MOVR7,#07H

MOVR0,#20H

MOVR2,#02H

MOVR3,#WSLA_8563

MOVR4,#RSLA_8563

LCALLRDADD

LCALLADJUST

LCALLPANDUAN

LCALLCHAIFEN

MOVR7,#08H

MOVR2,#10H

MOVR3,#WSLA_7290

JNBP1.2,YEARS

MOVR0,#38H

SJMPDISP

YEARS:

MOVR0,#28H

DISP:

LCALLWRNBYT

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

PUSHACC

PUSH03H

PUSH04H

MOVA,20H;取秒参数

LCALLCF

MOV38H,R3

MOV39H,R4

MOV3AH,#02H

MOVA,21H

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中数据拆分为两独立的十六进制数并查表

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

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

;屏蔽读出的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

JBP3.3,$

LCALLRDKEY

SWAPA

ANL14H,#0FH

ORL14H,A

JBP3.3,$

LCALLRDKEY

ANL14H,#0F0H

ORL14H,A

MOVR7,#01H

MOVR0,#14H

MOVR2,#04H

MOVR3,#WSLA_8563

LCALLWRNBYT

LCALLDELAY

LCALLFLASH

LJMPDOWN

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

;修改分

BKEY:

CJNEA,#0BH,CKEY

JBP3.3,$

LCALLRDKEY

SWAPA

ANL13H,#0FH

ORL13H,A

JBP3.3,$

LCALLRDKEY

ANL13H,#0F0H

ORL13H,A

MOVR7,#01H

MOVR0,#13H

MOVR2,#03H

MOVR3,#WSLA_8563

LCALLWRNBYT

LJMPDOWN

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

;修改秒

CKEY:

CJNEA,#0CH,DOWN

JBP3.3,$

LCALLRDKEY

SWAPA

ANL12H,#0FH

ORL12H,A

JBP3.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

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

;读键值子程序

RDKEY:

MOVR0,#1FH

MOVR7,#01H

MOVR2,#01H

MOVR3,#WSLA_7290

MOVR4,#RSLA_7290

LCALLRDADD

MOVA,1FH

DECA

RET

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

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

WR8536:

MOVR7,#07H

MOVR0,#12H

MOVR2,#02H

MOVR3,#WSLA_8563

LCALLWRNBYT

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;检测外围器件的应答信号

JBF0,WRADD;如果应

MOVA,R2

LCALLWRBYT;发送内部寄存器首地址

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

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

WRDA:

MOVA,@R0

LCALLWRBYT;发送外围地址

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

JBF0,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单元

RDADD1:

LCALLSTA

MOVA,R3;取器件地址(写)

LCALLWRBYT;发送外围地址

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

JBF0,RDADD1;如果应答不正确返回重来

MOVA,R2;取内部地址

LCALLWRBYT;发送外围地址

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

JBF0,RDADD1;如果应答不正确返回重来

LCALLSTA

MOVA,R4;取器件地址(读)

LCALLWRBYT;发送外围地址

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

JBF0,RDADD1;如果应答不正确返回重来

RDN:

LCALLRDBYT

MOV@R0,A

DJNZR7,ACK

LCALLMNACK

LCALLSTOP

POPACC

POPPSW

RET

ACK:

LCALLMACK

INCR0

SJMPRDN

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

;启动信号子程序S

STA:

SETBSDA;启动信号S

SETBSCL

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

CLRSDA

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

CLRSCL

RET

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

;停止信号子程序P

STOP:

CLRSDA;停止信号P

SETBSCL

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

SETBSDA

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

CLRSCL

CLRSDA

RET

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

;应答信号子程序MACK

MACK:

CLRSDA;发送应答信号ACK

SETBSCL

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

CLRSCL

SETBSDA

RET

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

;非应答法信号子程序MNACK

MNACK:

SETBSDA;发送非应答信号NACK

SETBSCL

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

CLRSCL

CLRSDA

RET

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

;应答检测子程序CACK

CACK:

SETBSDA;应答位检测子程序

SETBSCL

CLRF0

MOVC,SDA;采样SDA

JNCCEND;应答正确时转CEND

SETBF0;应答错误时F0置一

CEND:

CLRSCL

RET

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

;发送一个字节子程序WRBYT

WRBYT:

PUSH06H

MOVR6,#08H;发送一个字节子程序

WLP:

RLCA;(入口参数A)

MOVSDA,C

SETBSCL

NOP;产生4.7US延时

NOP

NOP

NOP

NOP

CLRSCL

DJNZR6,WLP

POP06H

RET

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

;接收一个字节子程序RDBYT

RDBYT:

PUSH06H

MOVR6,#08H;接收一个字节子程序

RLP:

SETBSDA

SETBSCL

NOP;产生大于15微秒的延时!

NOP;注意这是专门为ZLG7290

NOP;添加的20微秒延时部分

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

MOVC,SDA

MOVA,R2

RLCA

MOVR2,A

CLRSCL

DJNZR6,RLP;(出口参数R2)

POP06H

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

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

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

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