📄 eeprom24c02.asm
字号:
;*******************************************************
;below is programmed by Wang WenCheng,modified by Figo
;==========================================
;------------I2C 24C02--------
;*****************************************************************
;Function:Save_AccessCode
;Description:Write Access Code to EEPROM via I2C bus.
;input:local_access_code0,local_access_code1
;output:none
;*****************************************************************
Save_AccessCode:
SaveData:
bclr I2Csave
clr ErrorCount
SaveData_loop:
bts0 I2CjoinErrorFlag
ret
clrwdt
call I2Cstart ;Start
call I2Cout1 ;Device address
call I2Cout0
call I2Cout1
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0 ;R/W
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp SaveDataError
call I2Cout0 ;Word address
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp SaveDataError
mov A, local_access_code0 ;DigiHigh--by Figo
mov DataBuffer,A
call I2CwriteBit ;Write Data
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp SaveDataError
mov A, local_access_code1 ;DigiLow--by Figo
mov DataBuffer,A
call I2CwriteBit ;Write Data
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp SaveDataError
mov A, local_access_code2 ;WorkingState--by Figo
mov DataBuffer,A
call I2CwriteBit ;Write Data
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp SaveDataError
call I2Cstop ;Stop
clrwdt
ret
SaveDataError:
incms ErrorCount
nop
mov A,#10
sub A,ErrorCount
bts1 FC
bset I2CjoinErrorFlag
jmp SaveData_loop
;*****************************************************************
;Function:Load_AccessCode
;Description:Read Access Code from EEPROM via I2C bus.
;input:none
;output:local_access_code0,local_access_code1
;*****************************************************************
Load_AccessCode:
ReloadData:
clr ErrorCount
ReloadData_Loop:
bts0 I2CjoinErrorFlag
ret
clrwdt
call I2Cstart ;Start
call I2Cout1 ;Device address
call I2Cout0
call I2Cout1
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0 ;R/W
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp ReloadDataError
clr ErrorCount
call I2Cout0 ;Word address
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp ReloadDataError
clr ErrorCount
call I2Cstart
call I2Cout1 ;Device address
call I2Cout0
call I2Cout1
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout1 ;R/W
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp ReloadDataError
clr ErrorCount
call I2CreadBit ;Read Data
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
mov A,DataBuffer
mov local_access_code0,A ;DigiHigh--by Figo
call I2Cout0 ;out ACK
call I2CreadBit ;Read Data
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
mov A,DataBuffer
mov local_access_code1,A ;DigiLow--by Figo
call I2Cout0 ;out ACK
call I2CreadBit ;Read Data
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
mov A,DataBuffer
mov local_access_code2,A ;WorkingState--by Figo
call I2Cout1 ;out NACK
call I2Cstop ;Stop
clrwdt
ret
ReloadDataError:
incms ErrorCount
nop
mov A,#10
sub A,ErrorCount
bts1 FC
bset I2CjoinErrorFlag
jmp ReloadData_Loop
;==========================================================
I2Cstart:
bset SDA_IoSet ;set IO_SDA is Output port
bset SDA
bset SCL_IoSet ;set IO_SCL is Output port
bset SCL
call Delay5us
call Delay5us
bclr SDA
call Delay5us
call Delay5us
bclr SCL
call Delay5us
ret
I2Cstop:
bset SDA_IoSet ;set IO_SDA is Output port
bclr SCL
bclr SDA
call Delay5us
bset SCL
call Delay5us
call Delay5us
bset SDA
call Delay5us
call Delay5us
ret
I2CoutNAck:
I2Cout1:
bset SDA_IoSet ;set IO_SDA is Output port
bset SDA
call Delay5us
bset SCL
call Delay5us
call Delay5us
bclr SCL
call Delay5us
bclr SDA
call Delay5us
ret
I2CoutAck:
I2Cout0:
bset SDA_IoSet ;set IO_SDA is Output port
bclr SDA
call Delay5us
bset SCL
call Delay5us
call Delay5us
bclr SCL
call Delay5us
bclr SDA
call Delay5us
ret
I2CwaitAck:
bclr SDA_IoSet ;set IO_SDA is Input port
call Delay5us
bset SCL
call Delay5us
call Delay5us
bclr I2CackFlag
bts1 SDA
bset I2CackFlag
bset SDA_IoSet ;set IO_SDA is Output port
bclr SCL
call Delay5us
ret
;======================
I2CwriteBit:
bset SDA_IoSet ;set IO_SDA is Output port
rlcm DataBuffer
bts0 FC
bset SDA
bts1 FC
bclr SDA
nop
nop
; call Delay5us
bset SCL
call Delay5us
call Delay5us
bclr SCL
call Delay5us
ret
;-----------------------------------------------
I2CreadBit:
bclr SDA_IoSet ;set IO_SDA is Input port
call Delay5us
bset SCL
call Delay5us
call Delay5us
bclr FC
bts0 SDA
bset FC
bclr SCL
rlcm DataBuffer
call Delay5us
ret
I2Cunjoined:
bset I2CjoinErrorFlag
call I2Cstop ;Stop
ret
;---------------------------
Delay5us:
; nop
nop
ret
;=========================================================
Save_TestCode:
SaveTestData:
bclr I2Csave
clr ErrorCount
SaveTestData_loop:
bts0 I2CjoinErrorFlag
ret
clrwdt
call I2Cstart ;Start
call I2Cout1 ;Device address
call I2Cout0
call I2Cout1
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0 ;R/W
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp SaveTestDataError
call I2Cout0 ;Word address
call I2Cout0
call I2Cout0
call I2Cout1
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp SaveTestDataError
mov A, test_data0
mov DataBuffer,A
call I2CwriteBit ;Write Data
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp SaveTestDataError
mov A, test_data1
mov DataBuffer,A
call I2CwriteBit ;Write Data
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwriteBit
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp SaveTestDataError
call I2Cstop ;Stop
clrwdt
ret
SaveTestDataError:
incms ErrorCount
nop
mov A,#10
sub A,ErrorCount
bts1 FC
bset I2CjoinErrorFlag
jmp SaveTestData_loop
;*****************************************************************
;Function:Load_AccessCode
;Description:Read Access Code from EEPROM via I2C bus.
;input:none
;output:local_access_code0,local_access_code1
;*****************************************************************
Load_TestCode:
ReloadTestData:
clr ErrorCount
ReloadTestData_Loop:
bts0 I2CjoinErrorFlag
ret
clrwdt
call I2Cstart ;Start
call I2Cout1 ;Device address
call I2Cout0
call I2Cout1
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0 ;R/W
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp ReloadTestDataError
clr ErrorCount
call I2Cout0 ;Word address
call I2Cout0
call I2Cout0
call I2Cout1
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp ReloadTestDataError
clr ErrorCount
call I2Cstart
call I2Cout1 ;Device address
call I2Cout0
call I2Cout1
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout0
call I2Cout1 ;R/W
call I2CwaitAck ;wait ACK
bts1 I2CackFlag
jmp ReloadTestDataError
clr ErrorCount
call I2CreadBit ;Read Data
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
mov A,DataBuffer
mov test_data0,A
call I2Cout0 ;out ACK
call I2CreadBit ;Read Data
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
call I2CreadBit
mov A,DataBuffer
mov test_data1,A
call I2Cout1 ;out NACK
call I2Cstop ;Stop
clrwdt
ret
ReloadTestDataError:
incms ErrorCount
nop
mov A,#10
sub A,ErrorCount
bts1 FC
bset I2CjoinErrorFlag
jmp ReloadTestData_Loop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -