MOVC
mov mov A,@A+DPTR
dptr,#tab a,b
lcall xsj
;以上显示分
mov bcd,second ;秒数值赋给bcd
lcall bcd_dec mov lcd,#0c6h lcall xzl mov dptr,#tab
MOVC
A,@A+DPTR
lcall xsj
MOVC
mov lcall mov mov A,@A+DPTR
lcd,#0c7h xzl dptr,#tab a,b
lcall xsj ;以上显示秒
ret
;///////////////////////////// ;bcd转十进制 bcd_dec: mov
a,bcd
mov b,#16 div ab ret
;a中放置十位,b中放置个位
;////////////////////////////// ;lcd写指令子程序 xzl:
clr rw
clr rs setb
en
16
lcall delay3 clr en ret
;///////////////////////////// ;lcd写数据子程序 xsj:
mov lcd,a
clr rw setb setb
rs en
lcall delay3 clr en ret
;///////////////////////////// ;延时子程序 delay3:
mov r5,#4
;延时5ms
d0: mov r6,#255
djnz djnz ret
r6,$ r5,d0
;///////////////////////////// ;表格 tab:
DB 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h ;0到9
;-------------------------------------------------------------- EEPROM:
MOV R0,#27H
;要写入的数据,TH,TL
MOV R1,#00H ; 要保存数据的首地址 MOV R2,#02H
;数据的长度
REP: CLR A
MOV A,@R0
17
MOV B,A
LCALL WR_Byte ;调用24c02写子程序 INC R1 INC R0
DJNZ R2,REP RET
;-----------------------------------------
WR_Byte: LCALL Begin ;调用启动24c02子程序 REP_S1:
MOV A,#0A0H ;写器件地址
;调用发送一个字节到I2C总线子程序 ;调用应答信号检测程序
LCALL Send_B LCALL WAITACK
JC REP_S1 ;没有应答则重发数据
A,R1 ;写入地址
REP_S2: MOV
LCALL Send_B ;调用发送一个字节子程序 LCALL WAITACK JC REP_S2
A
A,B ;写入数据
REP_S3: CLR
MOV
LCALL Send_B LCALL WAITACK JC REP_S3
LCALL STOP ;调用停止子程序 LCALL Delay ;10MS延时 RET
;//////向IIC总线发送一个字节数据子程序///////////////////////////// ;入口参数:A---待发送数据存放在A中
;////////////////////////////////////////////////////////////////// Send_B: MOV R7,#08H ;发送位数 S_B: RLC A
18
MOV SDA,C NOP
SETB SCL NOP
CLR SCL
DJNZ R7,S_B ;8位发送完毕? NOP RET
;//////检测应答信号////////////////////////////////////////////// ;出口参数:C---是否有应答信号
;//////////////////////////////////////////////////////////////// WAITACK: SETB
NOP
SETB SCL NOP
C,SDA
SDA ;释放SDA信号线
REP3: MOV
CLR SCL NOP RET
;***************** RD_EEPROM:
MOV R0,#27H MOV R1,#00H
;设置读出数据保存首地址 ;送读数首地址
MOV R2,#02H ;要读2个数
REP1: LCALL RD_Byte ;调用24c02读子程序
MOV @R0,A ;把读出数据送到TH,TL INC R0
;保存数据地址加一,保存在27H,28H单元中,
27H为TH,28H为TL
INC R1 ;
19
DJNZ R2,REP1 RET
;
;//////读24c02操作子程序/////////////////////////////////////// ;输入参数:R2---要读的字节地址, ;输出参数: A---结果
;////////////////////////////////////////////////////////////// RD_Byte: REP_S4:
LCALL MOV
Begin A,#0A0H
;启动信号
;器件地址
LCALL Send_B LCALL WAITACK JC REP_S4
MOV
;调用发送一个字节子程序
REP_S5:
A,R1 ;送读数地址
LCALL Send_B LCALL WAITACK JC REP_S5
LCALL
Begin ;重发启动信号
;读数
REP_S6:
MOV A,#0A1H LCALL Send_B LCALL WAITACK
JC REP_S6
LCALL Receive_B ;调用从I2C总线上接收一个字节数据子
程序
LCALL Stop RET IIC
总线上接收一个字节数据子程序
;//////从
////////////////////////////// ;出口参数:A---接收数据存放在A中
;////////////////////////////////////////////////////////////////////
20