自动报时设计VHDLWord文档下载推荐.docx
《自动报时设计VHDLWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《自动报时设计VHDLWord文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
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
屏蔽各时间参数无关位
INT_7290
键盘修改时间中断服务子程序
RDKEY
读键值子程序
WR8563
R7、R0、R2、R3
向日历芯片写时间参数
WRNBYT
带有内部单元地址的多字节写操作子程序
RDADD
R7、R0、R2、R3、R4
带有内部单元地址的多字节读操作子程序
7主程序程序流程图
N
Y
YN
NWAIT1
WAIT2
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
MOVR4,#RSLA_8563
LCALLRDADD
LCALLADJUST
LCALLPANDUAN
LCALLCHAIFEN
MOVR7,#08H
MOVR2,#10H
MOVR3,#WSLA_7290
JNBP1.2,YEARS
MOVR0,#38H
SJMPDISP
YEARS:
MOVR0,#28H
DISP:
JNBP3.2,$
RETI
整点报时子程序
PANDUAN:
MOVA,21H
CJNEA,#59H,PDFEN
MOVA,20H
CJNEA,#56H,PD57
LCALLBAOSHI1
AJMPEXIT
PD57:
CJNEA,#57H,PD58
PD58:
CJNEA,#58H,PD59
PD59:
CJNEA,#59H,EXIT
PDFEN:
CJNEA,#00H,EXIT
LCALLBAOSHI2
EXIT:
RET
*******************************
低音1S报时
BAOSHI1:
PUSHPSW
PUSH00H
MOVR0,#0FFH
MOVTMOD,#10H
MOVTL1,#00H
MOVTH1,#0FEH
SETBTR1
WORK1:
JNBTF1,$
CLRTF1
CPLP1.4
DJNZR0,WORK1
POP00H
POPPSW
高音1S报时
BAOSHI2:
PUSH01H
MOVR0,#04H
WORK2:
MOVR1,#00H
MOVTH1,#0FFH
WORK3:
DJNZR1,WORK3
DJNZR0,WORK2
POP01H
各子程序
ORG8300H
CHAIFEN:
PUSHACC
PUSH03H
PUSH04H
MOVA,20H;
取秒参数
LCALLCF
MOV38H,R3
MOV39H,R4
MOV3AH,#02H
MOVA,21H;
取分参数
MOV3BH,R3
MOV3CH,R4
MOV3DH,#02H
MOVA,22H;
取小时参数
MOV3EH,R3
MOV3FH,R4
MOVA,23H;
取日期参数
MOVA,R3
MOVR3,A
MOV28H,R3
MOV29H,R4
MOVA,25H;
取月参数
ORLA,#01H
MOV2AH,R3
MOV2BH,R4
MOVA,26H;
取年参数
MOV2CH,R3
MOV2DH,R4
MOV2EH,#0FCH
MOV2FH,#0DAH
POP04H
POP03H
POPACC
**************************
将A中数据拆分为两独立的十六进制数并查表
CF:
PUSH02H
PUSHDPH
PUSHDPL
MOVDPTR,#LEDSEG
MOVR2,A
ANLA,#0FH
MOVCA,@A+DPTR
MOVA,R2
SWAPA
MOVR4,A
POPDPL
POPDPH
POP02H
LEDSEG:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H
DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
屏蔽读出的7个字节参数无关位
ADJUST:
ANLA,#7FH
MOV20H,A
MOV21H,A
MOVA,22H
ANLA,#3FH
MOV22H,A
MOVA,23H
MOV23H,A
MOVA,24H
ANLA,#07H
MOV24H,A
MOVA,25H
ANLA,#1FH
MOV25H,A
延时子程序
***************************
DELAY:
MOVR0,#00H
DELAY1:
DJNZR1,$
DJNZR0,DELAY1
INT_7290:
PUSH07H
PUSHPSW
LCALLRDKEY
*************************
修改小时
AKEY:
CJNEA,#0AH,BKEY
JBP3.3,$
ANL14H,#0FH
ORL14H,A
ANL14H,#0F0H
MOVR7,#01H
MOVR0,#14H
MOVR2,#04H
LCALLFLASH
LJMPDOWN
**********************
修改分
BKEY:
CJNEA,#0BH,CKEY
ANL13H,#0FH
ORL13H,A
ANL13H,#0F0H
MOVR0,#13H
MOVR2,#03H
修改秒
CKEY:
CJNEA,#0CH,DOWN
ANL12H,#0FH
ORL12H,A
ANL12H,#0F0H
MOVR0,#12H
LJMPDOWN
*******************
中断返回退出
DOWN:
CLRIE0
POP07H
RDKEY:
MOVR0,#1FH
MOVR2,#01H
MOVR4,#RSLA_7290
MOVA,1FH
DECA
向日历芯片中写入时间参数子程序
WR8536:
MOVR7,#07H
************************
相关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;
如果应
发送内部寄存器首地址
如果应答不正确返回重来
WRDA:
MOVA,@R0
如果应答不正确返回重来
INCR0
DJNZR7,WRDA
LCALLSTOP
RET
***********************************
带有内部单元地址的多字节读操作子程序RDADD
入口参数R7字节数;
R0目标数据块首地址;
R2从器件内部子地址;
R3器件地址(写);
R4器件地址(读)
相关子程序WRBYT、STOP、CACK、STA、MACK、MNACK
RDADD:
PUSHPSW;
从PCF8563的02H单元读入7个参数
PUSHACC;
存放于20H-26H单元
RDADD1:
LCALLSTA
取器件地址(写)
JBF0,RDADD1;
MOVA,R2;
取内部地址
如果应答不正确返回重来
LCALLSTA
MOVA,R4;
取器件地址(读)
RDN:
LCALLRDBYT
MOV@R0,A
DJNZR7,ACK
LCALLMNACK
LCALLSTOP
ACK:
LCALLMACK
SJMPRDN
启动信号子程序S
STA:
SETBSDA;
启动信号S
SETBSCL
NOP;
产生4.7US延时
NOP
NOP
CLRSDA
NOP
CLRSCL
RET
**************************************
停止信号子程序P
STOP:
CLRSDA;
停止信号P
SETBSDA
**********************************
应答信号子程序MACK
MACK:
CLRSDA;
发送应答信号ACK
非应答法信号子程序MNACK
MNACK:
发送非应答信号NACK
***************************************
应答检测子程序CACK
CACK:
应答位检测子程序
SETBSCL
CLRF0
MOVC,SDA;
采样SDA
JNCCEND;
应答正确时转CEND
SETBF0;
应答错误时F0置一
CEND:
RET
发送一个字节子程序WRBYT
WRBYT:
PUSH06H
MOVR6,#08H;
发送一个字节子程序
WLP:
RLCA;
(入口参数A)
MOVSDA,C
DJNZR6,WLP
POP06H
****************************************
接收一个字节子程序RDBYT
RDBYT:
PUSH06H
接收一个字节子程序
RLP:
产生大于15微秒的延时!
NOP;
注意这是专门为ZLG7290
添加的20微秒延时部分
MOVC,SDA
RLCA
DJNZR6,RLP;
(出口参数R2)