📄 main.lis
字号:
016A BC2C mov R11,R12
016C .dbline 274
016C ; return(x);
016C 8501 movw R16,R10
016E .dbline -2
016E L40:
016E .dbline 0 ; func end
016E 0C940000 xjmp pop_xgset003C
0172 .dbsym r x 10 i
0172 .dbsym r tempH 12 c
0172 .dbsym r tempL 10 c
0172 .dbend
0172 .dbfunc e USART_Init _USART_Init fV
0172 ; tmp -> R10,R11
0172 ; baud -> R10,R11
.even
0172 _USART_Init::
0172 0E940000 xcall push_xgsetF00C
0176 5801 movw R10,R16
0178 .dbline -1
0178 .dbline 282
0178 ; }
0178 ;
0178 ; /*******************************************************************************
0178 ; 串口操作相关函数
0178 ; *******************************************************************************/
0178 ;
0178 ; void USART_Init( unsigned int baud )
0178 ; {
0178 .dbline 285
0178 ; unsigned int tmp;
0178 ; /* 设置波特率*/
0178 ; tmp= F_CPU/baud/16-1;
0178 1501 movw R2,R10
017A 4424 clr R4
017C 5524 clr R5
017E 40E0 ldi R20,0
0180 50E8 ldi R21,128
0182 60E7 ldi R22,112
0184 70E0 ldi R23,0
0186 5A92 st -y,R5
0188 4A92 st -y,R4
018A 3A92 st -y,R3
018C 2A92 st -y,R2
018E 8A01 movw R16,R20
0190 9B01 movw R18,R22
0192 0E940000 xcall div32s
0196 40E1 ldi R20,16
0198 50E0 ldi R21,0
019A 60E0 ldi R22,0
019C 70E0 ldi R23,0
019E 7A93 st -y,R23
01A0 6A93 st -y,R22
01A2 5A93 st -y,R21
01A4 4A93 st -y,R20
01A6 0E940000 xcall div32s
01AA 1801 movw R2,R16
01AC 2901 movw R4,R18
01AE 41E0 ldi R20,1
01B0 50E0 ldi R21,0
01B2 60E0 ldi R22,0
01B4 70E0 ldi R23,0
01B6 241A sub R2,R20
01B8 350A sbc R3,R21
01BA 460A sbc R4,R22
01BC 570A sbc R5,R23
01BE 5101 movw R10,R2
01C0 .dbline 286
01C0 ; UBRRH = (unsigned char)(tmp>>8);
01C0 232C mov R2,R3
01C2 3324 clr R3
01C4 20BC out 0x20,R2
01C6 .dbline 287
01C6 ; UBRRL = (unsigned char)tmp;
01C6 A9B8 out 0x9,R10
01C8 .dbline 289
01C8 ; /* 接收器与发送器使能*/
01C8 ; UCSRB = (1<<RXEN)|(1<<TXEN);
01C8 88E1 ldi R24,24
01CA 8AB9 out 0xa,R24
01CC .dbline 291
01CC ; /* 设置帧格式: 8 个数据位, 2 个停止位*/
01CC ; UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ0)|(1<<UCSZ1);
01CC 8EE8 ldi R24,142
01CE 80BD out 0x20,R24
01D0 .dbline -2
01D0 L41:
01D0 .dbline 0 ; func end
01D0 0C940000 xjmp pop_xgsetF00C
01D4 .dbsym r tmp 10 i
01D4 .dbsym r baud 10 i
01D4 .dbend
01D4 .dbfunc e USART_Transmit _USART_Transmit fV
01D4 ; data -> R16
.even
01D4 _USART_Transmit::
01D4 .dbline -1
01D4 .dbline 296
01D4 ; }
01D4 ;
01D4 ; // 数据发送【发送5 到8 位数据位的帧】
01D4 ; void USART_Transmit( unsigned char data )
01D4 ; {
01D4 L43:
01D4 .dbline 299
01D4 ; /* 等待发送缓冲器为空 */
01D4 ; while ( !( UCSRA & (1<<UDRE)) )
01D4 ; ;
01D4 L44:
01D4 .dbline 298
01D4 5D9B sbis 0xb,5
01D6 FECF rjmp L43
01D8 X11:
01D8 .dbline 301
01D8 ; /* 将数据放入缓冲器,发送数据 */
01D8 ; UDR = data;
01D8 0CB9 out 0xc,R16
01DA .dbline -2
01DA L42:
01DA .dbline 0 ; func end
01DA 0895 ret
01DC .dbsym r data 16 c
01DC .dbend
01DC .dbfunc e read_rom _read_rom fc
01DC ; end_flag -> R10
01DC ; num2 -> y+10
01DC ; chr -> R12
01DC ; flag -> y+0
01DC ; flag_count -> R20
01DC ; num -> y+20
01DC ; i -> R22
01DC ; retVal -> y+19
01DC ; temp -> y+18
.even
01DC _read_rom::
01DC 0E940000 xcall push_xgsetF0FC
01E0 6597 sbiw R28,21
01E2 .dbline -1
01E2 .dbline 306
01E2 ; }
01E2 ;
01E2 ;
01E2 ;
01E2 ; unsigned char read_rom(void){
01E2 .dbline 308
01E2 ; unsigned char i;
01E2 ; unsigned char num=0;
01E2 0024 clr R0
01E4 0C8A std y+20,R0
01E6 .dbline 310
01E6 ; unsigned char num2[8];
01E6 ; unsigned char retVal=0;
01E6 0B8A std y+19,R0
01E8 .dbline 311
01E8 ; unsigned char temp=0;
01E8 0A8A std y+18,R0
01EA .dbline 314
01EA ; unsigned char chr;
01EA ; unsigned char flag[10];
01EA ; unsigned char flag_count=0;
01EA 4427 clr R20
01EC .dbline 315
01EC ; unsigned char end_flag=0;
01EC AA24 clr R10
01EE .dbline 316
01EE ; B20_num=0;
01EE 2224 clr R2
01F0 20924600 sts _B20_num,R2
01F4 L47:
01F4 .dbline 318
01F4 ;
01F4 ; do{
01F4 .dbline 319
01F4 ; flag_count=0;
01F4 4427 clr R20
01F6 .dbline 320
01F6 ; end_flag=0;
01F6 AA24 clr R10
01F8 .dbline 321
01F8 ; i=resetDS18B20();
01F8 22DF xcall _resetDS18B20
01FA 602F mov R22,R16
01FC .dbline 322
01FC ; writeuint8DS18B20(0xf0);
01FC 00EF ldi R16,240
01FE 90DF xcall _writeuint8DS18B20
0200 .dbline 323
0200 ; RLS_DS18B20; //释放总线
0200 D098 cbi 0x1a,0
0202 .dbline 324
0202 ; for(chr=0;chr<8;chr++){
0202 CC24 clr R12
0204 4DC0 xjmp L53
0206 L50:
0206 .dbline 324
0206 .dbline 325
0206 ; num=0;
0206 0024 clr R0
0208 0C8A std y+20,R0
020A .dbline 326
020A ; for(i=0;i<8;i++){
020A 6627 clr R22
020C 3DC0 xjmp L57
020E L54:
020E .dbline 326
020E .dbline 327
020E ; num=num>>1;
020E 0C88 ldd R0,y+20
0210 0694 lsr R0
0212 0C8A std y+20,R0
0214 .dbline 328
0214 ; retVal=0;
0214 0024 clr R0
0216 0B8A std y+19,R0
0218 .dbline 329
0218 ; temp=0;
0218 0A8A std y+18,R0
021A .dbline 331
021A ;
021A ; temp=read_a_bit();
021A 4DDF xcall _read_a_bit
021C 0A8B std y+18,R16
021E .dbline 332
021E ; if(temp)
021E 002E mov R0,R16
0220 0023 tst R16
0222 19F0 breq L58
0224 X12:
0224 .dbline 333
0224 ; retVal|=0x01;
0224 8B89 ldd R24,y+19
0226 8160 ori R24,1
0228 8B8B std y+19,R24
022A L58:
022A .dbline 334
022A ; retVal<<=1;
022A 0B88 ldd R0,y+19
022C 000C lsl R0
022E 0B8A std y+19,R0
0230 .dbline 335
0230 ; temp=0;
0230 0024 clr R0
0232 0A8A std y+18,R0
0234 .dbline 337
0234 ;
0234 ; temp=read_a_bit();
0234 40DF xcall _read_a_bit
0236 E02E mov R14,R16
0238 EA8A std y+18,R14
023A .dbline 338
023A ; if(temp)
023A 0E2C mov R0,R14
023C 0023 tst R16
023E 19F0 breq L60
0240 X13:
0240 .dbline 339
0240 ; retVal|=0x01;
0240 8B89 ldd R24,y+19
0242 8160 ori R24,1
0244 8B8B std y+19,R24
0246 L60:
0246 .dbline 341
0246 ;
0246 ; if(retVal==bit_1){ //1
0246 8B89 ldd R24,y+19
0248 8230 cpi R24,2
024A 31F4 brne L62
024C X14:
024C .dbline 341
024C .dbline 342
024C ; write_a_bit(1);
024C 01E0 ldi R16,1
024E 1FDF xcall _write_a_bit
0250 .dbline 343
0250 ; num|=0x80;
0250 8C89 ldd R24,y+20
0252 8068 ori R24,128
0254 8C8B std y+20,R24
0256 .dbline 344
0256 ; }
0256 17C0 xjmp L63
0258 L62:
0258 .dbline 345
0258 ; else if(retVal==bit_0){ //0
0258 8B89 ldd R24,y+19
025A 8130 cpi R24,1
025C 19F4 brne L64
025E X15:
025E .dbline 345
025E .dbline 347
025E ;
025E ; write_a_bit(0);
025E 0027 clr R16
0260 16DF xcall _write_a_bit
0262 .dbline 348
0262 ; }else { //maybe o or 1
0262 11C0 xjmp L65
0264 L64:
0264 .dbline 348
0264 .dbline 349
0264 ; if(flag[flag_count]==0){
0264 CE01 movw R24,R28
0266 E42F mov R30,R20
0268 FF27 clr R31
026A E80F add R30,R24
026C F91F adc R31,R25
026E 2080 ldd R2,z+0
0270 2220 tst R2
0272 19F4 brne L66
0274 X16:
0274 .dbline 349
0274 .dbline 350
0274 ; write_a_bit(0);
0274 0027 clr R16
0276 0BDF xcall _write_a_bit
0278 .dbline 352
0278 ;
0278 ; }
0278 05C0 xjmp L67
027A L66:
027A .dbline 353
027A ; else{
027A .dbline 354
027A ; write_a_bit(0x01);
027A 01E0 ldi R16,1
027C 08DF xcall _write_a_bit
027E .dbline 355
027E ; num|=0x80;
027E 8C89 ldd R24,y+20
0280 8068 ori R24,128
0282 8C8B std y+20,R24
0284 .dbline 357
0284 ;
0284 ; }
0284 L67:
0284 .dbline 358
0284 ; flag_count++;
0284 4395 inc R20
0286 .dbline 360
0286 ;
0286 ; }
0286 L65:
0286 L63:
0286 .dbline 363
0286 ;
0286 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -