📄 ds1302.lis
字号:
0086 .dbline 106
0086 ; }
0086 L20:
0086 .dbline 107
0086 979A sbi 0x12,7
0088 .dbline 108
0088 82B3 in R24,0x12
008A 8F77 andi R24,127
008C 82BB out 0x12,R24
008E .dbline 109
008E 0695 lsr R16
0090 .dbline 110
0090 L16:
0090 .dbline 97
0090 6395 inc R22
0092 L18:
0092 .dbline 97
0092 6830 cpi R22,8
0094 88F3 brlo L15
0096 .dbline 111
0096 ; PORTD|=0x80; //1000 0000 SZSCK=1
0096 ; PORTD&=0x7F;//SZSCK=0;
0096 ; cmd=cmd>>1;
0096 ; }
0096 ; DDRD&=0xBF;//设置PD6(SZSDA)为输入模式
0096 81B3 in R24,0x11
0098 8F7B andi R24,191
009A 81BB out 0x11,R24
009C .dbline 112
009C ; for(i=0;i<8;i++)
009C 6627 clr R22
009E 0CC0 xjmp L24
00A0 L21:
00A0 .dbline 113
00A0 ; {
00A0 .dbline 114
00A0 ; code=code>>1;
00A0 4695 lsr R20
00A2 .dbline 115
00A2 ; PORTD&=0x7F;//0111 1111 设置PD7(SZSCK)为低
00A2 82B3 in R24,0x12
00A4 8F77 andi R24,127
00A6 82BB out 0x12,R24
00A8 .dbline 116
00A8 ; if(PIND&0x40)
00A8 869B sbis 0x10,6
00AA 01C0 rjmp L25
00AC .dbline 117
00AC ; {
00AC .dbline 118
00AC ; code|=0x80;
00AC 4068 ori R20,128
00AE .dbline 119
00AE ; }
00AE L25:
00AE .dbline 120
00AE 979A sbi 0x12,7
00B0 .dbline 121
00B0 82B3 in R24,0x12
00B2 8F77 andi R24,127
00B4 82BB out 0x12,R24
00B6 .dbline 122
00B6 L22:
00B6 .dbline 112
00B6 6395 inc R22
00B8 L24:
00B8 .dbline 112
00B8 6830 cpi R22,8
00BA 90F3 brlo L21
00BC .dbline 123
00BC ; PORTD|=0x80;//SZSCK=1;
00BC ; PORTD&=0x7F;//SZSCK=0;
00BC ; }
00BC ; PORTD&=0xDF;//设置RESET为低 1101 1111
00BC 82B3 in R24,0x12
00BE 8F7D andi R24,223
00C0 82BB out 0x12,R24
00C2 .dbline 124
00C2 ; return code;
00C2 042F mov R16,R20
00C4 .dbline -2
00C4 L14:
00C4 0E940000 xcall pop_gset2
00C8 .dbline 0 ; func end
00C8 0895 ret
00CA .dbsym r code 20 c
00CA .dbsym r i 22 c
00CA .dbsym r cmd 16 c
00CA .dbend
00CA .dbfunc e ASCIItoBCD _ASCIItoBCD fc
00CA ; tmp -> R22
00CA ; data -> R20
.even
00CA _ASCIItoBCD::
00CA 0E940000 xcall push_gset2
00CE 402F mov R20,R16
00D0 .dbline -1
00D0 .dbline 131
00D0 ; }
00D0 ;
00D0 ; //ASCII码转换为BCD码
00D0 ; //输入参数data为输入的数字
00D0 ; //返回值为BCD码表示的数字
00D0 ; unsigned char ASCIItoBCD(unsigned char data)
00D0 ; {
00D0 .dbline 133
00D0 ; unsigned char tmp;
00D0 ; if(data>10)
00D0 8AE0 ldi R24,10
00D2 8417 cp R24,R20
00D4 70F4 brsh L28
00D6 .dbline 134
00D6 ; {
00D6 .dbline 135
00D6 ; tmp=data/10;
00D6 1AE0 ldi R17,10
00D8 042F mov R16,R20
00DA 0E940000 xcall div8u
00DE 602F mov R22,R16
00E0 .dbline 136
00E0 ; data=data%10;
00E0 1AE0 ldi R17,10
00E2 042F mov R16,R20
00E4 0E940000 xcall mod8u
00E8 402F mov R20,R16
00EA .dbline 137
00EA ; data=(tmp<<4)|data;
00EA 862F mov R24,R22
00EC 8F70 andi R24,#0x0F
00EE 8295 swap R24
00F0 482B or R20,R24
00F2 .dbline 138
00F2 ; }
00F2 L28:
00F2 .dbline 139
00F2 ; return data;
00F2 042F mov R16,R20
00F4 .dbline -2
00F4 L27:
00F4 0E940000 xcall pop_gset2
00F8 .dbline 0 ; func end
00F8 0895 ret
00FA .dbsym r tmp 22 c
00FA .dbsym r data 20 c
00FA .dbend
00FA .dbfunc e BCDtoASCII _BCDtoASCII fc
00FA ; tmp -> R22
00FA ; mask -> R10
00FA ; data -> R20
.even
00FA _BCDtoASCII::
00FA 0E940000 xcall push_gset3
00FE A22E mov R10,R18
0100 402F mov R20,R16
0102 .dbline -1
0102 .dbline 147
0102 ; }
0102 ;
0102 ; //BCD码转换为ASCII码
0102 ; //输入参数data为BCD码
0102 ; //输入参数num为转换从最右边开始到第mask位结束
0102 ; //返回值为ASCII表示的数字
0102 ; unsigned char BCDtoASCII(unsigned char data,unsigned char mask)
0102 ; {
0102 .dbline 148
0102 ; unsigned char tmp=0xff;
0102 6FEF ldi R22,255
0104 .dbline 149
0104 ; tmp=tmp>>(8-mask);
0104 18E0 ldi R17,8
0106 1A19 sub R17,R10
0108 062F mov R16,R22
010A 0E940000 xcall lsr8
010E 602F mov R22,R16
0110 .dbline 150
0110 ; data=data&tmp;
0110 4023 and R20,R16
0112 .dbline 151
0112 ; if(data>0x0f)
0112 8FE0 ldi R24,15
0114 8417 cp R24,R20
0116 50F4 brsh L31
0118 .dbline 152
0118 ; {
0118 .dbline 153
0118 ; tmp=data&0x0f;
0118 642F mov R22,R20
011A 6F70 andi R22,15
011C .dbline 154
011C ; data=data>>4;
011C 842F mov R24,R20
011E 8295 swap R24
0120 8F70 andi R24,#0x0F
0122 482F mov R20,R24
0124 .dbline 155
0124 ; data=data*10+tmp;
0124 8AE0 ldi R24,10
0126 849F mul R24,R20
0128 402D mov R20,R0
012A 460F add R20,R22
012C .dbline 156
012C ; }
012C L31:
012C .dbline 157
012C ; return data;
012C 042F mov R16,R20
012E .dbline -2
012E L30:
012E 0E940000 xcall pop_gset3
0132 .dbline 0 ; func end
0132 0895 ret
0134 .dbsym r tmp 22 c
0134 .dbsym r mask 10 c
0134 .dbsym r data 20 c
0134 .dbend
0134 .dbfunc e main _main fV
0134 ; data -> R20
.even
0134 _main::
0134 .dbline -1
0134 .dbline 162
0134 ; }
0134 ;
0134 ;
0134 ; void main()
0134 ; {
0134 .dbline 164
0134 ; unsigned char data;
0134 ; SetDateTime(TRIC_CHARGE_W,0xA5);
0134 25EA ldi R18,165
0136 00E9 ldi R16,144
0138 63DF xcall _SetDateTime
013A .dbline 165
013A ; data=ReadDateTime(TRIC_CHARGE_R);
013A 01E9 ldi R16,145
013C 92DF xcall _ReadDateTime
013E 402F mov R20,R16
0140 L34:
0140 .dbline 167
0140 L35:
0140 .dbline 166
0140 FFCF xjmp L34
0142 X0:
0142 .dbline -2
0142 .dbline 168
0142 ; while(1)
0142 ; ;
0142 ; }
0142 L33:
0142 .dbline 0 ; func end
0142 0895 ret
0144 .dbsym r data 20 c
0144 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -