📄 main.lis
字号:
0244 2496 adiw R28,4
0246 0C940000 xjmp pop_xgset303C
024A .dbsym r temp 20 c
024A .dbsym l ascii 2 A[2:2]c
024A .dbsym l asc 10 c
024A .dbsym r column 12 c
024A .dbsym r row 10 c
024A .dbend
024A .dbfunc e delay_1us _delay_1us fV
.even
024A _delay_1us::
024A .dbline -1
024A .dbline 152
024A ; }
024A ;
024A ; /****************************************************************************/
024A ; //////////////////////////////延时程序////////////////////////////////////////
024A ; /****************************************************************************/
024A ; #define XTAL 8 //晶振频率,单位MHz
024A ; void delay_1us(void) //1us延时函数
024A ; {
024A .dbline 153
024A ; asm("nop");
024A 0000 nop
024C .dbline -2
024C L41:
024C .dbline 0 ; func end
024C 0895 ret
024E .dbend
024E .dbfunc e delay_nus _delay_nus fV
024E ; i -> R20,R21
024E ; n -> R10,R11
.even
024E _delay_nus::
024E 0E940000 xcall push_xgset300C
0252 5801 movw R10,R16
0254 .dbline -1
0254 .dbline 157
0254 ; }
0254 ;
0254 ; void delay_nus(unsigned int n) //N us延时函数
0254 ; {
0254 .dbline 158
0254 ; unsigned int i=0;
0254 4427 clr R20
0256 5527 clr R21
0258 .dbline 159
0258 ; for (i=0;i<n;i++)
0258 03C0 xjmp L46
025A L43:
025A .dbline 160
025A ; delay_1us();
025A F7DF xcall _delay_1us
025C L44:
025C .dbline 159
025C 4F5F subi R20,255 ; offset = 1
025E 5F4F sbci R21,255
0260 L46:
0260 .dbline 159
0260 4A15 cp R20,R10
0262 5B05 cpc R21,R11
0264 D0F3 brlo L43
0266 X8:
0266 .dbline -2
0266 L42:
0266 .dbline 0 ; func end
0266 0C940000 xjmp pop_xgset300C
026A .dbsym r i 20 i
026A .dbsym r n 10 i
026A .dbend
026A .dbfunc e delay_1ms _delay_1ms fV
026A ; i -> R16,R17
.even
026A _delay_1ms::
026A .dbline -1
026A .dbline 164
026A ; }
026A ;
026A ; void delay_1ms(void) //1ms延时函数
026A ; {
026A .dbline 166
026A ; unsigned int i;
026A ; for (i=0;i<(unsigned int)(XTAL*143-2);i++);
026A 0027 clr R16
026C 1127 clr R17
026E 02C0 xjmp L51
0270 L48:
0270 .dbline 166
0270 L49:
0270 .dbline 166
0270 0F5F subi R16,255 ; offset = 1
0272 1F4F sbci R17,255
0274 L51:
0274 .dbline 166
0274 86E7 ldi R24,1142
0276 94E0 ldi R25,4
0278 0817 cp R16,R24
027A 1907 cpc R17,R25
027C C8F3 brlo L48
027E X9:
027E .dbline -2
027E L47:
027E .dbline 0 ; func end
027E 0895 ret
0280 .dbsym r i 16 i
0280 .dbend
0280 .dbfunc e delay_nms _delay_nms fV
0280 ; i -> R20,R21
0280 ; n -> R10,R11
.even
0280 _delay_nms::
0280 0E940000 xcall push_xgset300C
0284 5801 movw R10,R16
0286 .dbline -1
0286 .dbline 170
0286 ; }
0286 ;
0286 ; void delay_nms(unsigned int n) //N ms延时函数
0286 ; {
0286 .dbline 171
0286 ; unsigned int i=0;
0286 4427 clr R20
0288 5527 clr R21
028A .dbline 172
028A ; for (i=0;i<n;i++)
028A 03C0 xjmp L56
028C L53:
028C .dbline 173
028C ; {
028C .dbline 174
028C ; delay_1ms();
028C EEDF xcall _delay_1ms
028E .dbline 175
028E ; }
028E L54:
028E .dbline 172
028E 4F5F subi R20,255 ; offset = 1
0290 5F4F sbci R21,255
0292 L56:
0292 .dbline 172
0292 4A15 cp R20,R10
0294 5B05 cpc R21,R11
0296 D0F3 brlo L53
0298 X10:
0298 .dbline -2
0298 L52:
0298 .dbline 0 ; func end
0298 0C940000 xjmp pop_xgset300C
029C .dbsym r i 20 i
029C .dbsym r n 10 i
029C .dbend
029C .dbfile D:\DS18B20\ds18b20.h
029C .dbfunc e resetDS18B20 _resetDS18B20 fc
029C ; errTime -> R10
.even
029C _resetDS18B20::
029C AA92 st -y,R10
029E .dbline -1
029E .dbline 8
029E ; #define dq_clr PORTB&=~(1<<PB7) //数据线强制拉低
029E ; #define dq_set PORTB|=(1<<PB7) //数据线强制拉高,上拉
029E ; #define hold_dq DDRB|=(1<<PB7) //Mega16控制总线
029E ; #define rls_dq DDRB&=~(1<<PB7) //释放总线
029E ; #define stu_dq PINB&(1<<PB7) //数据线的状态
029E ;
029E ; unsigned char resetDS18B20(void)
029E ; {
029E .dbline 9
029E ; unsigned char errTime=0;
029E AA24 clr R10
02A0 .dbline 10
02A0 ; rls_dq; //释放总线
02A0 BF98 cbi 0x17,7
02A2 .dbline 11
02A2 ; _NOP();
02A2 0000 nop
02A4 .dbline 12
02A4 ; hold_dq; //Maga16控制总线
02A4 BF9A sbi 0x17,7
02A6 .dbline 13
02A6 ; dq_clr; //强制拉低
02A6 C798 cbi 0x18,7
02A8 .dbline 14
02A8 ; delay_nus(480);
02A8 00EE ldi R16,480
02AA 11E0 ldi R17,1
02AC D0DF xcall _delay_nus
02AE .dbline 16
02AE ; //以上延时大于480us
02AE ; rls_dq; //释放总线,总线自动上拉
02AE BF98 cbi 0x17,7
02B0 .dbline 17
02B0 ; _NOP();
02B0 0000 nop
02B2 09C0 xjmp L59
02B4 L58:
02B4 .dbline 19
02B4 ; while(stu_dq)
02B4 ; {
02B4 .dbline 20
02B4 ; delay_nus(5); //5us
02B4 05E0 ldi R16,5
02B6 10E0 ldi R17,0
02B8 CADF xcall _delay_nus
02BA .dbline 21
02BA ; errTime++;
02BA A394 inc R10
02BC .dbline 22
02BC ; if(errTime>12)
02BC 8CE0 ldi R24,12
02BE 8A15 cp R24,R10
02C0 10F4 brsh L61
02C2 X11:
02C2 .dbline 23
02C2 ; return(0x00); //如果等带大于约 5*12就返回0x00,报告复位失败(实际上只要等待15-60us)
02C2 0027 clr R16
02C4 10C0 xjmp L57
02C6 L61:
02C6 .dbline 24
02C6 ; }
02C6 L59:
02C6 .dbline 18
02C6 B799 sbic 0x16,7
02C8 F5CF rjmp L58
02CA X12:
02CA .dbline 25
02CA ; errTime=0;
02CA AA24 clr R10
02CC 09C0 xjmp L64
02CE L63:
02CE .dbline 27
02CE ; while(!(stu_dq))
02CE ; {
02CE .dbline 28
02CE ; delay_nus(5); //5us
02CE 05E0 ldi R16,5
02D0 10E0 ldi R17,0
02D2 BDDF xcall _delay_nus
02D4 .dbline 29
02D4 ; errTime++;
02D4 A394 inc R10
02D6 .dbline 30
02D6 ; if(errTime>50)
02D6 82E3 ldi R24,50
02D8 8A15 cp R24,R10
02DA 10F4 brsh L66
02DC X13:
02DC .dbline 31
02DC ; return(0x00); //如果等带大于约 5us*50就返回0x00,报告复位失败(实际上只要等待60-240us)
02DC 0027 clr R16
02DE 03C0 xjmp L57
02E0 L66:
02E0 .dbline 32
02E0 ; }
02E0 L64:
02E0 .dbline 26
02E0 B79B sbis 0x16,7
02E2 F5CF rjmp L63
02E4 X14:
02E4 .dbline 33
02E4 ; return(0xff);
02E4 0FEF ldi R16,255
02E6 .dbline -2
02E6 L57:
02E6 .dbline 0 ; func end
02E6 A990 ld R10,y+
02E8 0895 ret
02EA .dbsym r errTime 10 c
02EA .dbend
02EA .dbfunc e readByteDS18B20 _readByteDS18B20 fc
02EA ; retVal -> R20
02EA ; i -> R22
.even
02EA _readByteDS18B20::
02EA 4A93 st -y,R20
02EC 6A93 st -y,R22
02EE .dbline -1
02EE .dbline 37
02EE ; }
02EE ;
02EE ; unsigned char readByteDS18B20(void)
02EE ; {
02EE .dbline 39
02EE ; unsigned char i;
02EE ; unsigned char retVal=0;
02EE 4427 clr R20
02F0 .dbline 40
02F0 ; rls_dq; //释放总线
02F0 BF98 cbi 0x17,7
02F2 .dbline 41
02F2 ; for(i=8;i>0;i--)
02F2 68E0 ldi R22,8
02F4 11C0 xjmp L72
02F6 L69:
02F6 .dbline 42
02F6 ; {
02F6 .dbline 43
02F6 ; retVal>>=1;
02F6 4695 lsr R20
02F8 .dbline 44
02F8 ; hold_dq; //Maga16控制总线
02F8 BF9A sbi 0x17,7
02FA .dbline 45
02FA ; dq_clr; //强制拉低
02FA C798 cbi 0x18,7
02FC .dbline 46
02FC ; delay_nus(8); //延时大于1us
02FC 08E0 ldi R16,8
02FE 10E0 ldi R17,0
0300 A6DF xcall _delay_nus
0302 .dbline 47
0302 ; dq_set; //释放总线,DS18B20会将总线强制拉低
0302 C79A sbi 0x18,7
0304 .dbline 49
0304 ;
0304 ; rls_dq; //释放总线
0304 BF98 cbi 0x17,7
0306 .dbline 50
0306 ; if(stu_dq)
0306 B79B sbis 0x16,7
0308 01C0 rjmp L73
030A X15:
030A .dbline 51
030A ; retVal|=0x80;
030A 4068 ori R20,128
030C L73:
030C .dbline 52
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -