📄 ds18b20_main.lis
字号:
0304 0E940000 xcall push_xgsetF00C
0308 A801 movw R20,R16
030A .dbline -1
030A .dbline 151
030A ;
030A ; }
030A ;
030A ; //=================================================
030A ; //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
030A ; //入口:菜单数组首地址
030A ; //出口:无
030A ; //=================================================
030A ; void WriteMenu(const uchar *pBuffer)
030A ; {
030A .dbline 153
030A ; uchar i,t;
030A ; writecom(0x80); //数据地址
030A 00E8 ldi R16,128
030C 4FDF xcall _writecom
030E .dbline 155
030E ;
030E ; PORTA|=(1<<RS);
030E DD9A sbi 0x1b,5
0310 .dbline 156
0310 ; PORTA&=~(1<<RW);
0310 DE98 cbi 0x1b,6
0312 .dbline 157
0312 ; s_ms(50);
0312 02E3 ldi R16,50
0314 10E0 ldi R17,0
0316 16DF xcall _s_ms
0318 .dbline 158
0318 ; for(i=0;i<16;i++)
0318 6627 clr R22
031A 0BC0 xjmp L60
031C L57:
031C .dbline 159
031C ; {
031C .dbline 160
031C ; t = *pBuffer;
031C FA01 movw R30,R20
031E A490 lpm R10,Z
0320 .dbline 161
0320 ; PORTD = t;
0320 A2BA out 0x12,R10
0322 .dbline 162
0322 ; PORTA|=(1<<EN);
0322 DF9A sbi 0x1b,7
0324 .dbline 163
0324 ; s_ms(50);
0324 02E3 ldi R16,50
0326 10E0 ldi R17,0
0328 0DDF xcall _s_ms
032A .dbline 164
032A ; PORTA&=~(1<<EN);
032A DF98 cbi 0x1b,7
032C .dbline 165
032C ; pBuffer++;
032C 4F5F subi R20,255 ; offset = 1
032E 5F4F sbci R21,255
0330 .dbline 166
0330 ; }
0330 L58:
0330 .dbline 158
0330 6395 inc R22
0332 L60:
0332 .dbline 158
0332 6031 cpi R22,16
0334 98F3 brlo L57
0336 X13:
0336 .dbline 167
0336 ; writecom(0xC0);
0336 00EC ldi R16,192
0338 39DF xcall _writecom
033A .dbline 169
033A ;
033A ; PORTA|=(1<<RS);
033A DD9A sbi 0x1b,5
033C .dbline 170
033C ; PORTA&=~(1<<RW);
033C DE98 cbi 0x1b,6
033E .dbline 171
033E ; s_ms(50);
033E 02E3 ldi R16,50
0340 10E0 ldi R17,0
0342 00DF xcall _s_ms
0344 .dbline 172
0344 ; for(i=0;i<16;i++)
0344 6627 clr R22
0346 0BC0 xjmp L64
0348 L61:
0348 .dbline 173
0348 ; {
0348 .dbline 174
0348 ; t = *pBuffer;
0348 FA01 movw R30,R20
034A A490 lpm R10,Z
034C .dbline 175
034C ; PORTD = t;
034C A2BA out 0x12,R10
034E .dbline 176
034E ; PORTA|=(1<<EN);
034E DF9A sbi 0x1b,7
0350 .dbline 177
0350 ; s_ms(50);
0350 02E3 ldi R16,50
0352 10E0 ldi R17,0
0354 F7DE xcall _s_ms
0356 .dbline 178
0356 ; PORTA&=~(1<<EN);
0356 DF98 cbi 0x1b,7
0358 .dbline 179
0358 ; pBuffer++;
0358 4F5F subi R20,255 ; offset = 1
035A 5F4F sbci R21,255
035C .dbline 180
035C ; }
035C L62:
035C .dbline 172
035C 6395 inc R22
035E L64:
035E .dbline 172
035E 6031 cpi R22,16
0360 98F3 brlo L61
0362 X14:
0362 .dbline -2
0362 L56:
0362 .dbline 0 ; func end
0362 0C940000 xjmp pop_xgsetF00C
0366 .dbsym r t 10 c
0366 .dbsym r i 22 c
0366 .dbsym r pBuffer 20 pkc
0366 .dbend
0366 .dbfunc e WriteNum _WriteNum fV
0366 ; num -> R20,R21
0366 ; col -> R10,R11
0366 ; row -> R22,R23
.even
0366 _WriteNum::
0366 0E940000 xcall push_xgsetF00C
036A 5901 movw R10,R18
036C B801 movw R22,R16
036E 4E81 ldd R20,y+6
0370 5F81 ldd R21,y+7
0372 .dbline -1
0372 .dbline 190
0372 ; }
0372 ; //====================================================
0372 ; // 描述:在任意位置写数字函数
0372 ; // 入口:’row‘表示要写数字所在的行地址,只能为1或2
0372 ; // ’col‘表示要写数字所在的列地址,只能为0--15
0372 ; // ‘num’表示要写的数字,只能为0--9
0372 ; // 出口:无
0372 ; //===================================================
0372 ; void WriteNum(uint row,uint col,uint num)
0372 ; {
0372 .dbline 191
0372 ; if (row == 1) row = 0x80 + col;
0372 6130 cpi R22,1
0374 E0E0 ldi R30,0
0376 7E07 cpc R23,R30
0378 21F4 brne L66
037A X15:
037A .dbline 191
037A B501 movw R22,R10
037C 6058 subi R22,128 ; offset = 128
037E 7F4F sbci R23,255
0380 03C0 xjmp L67
0382 L66:
0382 .dbline 192
0382 ; else row = 0xC0 + col;
0382 B501 movw R22,R10
0384 6054 subi R22,64 ; offset = 192
0386 7F4F sbci R23,255
0388 L67:
0388 .dbline 193
0388 ; writecom(row);
0388 062F mov R16,R22
038A 10DF xcall _writecom
038C .dbline 194
038C ; if (num<=0 | num>9) num =0x30;
038C 4030 cpi R20,0
038E 4507 cpc R20,R21
0390 21F4 brne L70
0392 X16:
0392 81E0 ldi R24,1
0394 90E0 ldi R25,0
0396 5C01 movw R10,R24
0398 02C0 xjmp L71
039A L70:
039A AA24 clr R10
039C BB24 clr R11
039E L71:
039E 89E0 ldi R24,9
03A0 90E0 ldi R25,0
03A2 8417 cp R24,R20
03A4 9507 cpc R25,R21
03A6 18F4 brsh L72
03A8 X17:
03A8 61E0 ldi R22,1
03AA 70E0 ldi R23,0
03AC 02C0 xjmp L73
03AE L72:
03AE 6627 clr R22
03B0 7727 clr R23
03B2 L73:
03B2 1501 movw R2,R10
03B4 262A or R2,R22
03B6 372A or R3,R23
03B8 2220 tst R2
03BA 11F4 brne X18
03BC 3320 tst R3
03BE 19F0 breq L68
03C0 X18:
03C0 .dbline 194
03C0 40E3 ldi R20,48
03C2 50E0 ldi R21,0
03C4 02C0 xjmp L69
03C6 L68:
03C6 .dbline 195
03C6 ; else num = 0x30 + num;
03C6 405D subi R20,208 ; offset = 48
03C8 5F4F sbci R21,255
03CA L69:
03CA .dbline 197
03CA ;
03CA ; PORTA|=(1<<RS);
03CA DD9A sbi 0x1b,5
03CC .dbline 198
03CC ; s_ms(500);
03CC 04EF ldi R16,500
03CE 11E0 ldi R17,1
03D0 B9DE xcall _s_ms
03D2 .dbline 199
03D2 ; PORTA&=~(1<<RW);
03D2 DE98 cbi 0x1b,6
03D4 .dbline 200
03D4 ; s_ms(500);
03D4 04EF ldi R16,500
03D6 11E0 ldi R17,1
03D8 B5DE xcall _s_ms
03DA .dbline 201
03DA ; PORTD = num;
03DA 42BB out 0x12,R20
03DC .dbline 202
03DC ; s_ms(500);
03DC 04EF ldi R16,500
03DE 11E0 ldi R17,1
03E0 B1DE xcall _s_ms
03E2 .dbline 203
03E2 ; PORTA|=(1<<EN);
03E2 DF9A sbi 0x1b,7
03E4 .dbline 204
03E4 ; s_ms(500);
03E4 04EF ldi R16,500
03E6 11E0 ldi R17,1
03E8 ADDE xcall _s_ms
03EA .dbline 205
03EA ; PORTA&=~(1<<EN);
03EA DF98 cbi 0x1b,7
03EC .dbline 206
03EC ; s_ms(500);
03EC 04EF ldi R16,500
03EE 11E0 ldi R17,1
03F0 A9DE xcall _s_ms
03F2 .dbline -2
03F2 L65:
03F2 .dbline 0 ; func end
03F2 0C940000 xjmp pop_xgsetF00C
03F6 .dbsym r num 20 i
03F6 .dbsym r col 10 i
03F6 .dbsym r row 22 i
03F6 .dbend
03F6 .dbfunc e WriteChar _WriteChar fV
03F6 ; t -> R12
03F6 ; i -> R10
03F6 ; pBuffer -> R20,R21
03F6 ; num -> y+8
03F6 ; col -> R10
03F6 ; row -> R22
.even
03F6 _WriteChar::
03F6 0E940000 xcall push_xgsetF03C
03FA A22E mov R10,R18
03FC 602F mov R22,R16
03FE 4A85 ldd R20,y+10
0400 5B85 ldd R21,y+11
0402 .dbline -1
0402 .dbline 216
0402 ; }
0402 ; //================================================================
0402 ; // 描述:在任意位置写任意多个字符
0402 ; // 入口:’row‘要写的字符所在的行,只能为1或2;
0402 ; // ‘col’要写的字符所在的列,只能为0---15
0402 ; // ‘num’要写字符的个数
0402 ; // ‘pbuffer’要写字符的首地址
0402 ; //==================================================================
0402 ; void WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
0402 ; {
0402 .dbline 218
0402 ; uchar i,t;
0402 ; if (row == 1) row = 0x80 + col;
0402 6130 cpi R22,1
0404 19F4 brne L75
0406 X19:
0406 .dbline 218
0406 6A2D mov R22,R10
0408 6058 subi R22,128 ; addi 128
040A 02C0 xjmp L76
040C L75:
040C .dbline 219
040C ; else row = 0xC0 + col;
040C 6A2D mov R22,R10
040E 6054 subi R22,64 ; addi 192
0410 L76:
0410 .dbline 220
0410 ; writecom(row);
0410 062F mov R16,R22
0412 CCDE xcall _writecom
0414 .dbline 224
0414 ; //if (num<=0 | num>9) num =0x30;
0414 ; //else num = 0x30 + num;
0414 ;
0414 ; PORTA|=(1<<RS);
0414 DD9A sbi 0x1b,5
0416 .dbline 225
0416 ; s_ms(500);
0416 04EF ldi R16,500
0418 11E0 ldi R17,1
041A 94DE xcall _s_ms
041C .dbline 226
041C ; PORTA&=~(1<<RW);
041C DE98 cbi 0x1b,6
041E .dbline 227
041E ; s_ms(500);
041E 04EF ldi R16,500
0420 11E0 ldi R17,1
0422 90DE xcall _s_ms
0424 .dbline 228
0424 ; for(i=num;i!=0;i--)
0424 A884 ldd R10,y+8
0426 14C0 xjmp L80
0428 L77:
0428 .dbline 229
0428 ; {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -