📄 ds1302_main.lis
字号:
032E 00E8 ldi R16,128
0330 50DF xcall _writecom
0332 .dbline 155
0332 ;
0332 ; PORTA|=(1<<RS);
0332 DD9A sbi 0x1b,5
0334 .dbline 156
0334 ; PORTA&=~(1<<RW);
0334 DE98 cbi 0x1b,6
0336 .dbline 157
0336 ; s_ms(50);
0336 02E3 ldi R16,50
0338 10E0 ldi R17,0
033A 17DF xcall _s_ms
033C .dbline 158
033C ; for(i=0;i<16;i++)
033C 6627 clr R22
033E 0BC0 xjmp L52
0340 L49:
0340 .dbline 159
0340 ; {
0340 .dbline 160
0340 ; t = *pBuffer;
0340 FA01 movw R30,R20
0342 A080 ldd R10,z+0
0344 .dbline 161
0344 ; PORTD = t;
0344 A2BA out 0x12,R10
0346 .dbline 162
0346 ; PORTA|=(1<<EN);
0346 DF9A sbi 0x1b,7
0348 .dbline 163
0348 ; s_ms(50);
0348 02E3 ldi R16,50
034A 10E0 ldi R17,0
034C 0EDF xcall _s_ms
034E .dbline 164
034E ; PORTA&=~(1<<EN);
034E DF98 cbi 0x1b,7
0350 .dbline 165
0350 ; pBuffer++;
0350 4F5F subi R20,255 ; offset = 1
0352 5F4F sbci R21,255
0354 .dbline 166
0354 ; }
0354 L50:
0354 .dbline 158
0354 6395 inc R22
0356 L52:
0356 .dbline 158
0356 6031 cpi R22,16
0358 98F3 brlo L49
035A X11:
035A .dbline 167
035A ; writecom(0xC0);
035A 00EC ldi R16,192
035C 3ADF xcall _writecom
035E .dbline 169
035E ;
035E ; PORTA|=(1<<RS);
035E DD9A sbi 0x1b,5
0360 .dbline 170
0360 ; PORTA&=~(1<<RW);
0360 DE98 cbi 0x1b,6
0362 .dbline 171
0362 ; s_ms(50);
0362 02E3 ldi R16,50
0364 10E0 ldi R17,0
0366 01DF xcall _s_ms
0368 .dbline 172
0368 ; for(i=0;i<16;i++)
0368 6627 clr R22
036A 0BC0 xjmp L56
036C L53:
036C .dbline 173
036C ; {
036C .dbline 174
036C ; t = *pBuffer;
036C FA01 movw R30,R20
036E A080 ldd R10,z+0
0370 .dbline 175
0370 ; PORTD = t;
0370 A2BA out 0x12,R10
0372 .dbline 176
0372 ; PORTA|=(1<<EN);
0372 DF9A sbi 0x1b,7
0374 .dbline 177
0374 ; s_ms(50);
0374 02E3 ldi R16,50
0376 10E0 ldi R17,0
0378 F8DE xcall _s_ms
037A .dbline 178
037A ; PORTA&=~(1<<EN);
037A DF98 cbi 0x1b,7
037C .dbline 179
037C ; pBuffer++;
037C 4F5F subi R20,255 ; offset = 1
037E 5F4F sbci R21,255
0380 .dbline 180
0380 ; }
0380 L54:
0380 .dbline 172
0380 6395 inc R22
0382 L56:
0382 .dbline 172
0382 6031 cpi R22,16
0384 98F3 brlo L53
0386 X12:
0386 .dbline -2
0386 L48:
0386 .dbline 0 ; func end
0386 0C940000 xjmp pop_xgsetF00C
038A .dbsym r t 10 c
038A .dbsym r i 22 c
038A .dbsym r pBuffer 20 pkc
038A .dbend
038A .dbfunc e WriteNum _WriteNum fV
038A ; num -> R20,R21
038A ; col -> R10,R11
038A ; row -> R22,R23
.even
038A _WriteNum::
038A 0E940000 xcall push_xgsetF00C
038E 5901 movw R10,R18
0390 B801 movw R22,R16
0392 4E81 ldd R20,y+6
0394 5F81 ldd R21,y+7
0396 .dbline -1
0396 .dbline 190
0396 ; }
0396 ; //====================================================
0396 ; // 描述:在任意位置写数字函数
0396 ; // 入口:’row‘表示要写数字所在的行地址,只能为1或2
0396 ; // ’col‘表示要写数字所在的列地址,只能为0--15
0396 ; // ‘num’表示要写的数字,只能为0--9
0396 ; // 出口:无
0396 ; //===================================================
0396 ; void WriteNum(uint row,uint col,uint num)
0396 ; {
0396 .dbline 191
0396 ; if (row == 1) row = 0x80 + col;
0396 6130 cpi R22,1
0398 E0E0 ldi R30,0
039A 7E07 cpc R23,R30
039C 21F4 brne L58
039E X13:
039E .dbline 191
039E B501 movw R22,R10
03A0 6058 subi R22,128 ; offset = 128
03A2 7F4F sbci R23,255
03A4 03C0 xjmp L59
03A6 L58:
03A6 .dbline 192
03A6 ; else row = 0xC0 + col;
03A6 B501 movw R22,R10
03A8 6054 subi R22,64 ; offset = 192
03AA 7F4F sbci R23,255
03AC L59:
03AC .dbline 193
03AC ; writecom(row);
03AC 062F mov R16,R22
03AE 11DF xcall _writecom
03B0 .dbline 194
03B0 ; if (num<=0 | num>9) num =0x30;
03B0 4030 cpi R20,0
03B2 4507 cpc R20,R21
03B4 21F4 brne L62
03B6 X14:
03B6 81E0 ldi R24,1
03B8 90E0 ldi R25,0
03BA 5C01 movw R10,R24
03BC 02C0 xjmp L63
03BE L62:
03BE AA24 clr R10
03C0 BB24 clr R11
03C2 L63:
03C2 89E0 ldi R24,9
03C4 90E0 ldi R25,0
03C6 8417 cp R24,R20
03C8 9507 cpc R25,R21
03CA 18F4 brsh L64
03CC X15:
03CC 61E0 ldi R22,1
03CE 70E0 ldi R23,0
03D0 02C0 xjmp L65
03D2 L64:
03D2 6627 clr R22
03D4 7727 clr R23
03D6 L65:
03D6 1501 movw R2,R10
03D8 262A or R2,R22
03DA 372A or R3,R23
03DC 2220 tst R2
03DE 11F4 brne X16
03E0 3320 tst R3
03E2 19F0 breq L60
03E4 X16:
03E4 .dbline 194
03E4 40E3 ldi R20,48
03E6 50E0 ldi R21,0
03E8 02C0 xjmp L61
03EA L60:
03EA .dbline 195
03EA ; else num = 0x30 + num;
03EA 405D subi R20,208 ; offset = 48
03EC 5F4F sbci R21,255
03EE L61:
03EE .dbline 197
03EE ;
03EE ; PORTA|=(1<<RS);
03EE DD9A sbi 0x1b,5
03F0 .dbline 198
03F0 ; s_ms(500);
03F0 04EF ldi R16,500
03F2 11E0 ldi R17,1
03F4 BADE xcall _s_ms
03F6 .dbline 199
03F6 ; PORTA&=~(1<<RW);
03F6 DE98 cbi 0x1b,6
03F8 .dbline 200
03F8 ; s_ms(500);
03F8 04EF ldi R16,500
03FA 11E0 ldi R17,1
03FC B6DE xcall _s_ms
03FE .dbline 201
03FE ; PORTD = num;
03FE 42BB out 0x12,R20
0400 .dbline 202
0400 ; s_ms(500);
0400 04EF ldi R16,500
0402 11E0 ldi R17,1
0404 B2DE xcall _s_ms
0406 .dbline 203
0406 ; PORTA|=(1<<EN);
0406 DF9A sbi 0x1b,7
0408 .dbline 204
0408 ; s_ms(500);
0408 04EF ldi R16,500
040A 11E0 ldi R17,1
040C AEDE xcall _s_ms
040E .dbline 205
040E ; PORTA&=~(1<<EN);
040E DF98 cbi 0x1b,7
0410 .dbline 206
0410 ; s_ms(500);
0410 04EF ldi R16,500
0412 11E0 ldi R17,1
0414 AADE xcall _s_ms
0416 .dbline -2
0416 L57:
0416 .dbline 0 ; func end
0416 0C940000 xjmp pop_xgsetF00C
041A .dbsym r num 20 i
041A .dbsym r col 10 i
041A .dbsym r row 22 i
041A .dbend
041A .dbfunc e WriteChar _WriteChar fV
041A ; t -> R12
041A ; i -> R10
041A ; pBuffer -> R20,R21
041A ; num -> y+8
041A ; col -> R10
041A ; row -> R22
.even
041A _WriteChar::
041A 0E940000 xcall push_xgsetF03C
041E A22E mov R10,R18
0420 602F mov R22,R16
0422 4A85 ldd R20,y+10
0424 5B85 ldd R21,y+11
0426 .dbline -1
0426 .dbline 216
0426 ; }
0426 ; //================================================================
0426 ; // 描述:在任意位置写任意多个字符
0426 ; // 入口:’row‘要写的字符所在的行,只能为1或2;
0426 ; // ‘col’要写的字符所在的列,只能为0---15
0426 ; // ‘num’要写字符的个数
0426 ; // ‘pbuffer’要写字符的首地址
0426 ; //==================================================================
0426 ; void WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
0426 ; {
0426 .dbline 218
0426 ; uchar i,t;
0426 ; if (row == 1) row = 0x80 + col;
0426 6130 cpi R22,1
0428 19F4 brne L67
042A X17:
042A .dbline 218
042A 6A2D mov R22,R10
042C 6058 subi R22,128 ; addi 128
042E 02C0 xjmp L68
0430 L67:
0430 .dbline 219
0430 ; else row = 0xC0 + col;
0430 6A2D mov R22,R10
0432 6054 subi R22,64 ; addi 192
0434 L68:
0434 .dbline 220
0434 ; writecom(row);
0434 062F mov R16,R22
0436 CDDE xcall _writecom
0438 .dbline 224
0438 ; //if (num<=0 | num>9) num =0x30;
0438 ; //else num = 0x30 + num;
0438 ;
0438 ; PORTA|=(1<<RS);
0438 DD9A sbi 0x1b,5
043A .dbline 225
043A ; s_ms(500);
043A 04EF ldi R16,500
043C 11E0 ldi R17,1
043E 95DE xcall _s_ms
0440 .dbline 226
0440 ; PORTA&=~(1<<RW);
0440 DE98 cbi 0x1b,6
0442 .dbline 227
0442 ; s_ms(500);
0442 04EF ldi R16,500
0444 11E0 ldi R17,1
0446 91DE xcall _s_ms
0448 .dbline 228
0448 ; for(i=num;i!=0;i--)
0448 A884 ldd R10,y+8
044A B984 ldd R11,y+9
044C 14C0 xjmp L72
044E L69:
044E .dbline 229
044E ; {
044E .dbline 230
044E ; t = *pBuffer;
044E FA01 movw R30,R20
0450 C080 ldd R12,z+0
0452 .dbline 231
0452 ; s_ms(500);
0452 04EF ldi R16,500
0454 11E0 ldi R17,1
0456 89DE xcall _s_ms
0458 .dbline 232
0458 ; PORTD = t;
0458 C2BA out 0x12,R12
045A .dbline 233
045A ; s_ms(500);
045A 04EF ldi R16,500
045C 11E0 ldi R17,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -