1、20H-26H从PCF8563T中读出的时间参数(秒、分、小时、日、星期、月、年)缓冲区年月日28H-2FH拆分查表所得年月日缓冲区以待显示时分秒38H-3FH拆分查表所得时分秒缓冲区以待显示键值1FH读入的键值存储单元6 系统软件中各个子程序的功能描述子程序的名称、功能,以及入口、出口参数。子程序名称入口参数出口参数功能 描述INT_RCT无时钟中断服务子程序PANDUAN20-21H判断并进行整点报时CHAIFEN20-26H28-2FH、38-3FH将时间参数拆分查表CFAR4、R3将A中数据拆违两独立的十六进制数并查表得到对应字型码ADJUST20-25H屏蔽各时间参数无关位INT_7
2、290键盘修改时间中断服务子程序RDKEY读键值子程序WR8563R7、R0、R2、R3向日历芯片写时间参数WRNBYT带有内部单元地址的多字节写操作子程序RDADDR7、R0、R2、R3、R4带有内部单元地址的多字节读操作子程序7 主程序程序流程图 N Y Y N N WAIT1 WAIT28 程序清单 SDA BIT P1.0 SCL BIT P1.1 WSLA_8563 EQU 0A2H RSLA_8563 EQU 0A3H WSLA_7290 EQU 70H RSLA_7290 EQU 71H ORG 8000H LJMP 8100H ORG 8003H LJMP INT_RCT OR
3、G 8013H LJMP INT_7290 ORG 8100HSTART: MOV SP,#60H CLR P1.7 LCALL DELAY SETB P1.7;*设定PCF8563T的时间和命令参数 MOV 10H,#00H MOV 11H,#1FH MOV 12H,#50H ;秒 MOV 13H,#59H ;分 MOV 14H,#01H ;时 MOV 15H,#09H ;日期 MOV 16H,#04H ;星期 MOV 17H,#06H ;月 MOV 18H,#11H ;年 MOV 19H,#00H MOV 1AH,#00H MOV 1BH,#00H MOV 1CH,#00H MOV 1DH
4、,#83H* MOV R7,#0EH MOV R0,#10H MOV R2,#00H MOV R3,#WSLA_8563 LCALL WRNBYT MOV IP,02H SETB EA SETB EX0 SETB EX1 SETB IT0 SETB IT1 SJMP $INT_RCT:MOV R7,#07H MOV R0,#20H MOV R2,#02H MOV R4,#RSLA_8563 LCALL RDADD LCALL ADJUST LCALL PANDUAN LCALL CHAIFEN MOV R7,#08H MOV R2,#10H MOV R3,#WSLA_7290 JNB P1.2
5、,YEARS MOV R0,#38H SJMP DISPYEARS: MOV R0,#28HDISP: JNB P3.2,$ RETI整点报时子程序PANDUAN: MOV A,21H CJNE A,#59H,PDFEN MOV A,20H CJNE A,#56H,PD57 LCALL BAOSHI1 AJMP EXITPD57: CJNE A,#57H,PD58PD58: CJNE A,#58H,PD59PD59: CJNE A,#59H,EXITPDFEN: CJNE A,#00H,EXIT LCALL BAOSHI2EXIT: RET*低音1S报时BAOSHI1:PUSH PSW PUS
6、H 00H MOV R0,#0FFH MOV TMOD,#10H MOV TL1,#00H MOV TH1,#0FEH SETB TR1WORK1: JNB TF1,$ CLR TF1 CPL P1.4 DJNZ R0,WORK1 POP 00H POP PSW高音1S报时BAOSHI2: PUSH 01H MOV R0,#04HWORK2: MOV R1,#00H MOV TH1,#0FFHWORK3: DJNZ R1,WORK3 DJNZ R0,WORK2 POP 01H各子程序 ORG 8300HCHAIFEN: PUSH ACC PUSH 03H PUSH 04H MOV A,20H
7、;取秒参数 LCALL CF MOV 38H,R3 MOV 39H,R4 MOV 3AH,#02H MOV A,21H ;取分参数 MOV 3BH,R3 MOV 3CH,R4 MOV 3DH,#02H MOV A,22H ;取小时参数 MOV 3EH,R3 MOV 3FH,R4 MOV A,23H ;取日期参数 MOV A,R3 MOV R3,A MOV 28H,R3 MOV 29H,R4 MOV A,25H ;取月参数 ORL A,#01H MOV 2AH,R3 MOV 2BH,R4 MOV A,26H ;取年参数 MOV 2CH,R3 MOV 2DH,R4 MOV 2EH,#0FCH MO
8、V 2FH,#0DAH POP 04H POP 03H POP ACC*将A中数据拆分为两独立的十六进制数并查表CF: PUSH 02H PUSH DPH PUSH DPL MOV DPTR,#LEDSEG MOV R2,A ANL A,#0FH MOVC A,A+DPTR MOV A,R2 SWAP A MOV R4,A POP DPL POP DPH POP 02HLEDSEG: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH屏蔽读出的7个字节参数无关位ADJUST: ANL A,
9、#7FH MOV 20H,A MOV 21H,A MOV A,22H ANL A,#3FH MOV 22H,A MOV A,23H MOV 23H,A MOV A,24H ANL A,#07H MOV 24H,A MOV A,25H ANL A,#1FH MOV 25H,A延时子程序*DELAY: MOV R0,#00HDELAY1: DJNZ R1,$ DJNZ R0,DELAY1INT_7290: PUSH 07H PUSH PSW LCALL RDKEY*修改小时AKEY: CJNE A,#0AH,BKEY JB P3.3,$ ANL 14H,#0FH ORL 14H,A ANL 14H
10、,#0F0H MOV R7,#01H MOV R0,#14H MOV R2,#04H LCALL FLASH LJMP DOWN*修改分BKEY: CJNE A,#0BH,CKEY ANL 13H,#0FH ORL 13H,A ANL 13H,#0F0H MOV R0,#13H MOV R2,#03H修改秒CKEY: CJNE A,#0CH,DOWN ANL 12H,#0FH ORL 12H,A ANL 12H,#0F0H MOV R0,#12H LJMP DOWN *中断返回退出DOWN: CLR IE0 POP 07HRDKEY: MOV R0,#1FH MOV R2,#01H MOV R
11、4,#RSLA_7290 MOV A,1FH DEC A向日历芯片中写入时间参数子程序WR8536: MOV R7,#07H*相关I2C子程序带有内部单元地址的多字节写操作子程序 WRNBYT通用的I2C通讯子程序(多字节写操作)入口参数R7字节数,R0:源数据块首地址R0原数据块首地址;R2从器件内部子地址;R3:外围器件地址(写)相关子程序 WRBYT、STOP、CACK、STAWRNBYT: PUSH PSW PUSH ACC WRADD: MOV A,R3 ;取外围器件地地址(包含r/w=0) LCALL STA ;发送起始信号S LCALL WRBYT ;发送外围地址 LCALL C
12、ACK ;检测外围器件的应答信号 JB F0,WRADD;如果应发送内部寄存器首地址如果应答不正确返回重来 WRDA: MOV A,R0如果应答不正确返回重来 INC R0 DJNZ R7,WRDA LCALL STOP RET *带有内部单元地址的多字节读操作子程序 RDADD 入口参数R7字节数;R0目标数据块首地址;R2从器件内部子地址;R3器件地址(写);R4器件地址(读)相关子程序 WRBYT、STOP、CACK、STA、MACK、MNACK RDADD: PUSH PSW ;从PCF8563的02H单元读入7个参数 PUSH ACC ;存放于20H-26H单元 RDADD1: LC
13、ALL STA 取器件地址(写) JB F0,RDADD1; MOV A,R2 ;取内部地址 如果应答不正确返回重来 LCALL STA MOV A,R4 ;取器件地址(读)RDN: LCALL RDBYT MOV R0,A DJNZ R7,ACK LCALL MNACK LCALL STOP ACK: LCALL MACK SJMP RDN启动信号子程序S STA: SETB SDA ;启动信号S SETB SCL NOP ;产生4.7US延时 NOP NOP CLR SDA NOP CLR SCL RET *停止信号子程序P STOP: CLR SDA ;停止信号P SETB SDA*应答
14、信号子程序 MACKMACK: CLR SDA ;发送应答信号ACK非应答法信号子程序MNACKMNACK:发送非应答信号NACK*应答检测子程序CACKCACK:应答位检测子程序 SETB SCL CLR F0 MOV C,SDA ;采样SDA JNC CEND ;应答正确时转CEND SETB F0 ;应答错误时F0置一CEND: RET发送一个字节子程序WRBYTWRBYT: PUSH 06H MOV R6,#08H ;发送一个字节子程序 WLP: RLC A ;(入口参数A) MOV SDA,C DJNZ R6,WLP POP 06H*接收一个字节子程序RDBYT RDBYT: PUSH 06H接收一个字节子程序RLP:产生大于15微秒的延时! NOP ;注意这是专门为ZLG7290添加的20微秒延时部分 MOV C,SDA RLC A DJNZ R6,RLP ;(出口参数R2)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1