📄 pcf8583.asm
字号:
LACK 1
SBRK 2
SACL *
L25:
.line 18
;>>>> if((day>0x31 ) || (day == 0)) flag = 1;
LARK AR2,5
MAR *0+
ZALS *
SUBK 49
BGZ LL15
LAC *
BNZ L26
LL15:
LACK 1
SBRK 3
SACL *
L26:
.line 19
;>>>> if(hour>0x24) flag = 1;
LARK AR2,6
MAR *0+
ZALS *
SUBK 36
BLEZ L27
LACK 1
SBRK 4
SACL *
L27:
.line 20
;>>>> if(minute>0x59) flag = 1;
LARK AR2,7
MAR *0+
ZALS *
SUBK 89
BLEZ L28
LACK 1
SBRK 5
SACL *
L28:
.line 21
;>>>> if(second>0x59) flag = 1;
LARK AR2,8
MAR *0+
ZALS *
SUBK 89
BLEZ L29
LACK 1
SBRK 6
SACL *
L29:
.line 22
;>>>> if((weekday>0x7) || (weekday == 0)) flag = 1;
LARK AR2,9
MAR *0+
ZALS *
SUBK 7
BGZ LL16
LAC *
BNZ L30
LL16:
LACK 1
SBRK 7
SACL *
L30:
.line 24
;>>>> if(flag){;}
;>>>> else
LARK AR2,2
MAR *0+
LAC *
BNZ L32
.line 27
;>>>> status = OK;
LACK 0
MAR *-
SACL *
.line 28
;>>>> addr02 = second;
ADRK 7
LAC *
ADRK 3
SACL *
.line 29
;>>>> addr03 = minute;
;>>>> //////////////hours//////////////////
SBRK 4
LAC *
ADRK 5
SACL *
.line 31
;>>>> if( ((hour&0xff) >> 4) == 0 ) addr04 |= 0;
LACK 255
SBRK 6
AND * ,AR0
SACL *
RSXM
LAC * ,11
ANDK 0FFFFh,15
BZ L34
.line 32
;>>>> else if( ((hour&0xff) >> 4) == 1 )addr04 |= 0x10;
LACK 255
MAR * ,AR2
AND * ,AR0
SACL *
LAC * ,11
SACH * ,1
ZALS *
SUBK 1
BNZ L35
LACK 16
MAR * ,AR2
ADRK 7
OR *
SACL *
B L34
L35:
.line 33
;>>>> else if( ((hour&0xff) >> 4) == 2 )addr04 |= 0x20;
LACK 255
MAR * ,AR2
AND * ,AR0
SACL *
LAC * ,11
SACH * ,1
ZALS *
SUBK 2
BNZ L34
LACK 32
MAR * ,AR2
ADRK 7
OR *
SACL *
L34:
.line 34
;>>>> addr04 |= hour&0x0f;
;>>>> /////////////////////////////////////////
;>>>> /////year , day//////////////////////////
LACK 15
MAR * ,AR2
LARK AR2,6
MAR *0+
AND *
ADRK 7
OR *
SACL *
.line 37
;>>>> addr05 = (year&0xff) << 6;
LACK 255
SBRK 10
AND * ,AR0
SACL *
LAC * ,6,AR2
ADRK 11
SACL *
.line 38
;>>>> if( ((day&0xff) >> 4) == 0) addr05 |= 0;
LACK 255
SBRK 9
AND * ,AR0
SACL *
LAC * ,11
ANDK 0FFFFh,15
BZ L38
.line 39
;>>>> else if( ((day&0xff) >> 4) == 1) addr05 |= 0x10;
LACK 255
MAR * ,AR2
AND * ,AR0
SACL *
LAC * ,11
SACH * ,1
ZALS *
SUBK 1
BNZ L39
LACK 16
MAR * ,AR2
ADRK 9
OR *
SACL *
B L38
L39:
.line 40
;>>>> else if( ((day&0xff) >> 4) == 2) addr05 |= 0x20;
LACK 255
MAR * ,AR2
AND * ,AR0
SACL *
LAC * ,11
SACH * ,1
ZALS *
SUBK 2
BNZ L40
LACK 32
MAR * ,AR2
ADRK 9
OR *
SACL *
B L38
L40:
.line 41
;>>>> else if( ((day&0xff) >> 4) == 3) addr05 |= 0x30;
LACK 255
MAR * ,AR2
AND * ,AR0
SACL *
LAC * ,11
SACH * ,1
ZALS *
SUBK 3
BNZ L38
LACK 48
MAR * ,AR2
ADRK 9
OR *
SACL *
L38:
.line 42
;>>>> addr05 |= day&0x0f;
;>>>> /////////////////////////////////////////
;>>>> /////weekday,month///////////////////////
LACK 15
MAR * ,AR2
LARK AR2,5
MAR *0+
AND *
ADRK 9
OR *
SACL *
.line 45
;>>>> addr06 |= (weekday&0xff) << 5;
LACK 255
SBRK 5
AND * ,AR0
SACL *
LAC * ,5,AR2
ADRK 6
OR *
SACL *
.line 46
;>>>> if((month&0x10) == 0x10 ) addr06 |= 0x10;
LACK 16
SBRK 11
AND *
SUBK 16
BNZ L42
LACK 16
ADRK 11
OR *
SACL *
L42:
.line 47
;>>>> addr06 |= month&0x0f;
;>>>> /////////////////////////////////////////
LACK 15
LARK AR2,4
MAR *0+
AND *
ADRK 11
OR *
SACL *
.line 49
;>>>> pcf8583_flag = WriteByte(0x02,addr02);
SBRK 4
LAC * ,AR1
SACL *+
LACK 2
SACL *+
CALL _WriteByte
SBRK 2
MAR * ,AR2
LARK AR2,16
MAR *0+
SACL *
.line 50
;>>>> if(pcf8583_flag)flag = 1; /*read i2c error*/
LAC *
BZ L43
LACK 1
SBRK 14
SACL *
L43:
.line 51
;>>>> pcf8583_flag = WriteByte(0x03,addr03);
LARK AR2,12
MAR *0+
LAC * ,AR1
SACL *+
LACK 3
SACL *+
CALL _WriteByte
SBRK 2
MAR * ,AR2
LARK AR2,16
MAR *0+
SACL *
.line 52
;>>>> if(pcf8583_flag)flag = 1;
LAC *
BZ L44
LACK 1
SBRK 14
SACL *
L44:
.line 53
;>>>> pcf8583_flag = WriteByte(0x04,addr04);
LARK AR2,13
MAR *0+
LAC * ,AR1
SACL *+
LACK 4
SACL *+
CALL _WriteByte
SBRK 2
MAR * ,AR2
LARK AR2,16
MAR *0+
SACL *
.line 54
;>>>> if(pcf8583_flag)flag = 1;
LAC *
BZ L45
LACK 1
SBRK 14
SACL *
L45:
.line 55
;>>>> pcf8583_flag = WriteByte(0x05,addr05);
LARK AR2,14
MAR *0+
LAC * ,AR1
SACL *+
LACK 5
SACL *+
CALL _WriteByte
SBRK 2
MAR * ,AR2
LARK AR2,16
MAR *0+
SACL *
.line 56
;>>>> if(pcf8583_flag)flag = 1;
LAC *
BZ L46
LACK 1
SBRK 14
SACL *
L46:
.line 57
;>>>> pcf8583_flag = WriteByte(0x06,addr06);
LARK AR2,15
MAR *0+
LAC * ,AR1
SACL *+
LACK 6
SACL *+
CALL _WriteByte
SBRK 2
MAR * ,AR2
LARK AR2,16
MAR *0+
SACL *
.line 58
;>>>> if(pcf8583_flag)flag = 1;
LAC *
BZ L47
LACK 1
SBRK 14
SACL *
L47:
.line 59
;>>>> pcf8583_flag = WriteByte(0x64,year_header);
LARK AR2,10
MAR *0+
LAC * ,AR1
SACL *+
LACK 100
SACL *+
CALL _WriteByte
SBRK 2
MAR * ,AR2
LARK AR2,16
MAR *0+
SACL *
.line 60
;>>>> if(pcf8583_flag)flag = 1;
LAC *
BZ L48
LACK 1
SBRK 14
SACL *
L48:
.line 62
;>>>> pcdata[0] = 6;
LACK 6
LDPK _pcdata
SACL _pcdata
.line 63
;>>>> pcdata[1] = deviceAddr;
LDPK _deviceAddr
BLDD _deviceAddr,#_pcdata+1
.line 64
;>>>> pcdata[2] = WR_RTC_CMD;
LACK 133
LDPK _pcdata+2
SACL _pcdata+2
.line 65
;>>>> pcdata[3] = status;
LARK AR2,1
MAR *0+
BLDD * ,#_pcdata+3
L32:
.line 67
;>>>> if(flag)
LARK AR2,2
MAR *0+
LAC *
BZ L49
.line 69
;>>>> status = PARA_OV;
LACK 17
MAR *-
SACL *
.line 70
;>>>> pcdata[0] = 6;
LACK 6
LDPK _pcdata
SACL _pcdata
.line 71
;>>>> pcdata[1] = deviceAddr;
LDPK _deviceAddr
BLDD _deviceAddr,#_pcdata+1
.line 72
;>>>> pcdata[2] = WR_RTC_CMD;
LACK 133
LDPK _pcdata+2
SACL _pcdata+2
.line 73
;>>>> pcdata[3] = status;
BLDD * ,#_pcdata+3
L49:
EPI0_12:
.line 75
MAR * ,AR1
SBRK 18
LAR AR0,*-
PSHD *
RET
.endfunc 360,000000000H,17
.sym _getCalendar,_getCalendar,32,2,0
.globl _getCalendar
.func 361
;>>>> void getCalendar()
;>>>> uchar year,month,day,hour,minute,second,weekday,year_header;
******************************************************
* FUNCTION DEF : _getCalendar
******************************************************
_getCalendar:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,15
LAR AR0,*0+,AR2
.sym _year,1,12,1,16
.sym _month,2,12,1,16
.sym _day,3,12,1,16
.sym _hour,4,12,1,16
.sym _minute,5,12,1,16
.sym _second,6,12,1,16
.sym _weekday,7,12,1,16
.sym _year_header,8,12,1,16
.sym _addr02,9,12,1,16
.sym _addr03,10,12,1,16
.sym _addr04,11,12,1,16
.sym _addr05,12,12,1,16
.sym _addr06,13,12,1,16
.sym _pcf8583_flag,14,14,1,16
.line 4
;>>>> uchar addr02=0,addr03=0,addr04=0,addr05=0,addr06=0;/*addr in the pcf8583*/
LACK 0
LARK AR2,9
MAR *0+
SACL *+
SACL *+
SACL *+
SACL *+
SACL *+
.line 5
;>>>> uint pcf8583_flag = 0;
SACL * ,AR1
.line 7
;>>>> addr02 = ReadByte(0x02);
LACK 2
SACL *+
CALL _ReadByte
MAR *-,AR2
LARK AR2,9
MAR *0+
SACL *
.line 8
;>>>> if(addr02 == 0xffff)pcf8583_flag = 1; /*read i2c error*/
ZALS *
RSXM
SUBK -1
BNZ L50
LACK 1
ADRK 5
SACL *
L50:
.line 9
;>>>> addr03 = ReadByte(0x03);
MAR * ,AR1
LACK 3
SACL *+
CALL _ReadByte
MAR *-,AR2
LARK AR2,10
MAR *0+
SACL *
.line 10
;>>>> if(addr03 == 0xffff) pcf8583_flag = 1;
ZALS *
RSXM
SUBK -1
BNZ L51
LACK 1
ADRK 4
SACL *
L51:
.line 11
;>>>> addr04 = ReadByte(0x04);
MAR * ,AR1
LACK 4
SACL *+
CALL _ReadByte
MAR *-,AR2
LARK AR2,11
MAR *0+
SACL *
.line 12
;>>>> if(addr04 == 0xffff)pcf8583_flag = 1;
ZALS *
RSXM
SUBK -1
BNZ L52
LACK 1
ADRK 3
SACL *
L52:
.line 13
;>>>> addr05 = ReadByte(0x05);
MAR * ,AR1
LACK 5
SACL *+
CALL _ReadByte
MAR *-,AR2
LARK AR2,12
MAR *0+
SACL *
.line 14
;>>>> if(addr05 == 0xffff) pcf8583_flag = 1;
ZALS *
RSXM
SUBK -1
BNZ L53
LACK 1
ADRK 2
SACL *
L53:
.line 15
;>>>> addr06 = ReadByte(0x06);
MAR * ,AR1
LACK 6
SACL *+
CALL _ReadByte
MAR *-,AR2
LARK AR2,13
MAR *0+
SACL *
.line 16
;>>>> if(addr06 == 0xffff)pcf8583_flag = 1;
ZALS *
RSXM
SUBK -1
BNZ L54
LACK 1
MAR *+
SACL *
L54:
.line 17
;>>>> year_header = ReadByte(0x64);
MAR * ,AR1
LACK 100
SACL *+
CALL _ReadByte
MAR *-,AR2
LARK AR2,8
MAR *0+
SACL *
.line 18
;>>>> if(addr06 == 0xffff) pcf8583_flag = 1;
ADRK 5
ZALS *
RSXM
SUBK -1
BNZ L55
LACK 1
MAR *+
SACL *
L55:
.line 20
;>>>> year = addr05 >> 6;
LARK AR2,12
MAR *0+
LAC * ,9
SBRK 11
SACH * ,1
.line 21
;>>>> month = addr06&0x1f;
LACK 31
ADRK 12
AND *
SBRK 11
SACL *
.line 22
;>>>> day = addr05&0x3f;
LACK 63
ADRK 10
AND *
SBRK 9
SACL *
.line 23
;>>>> hour = addr04&0x3f;
LACK 63
ADRK 8
AND *
SBRK 7
SACL *
.line 24
;>>>> minute = addr03;
ADRK 6
LAC *
SBRK 5
SACL *
.line 25
;>>>> second = addr02;
ADRK 4
LAC *
SBRK 3
SACL *
.line 26
;>>>> weekday = addr06>>5;
ADRK 7
LAC * ,10
SBRK 6
SACH * ,1
.line 27
;>>>> pcdata[0] = 14;
LACK 14
LDPK _pcdata
SACL _pcdata
.line 28
;>>>> pcdata[1] = deviceAddr;
LDPK _deviceAddr
BLDD _deviceAddr,#_pcdata+1
.line 29
;>>>> pcdata[2] = RD_RTC_CMD;
LACK 134
LDPK _pcdata+2
SACL _pcdata+2
.line 30
;>>>> if(pcf8583_flag)pcdata[3] = PARA_OV; //0x11
ADRK 7
LAC *
BZ L56
LACK 17
LDPK _pcdata+3
SACL _pcdata+3
B L57
L56:
.line 31
;>>>> else pcdata[3] = OK; //0x00
LACK 0
LDPK _pcdata+3
SACL _pcdata+3
L57:
.line 32
;>>>> pcdata[4] = year;
SBRK 13
BLDD *+,#_pcdata+4
.line 33
;>>>> pcdata[5] = month;
BLDD *+,#_pcdata+5
.line 34
;>>>> pcdata[6] = day;
BLDD *+,#_pcdata+6
.line 35
;>>>> pcdata[7] = hour;
BLDD *+,#_pcdata+7
.line 36
;>>>> pcdata[8] = minute;
BLDD *+,#_pcdata+8
.line 37
;>>>> pcdata[9] = second;
BLDD *+,#_pcdata+9
.line 38
;>>>> pcdata[10] = weekday;
BLDD *+,#_pcdata+10
.line 39
;>>>> pcdata[11] = year_header;
BLDD * ,#_pcdata+11,AR1
EPI0_13:
.line 40
SBRK 16
LAR AR0,*-
PSHD *
RET
.endfunc 400,000000000H,15
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -