📄 pcf8583.asm
字号:
******************************************************
* FUNCTION DEF : _WriteByte
******************************************************
_WriteByte:
LF7 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,2
LAR AR0,*0+
.sym _addr,-3+LF7,12,9,16
.sym _data,-4+LF7,12,9,16
.sym _k,1,12,1,16
.line 2
;>>>> uchar k;
.line 4
;>>>> Pcf8583Start(); //start i2c bus
CALL _Pcf8583Start
.line 5
;>>>> Pcf8583sendByte(0xa0); //send control byte
LACK 160
SACL *+
CALL _Pcf8583sendByte
MAR *-
.line 6
;>>>> k = Pcf8583Ack();
CALL _Pcf8583Ack
MAR * ,AR2
LARK AR2,1
MAR *0+
SACL *
.line 7
;>>>> if(k==0)Pcf8583sendByte(addr); //send out addr
;>>>> else
LAC *
BNZ L9
SBRK 4-LF7
LAC * ,AR1
SACL *+
CALL _Pcf8583sendByte
MAR *-
B L10
L9:
.line 10
;>>>> sda_1;scl_1;
LACK 61439
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 4112
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16448
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
.line 11
;>>>> return(k);
ZALS *
B EPI0_7
L10:
.line 13
;>>>> k = Pcf8583Ack();
CALL _Pcf8583Ack
MAR * ,AR2
LARK AR2,1
MAR *0+
SACL *
.line 14
;>>>> if(k==0)Pcf8583sendByte(data); //send out data
;>>>> else
LAC *
BNZ L11
SBRK 5-LF7
LAC * ,AR1
SACL *+
CALL _Pcf8583sendByte
MAR *-
B L12
L11:
.line 17
;>>>> sda_1; scl_1;
LACK 61439
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 4112
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16448
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
.line 18
;>>>> return(k);
ZALS *
B EPI0_7
L12:
.line 20
;>>>> k = Pcf8583Ack();
CALL _Pcf8583Ack
MAR * ,AR2
LARK AR2,1
MAR *0+
SACL *
.line 21
;>>>> if(k==0) Pcf8583Stop(); // stop
LAC *
BNZ L13
CALL _Pcf8583Stop,AR1
B L14
L13:
.line 22
;>>>> else {sda_1;scl_1;}
LACK 61439
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 4112
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16448
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
L14:
.line 23
;>>>> return(k);
MAR * ,AR2
LARK AR2,1
MAR *0+
ZALS *
EPI0_7:
.line 24
MAR * ,AR1
SBRK 3
LAR AR0,*-
PSHD *
RET
.endfunc 137,000000000H,2
.sym _Receive,_Receive,44,2,0
.globl _Receive
.func 141
;>>>> uchar Receive()
******************************************************
* FUNCTION DEF : _Receive
******************************************************
_Receive:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,4
LAR AR0,*0+,AR2
.sym _data,1,12,1,16
.sym _sz,2,12,1,16
.sym _i,3,12,1,16
.line 3
;>>>> uchar data=0,sz,i;
LACK 0
LARK AR2,1
MAR *0+
SACL * ,AR1
.line 4
;>>>> sda_in; //config sda as input port
LACK 61439
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 61439
LDPK _PFDATDIR
AND _PFDATDIR
SACL _PFDATDIR
LACK 16
OR _PFDATDIR
SACL _PFDATDIR
.line 5
;>>>> scl_0; //scl = 0
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16384
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
LACK 65471
AND _PBDATDIR
SACL _PBDATDIR
.line 6
;>>>> Pcf8583DelayI2c();
CALL _Pcf8583DelayI2c
.line 7
;>>>> for(i=0;i<8;i++)
LACK 0
MAR * ,AR2
LARK AR2,3
MAR *0+
SACL *
ZALS *
SUBK 8
BGEZ L16
SBRK 2
L15:
.line 9
;>>>> data = data<<1; // shift 1 bit to left
LAC * ,1
SACL * ,AR1
.line 10
;>>>> scl_1; //scl = 1
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16448
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
.line 11
;>>>> Pcf8583DelayI2c();
CALL _Pcf8583DelayI2c
.line 12
;>>>> sz = PFDATDIR&0x10; //get related data bit
LACK 16
LDPK _PFDATDIR
AND _PFDATDIR
MAR * ,AR2
LARK AR2,2
MAR *0+
SACL *
.line 13
;>>>> if(sz==0) data &= 0xfffe; // if data bit is 0, clr lsb of the data
LAC *
BNZ L17
LACK 65534
MAR *-
AND *
SACL *
B L18
L17:
.line 14
;>>>> else data |= 0x01; // if data bit is 1, set lsb of the data
LACK 1
MAR *-
OR *
SACL *
L18:
.line 15
;>>>> scl_0; // scl = 0;
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16384
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
LACK 65471
AND _PBDATDIR
SACL _PBDATDIR
.line 16
;>>>> Pcf8583DelayI2c();
CALL _Pcf8583DelayI2c,AR1
.line 7
MAR * ,AR2
LARK AR2,3
MAR *0+
LAC *
ADDK 1
SACL *
ZALS *
SUBK 8
SBRK 2
BLZ L15
L16:
.line 18
;>>>> sda_1; // config sda as output
LACK 61439
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 4112
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
.line 19
;>>>> return(data);
LARK AR2,1
MAR *0+
ZALS *
EPI0_8:
.line 20
MAR * ,AR1
SBRK 5
LAR AR0,*-
PSHD *
RET
.endfunc 160,000000000H,4
.sym _HostNoAck,_HostNoAck,32,2,0
.globl _HostNoAck
.func 164
;>>>> void HostNoAck()
******************************************************
* FUNCTION DEF : _HostNoAck
******************************************************
_HostNoAck:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
.line 3
;>>>> scl_1; //scl =1
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16448
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
.line 4
;>>>> Pcf8583DelayI2c();
CALL _Pcf8583DelayI2c
.line 5
;>>>> scl_0; //scl = 0
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16384
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
LACK 65471
AND _PBDATDIR
SACL _PBDATDIR
EPI0_9:
.line 6
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 169,000000000H,1
.sym _HostAck,_HostAck,32,2,0
.globl _HostAck
.func 173
;>>>> void HostAck()
******************************************************
* FUNCTION DEF : _HostAck
******************************************************
_HostAck:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
.line 3
;>>>> scl_0; //scl = 0
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16384
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
LACK 65471
AND _PBDATDIR
SACL _PBDATDIR
.line 4
;>>>> sda_0; //sda = 0
LACK 61439
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 4096
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
LACK 65519
AND _PFDATDIR
SACL _PFDATDIR
.line 5
;>>>> scl_1; //scl = 1
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16448
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
.line 6
;>>>> Pcf8583DelayI2c();
CALL _Pcf8583DelayI2c
.line 7
;>>>> scl_0; //scl = 0
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16384
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
LACK 65471
AND _PBDATDIR
SACL _PBDATDIR
EPI0_10:
.line 8
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 180,000000000H,1
.sym _ReadByte,_ReadByte,44,2,0
.globl _ReadByte
.func 184
;>>>> uchar ReadByte(uchar addr)
******************************************************
* FUNCTION DEF : _ReadByte
******************************************************
_ReadByte:
LF11 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,3
LAR AR0,*0+
.sym _addr,-3+LF11,12,9,16
.sym _k,1,12,1,16
.sym _data,2,12,1,16
.line 2
;>>>> uchar k,data;
.line 4
;>>>> Pcf8583Start();
CALL _Pcf8583Start
.line 5
;>>>> Pcf8583sendByte(0xa0); //send control byte
LACK 160
SACL *+
CALL _Pcf8583sendByte
MAR *-
.line 6
;>>>> k = Pcf8583Ack();
CALL _Pcf8583Ack
MAR * ,AR2
LARK AR2,1
MAR *0+
SACL *
.line 7
;>>>> if(k==0) Pcf8583sendByte(addr); //send addr
;>>>> else
LAC *
BNZ L19
SBRK 4-LF11
LAC * ,AR1
SACL *+
CALL _Pcf8583sendByte
MAR *-
B L20
L19:
.line 10
;>>>> sda_1; scl_1;
LACK 61439
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 4112
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16448
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
.line 11
;>>>> return(0xffff);
RSXM
LACK 65535
B EPI0_11
L20:
.line 13
;>>>> k = Pcf8583Ack();
CALL _Pcf8583Ack
MAR * ,AR2
LARK AR2,1
MAR *0+
SACL *
.line 14
;>>>> if(k==0)
LAC *
BNZ L21
.line 16
;>>>> Pcf8583Start();
CALL _Pcf8583Start,AR1
.line 17
;>>>> Pcf8583sendByte(0xa1);
;>>>> else
LACK 161
SACL *+
CALL _Pcf8583sendByte
MAR *-
B L22
L21:
.line 21
;>>>> sda_1;scl_1;
LACK 61439
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 4112
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16448
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
.line 22
;>>>> return(0xffff);
RSXM
LACK 65535
B EPI0_11
L22:
.line 24
;>>>> k = Pcf8583Ack();
CALL _Pcf8583Ack
MAR * ,AR2
LARK AR2,1
MAR *0+
SACL *
.line 25
;>>>> if(k==0)
LAC *
BNZ L23
.line 27
;>>>> data = Receive();
CALL _Receive,AR1
MAR * ,AR2
LARK AR2,2
MAR *0+
SACL * ,AR1
.line 28
;>>>> HostNoAck();
CALL _HostNoAck
.line 29
;>>>> Pcf8583Stop();
CALL _Pcf8583Stop
.line 30
;>>>> return(data);
;>>>> else
MAR * ,AR2
LARK AR2,2
MAR *0+
ZALS *
B EPI0_11
L23:
.line 34
;>>>> sda_1;scl_1;
LACK 61439
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 4112
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
LACK 49151
LDPK _MCRA
AND _MCRA
SACL _MCRA
LACK 16448
LDPK _PBDATDIR
OR _PBDATDIR
SACL _PBDATDIR
.line 35
;>>>> return(0xffff);
RSXM
LACK 65535
EPI0_11:
.line 37
MAR * ,AR1
SBRK 4
LAR AR0,*-
PSHD *
RET
.endfunc 220,000000000H,3
.sym _setCalendar,_setCalendar,32,2,0
.globl _setCalendar
.func 286
;>>>> void setCalendar( )
******************************************************
* FUNCTION DEF : _setCalendar
******************************************************
_setCalendar:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,17
LAR AR0,*0+,AR2
.sym _status,1,12,1,16
.sym _flag,2,12,1,16
.sym _year,3,12,1,16
.sym _month,4,12,1,16
.sym _day,5,12,1,16
.sym _hour,6,12,1,16
.sym _minute,7,12,1,16
.sym _second,8,12,1,16
.sym _weekday,9,12,1,16
.sym _year_header,10,12,1,16
.sym _addr02,11,12,1,16
.sym _addr03,12,12,1,16
.sym _addr04,13,12,1,16
.sym _addr05,14,12,1,16
.sym _addr06,15,12,1,16
.sym _pcf8583_flag,16,14,1,16
.line 3
;>>>> uchar status,flag=0;
;>>>> uchar year,month,day,hour,minute,second,weekday,year_header;
LACK 0
LARK AR2,2
MAR *0+
SACL *
.line 5
;>>>> uchar addr02=0,addr03=0,addr04=0,addr05=0,addr06=0;/*addr in the pcf8583*/
ADRK 9
SACL *+
SACL *+
SACL *+
SACL *+
SACL *+
.line 6
;>>>> uint pcf8583_flag = 0;
SACL *
.line 7
;>>>> year = pcdata[3];
SBRK 13
BLKD #_pcdata+3,*+
.line 8
;>>>> month = pcdata[4];
BLKD #_pcdata+4,*+
.line 9
;>>>> day = pcdata[5];
BLKD #_pcdata+5,*+
.line 10
;>>>> hour = pcdata[6];
BLKD #_pcdata+6,*+
.line 11
;>>>> minute = pcdata[7];
BLKD #_pcdata+7,*+
.line 12
;>>>> second = pcdata[8];
BLKD #_pcdata+8,*+
.line 13
;>>>> weekday = pcdata[9];
BLKD #_pcdata+9,*+
.line 14
;>>>> year_header = pcdata[0x0a];
BLKD #_pcdata+10,*
.line 16
;>>>> if(year>0x3) flag = 1;
SBRK 7
ZALS *
SUBK 3
BLEZ L24
LACK 1
MAR *-
SACL *
L24:
.line 17
;>>>> if((month>0x12) || (month == 0)) flag = 1;
LARK AR2,4
MAR *0+
ZALS *
SUBK 18
BGZ LL14
LAC *
BNZ L25
LL14:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -