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