📄 display_dhtxx.s
字号:
rjmp L71
lds R2,_U8FLAG
clr R3
mov R24,R2
subi R24,255 ; addi 1
sts _U8FLAG,R24
tst R2
brne L68
L71:
.dbline 245
; //超时则跳出for循环
; if(U8FLAG==1)break;
lds R24,_U8FLAG
cpi R24,1
brne L72
.dbline 245
rjmp L58
L72:
.dbline 250
lds R2,_U8comdata
lsl R2
sts _U8comdata,R2
.dbline 251
lds R2,_U8temp
lds R3,_U8comdata
or R3,R2
sts _U8comdata,R3
.dbline 252
L57:
.dbline 227
inc R20
L59:
.dbline 227
cpi R20,8
brsh X8
rjmp L56
X8:
L58:
.dbline -2
L55:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e RH _RH fV
.even
_RH::
.dbline -1
.dbline 270
; //判断数据位是0还是1
;
; // 如果高电平高过预定0高电平值则数据位为 1
;
; U8comdata<<=1;
; U8comdata|=U8temp; //0
; }//rof
;
; }
;
; //--------------------------------
; //-----湿度读取子程序 ------------
; //--------------------------------
; //----以下变量均为全局变量--------
; //----温度高8位== U8T_data_H------
; //----温度低8位== U8T_data_L------
; //----湿度高8位== U8RH_data_H-----
; //----湿度低8位== U8RH_data_L-----
; //----校验 8位 == U8checkdata-----
; //----调用相关子程序如下----------
; //---- Delay();, Delay_10us();,COM();
; //--------------------------------
;
; void RH(void)
; {
.dbline 274
;
; //主机拉低18ms
; //P2_0=0;
; COM_OUT;
sbi 0x14,5
.dbline 275
; COM_CLR;
cbi 0x15,5
.dbline 277
; //DelaymS(18);
; DelaymS(5);
ldi R16,5
ldi R17,0
rcall _DelaymS
.dbline 278
; Display(); //总延时22ms
rcall _Display
.dbline 279
; DelaymS(5);
ldi R16,5
ldi R17,0
rcall _DelaymS
.dbline 280
; Display();
rcall _Display
.dbline 282
; //P2_0=1;
; COM_IN;
cbi 0x14,5
.dbline 283
; COM_SET;
sbi 0x15,5
.dbline 286
;
; //总线由上拉电阻拉高 主机延时20us
; Delay_10us();
rcall _Delay_10us
.dbline 287
; Delay_10us();
rcall _Delay_10us
.dbline 288
; Delay_10us();
rcall _Delay_10us
.dbline 289
; Delay_10us();
rcall _Delay_10us
.dbline 295
; //主机设为输入 判断从机响应信号
; //P2_0=1;
;
; //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
; // if(!P2_0) //T !
; if(COM_R)U8FLAG=1;
sbis 0x13,5
rjmp L78
.dbline 295
ldi R24,1
sts _U8FLAG,R24
rjmp L78
L77:
.dbline 297
; while(!(COM_R))
; {
.dbline 298
; U8FLAG=2;
ldi R24,2
sts _U8FLAG,R24
L80:
.dbline 301
L81:
.dbline 301
; //判断从机是否发出 80us 的低电平响应信号是否结束
; //while((!P2_0)&&U8FLAG++);
; while((!(COM_R))&&U8FLAG++);
sbic 0x13,5
rjmp L83
lds R2,_U8FLAG
clr R3
mov R24,R2
subi R24,255 ; addi 1
sts _U8FLAG,R24
tst R2
brne L80
L83:
.dbline 302
; if(U8FLAG==1)break;
lds R24,_U8FLAG
cpi R24,1
brne L84
.dbline 302
rjmp L79
L84:
.dbline 303
; U8FLAG=2;
ldi R24,2
sts _U8FLAG,R24
L86:
.dbline 306
L87:
.dbline 306
; //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
; //while((P2_0)&&U8FLAG++);
; while((COM_R)&&U8FLAG++);
sbis 0x13,5
rjmp L89
lds R2,_U8FLAG
clr R3
mov R24,R2
subi R24,255 ; addi 1
sts _U8FLAG,R24
tst R2
brne L86
L89:
.dbline 307
; if(U8FLAG==1)break;
lds R24,_U8FLAG
cpi R24,1
brne L90
.dbline 307
rjmp L79
L90:
.dbline 309
; //数据接收状态
; COM();
rcall _COM
.dbline 310
; if(U8FLAG==1)break;
lds R24,_U8FLAG
cpi R24,1
brne L92
.dbline 310
rjmp L79
L92:
.dbline 311
; U8T_data_H_temp=U8comdata;
lds R2,_U8comdata
sts _U8T_data_H_temp,R2
.dbline 312
; COM();
rcall _COM
.dbline 313
; if(U8FLAG==1)break;
lds R24,_U8FLAG
cpi R24,1
brne L94
.dbline 313
rjmp L79
L94:
.dbline 314
; U8T_data_L_temp=U8comdata;
lds R2,_U8comdata
sts _U8T_data_L_temp,R2
.dbline 315
; COM();
rcall _COM
.dbline 316
; if(U8FLAG==1)break;
lds R24,_U8FLAG
cpi R24,1
brne L96
.dbline 316
rjmp L79
L96:
.dbline 317
; U8RH_data_H_temp=U8comdata;
lds R2,_U8comdata
sts _U8RH_data_H_temp,R2
.dbline 318
; COM();
rcall _COM
.dbline 319
; if(U8FLAG==1)break;
lds R24,_U8FLAG
cpi R24,1
brne L98
.dbline 319
rjmp L79
L98:
.dbline 320
; U8RH_data_L_temp=U8comdata;
lds R2,_U8comdata
sts _U8RH_data_L_temp,R2
.dbline 321
; COM();
rcall _COM
.dbline 322
; if(U8FLAG==1)break;
lds R24,_U8FLAG
cpi R24,1
brne L100
.dbline 322
rjmp L79
L100:
.dbline 323
lds R2,_U8comdata
sts _U8checkdata_temp,R2
.dbline 324
rjmp L79
L78:
.dbline 296
sbis 0x13,5
rjmp L77
L79:
.dbline 327
; U8checkdata_temp=U8comdata;
; break;
; }//while
; //P2_0=1;
; COM_IN;
cbi 0x14,5
.dbline 328
; COM_SET;
sbi 0x15,5
.dbline 331
; //数据校验
;
; U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
lds R2,_U8T_data_L_temp
lds R3,_U8T_data_H_temp
add R3,R2
lds R2,_U8RH_data_H_temp
add R3,R2
lds R2,_U8RH_data_L_temp
add R3,R2
sts _U8temp,R3
.dbline 332
; if(U8temp==U8checkdata_temp)
lds R2,_U8checkdata_temp
cp R3,R2
brne L102
.dbline 333
; {
.dbline 334
; U8T_data_H=U8T_data_H_temp;
lds R2,_U8T_data_H_temp
sts _U8T_data_H,R2
.dbline 335
; U8T_data_L=U8T_data_L_temp;
lds R2,_U8T_data_L_temp
sts _U8T_data_L,R2
.dbline 336
; U8RH_data_H=U8RH_data_H_temp;
lds R2,_U8RH_data_H_temp
sts _U8RH_data_H,R2
.dbline 337
; U8RH_data_L=U8RH_data_L_temp;
lds R2,_U8RH_data_L_temp
sts _U8RH_data_L,R2
.dbline 338
; U8checkdata=U8checkdata_temp;
lds R2,_U8checkdata_temp
sts _U8checkdata,R2
.dbline 339
; }//fi
L102:
.dbline 342
;
;
; COM_IN;
cbi 0x14,5
.dbline 343
; COM_SET;
sbi 0x15,5
.dbline -2
L74:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Display_data _Display_data fV
.even
_Display_data::
.dbline -1
.dbline 347
;
; }
; void Display_data(void)
; {
.dbline 348
; if(U8FLAG==1)
lds R24,_U8FLAG
cpi R24,1
brne L105
.dbline 349
; {
.dbline 350
; PLAY[0] = 12;
ldi R24,12
sts _PLAY,R24
.dbline 351
; PLAY[1] = 13;
ldi R24,13
sts _PLAY+1,R24
.dbline 352
; PLAY[2] = 13;
sts _PLAY+2,R24
.dbline 354
;
; PLAY[3] = 12;
ldi R24,12
sts _PLAY+3,R24
.dbline 355
; PLAY[4] = 13;
ldi R24,13
sts _PLAY+4,R24
.dbline 356
; PLAY[5] = 13;
sts _PLAY+5,R24
.dbline 357
; }//fi
rjmp L106
L105:
.dbline 359
; else
; {
.dbline 360
; ReceiveHighByte=U8T_data_H;
lds R2,_U8T_data_H
clr R3
sts _ReceiveHighByte+1,R3
sts _ReceiveHighByte,R2
.dbline 361
; ReceiveHighByte<<=8;
lds R2,_ReceiveHighByte
lds R3,_ReceiveHighByte+1
mov R3,R2
clr R2
sts _ReceiveHighByte+1,R3
sts _ReceiveHighByte,R2
.dbline 362
; ReceiveHighByte|=U8T_data_L;
lds R2,_U8T_data_L
clr R3
lds R4,_ReceiveHighByte
lds R5,_ReceiveHighByte+1
or R4,R2
or R5,R3
sts _ReceiveHighByte+1,R5
sts _ReceiveHighByte,R4
.dbline 363
; ReceiveLowByte=U8RH_data_H;
lds R2,_U8RH_data_H
clr R3
sts _ReceiveLowByte+1,R3
sts _ReceiveLowByte,R2
.dbline 364
; ReceiveLowByte<<=8;
lds R2,_ReceiveLowByte
lds R3,_ReceiveLowByte+1
mov R3,R2
clr R2
sts _ReceiveLowByte+1,R3
sts _ReceiveLowByte,R2
.dbline 365
; ReceiveLowByte|=U8RH_data_L;
lds R2,_U8RH_data_L
clr R3
lds R4,_ReceiveLowByte
lds R5,_ReceiveLowByte+1
or R4,R2
or R5,R3
sts _ReceiveLowByte+1,R5
sts _ReceiveLowByte,R4
.dbline 368
;
;
; if(ReceiveHighByte&0x8000)
lds R2,_ReceiveHighByte
lds R3,_ReceiveHighByte+1
sbrs R3,7
rjmp L112
.dbline 369
; {
.dbline 370
; ReceiveHighByte&=0x7fff; //清负数标志
movw R24,R2
andi R25,127
sts _ReceiveHighByte+1,R25
sts _ReceiveHighByte,R24
.dbline 371
; if(ReceiveHighByte>=199)
cpi R24,199
ldi R30,0
cpc R25,R30
brlo L114
.dbline 372
; {
.dbline 373
; PLAY[3] = 11;
ldi R24,11
sts _PLAY+3,R24
.dbline 374
; PLAY[4] = 9;
ldi R24,9
sts _PLAY+4,R24
.dbline 375
; PLAY[5] = 9;
sts _PLAY+5,R24
.dbline 376
; }//fi
rjmp L113
L114:
.dbline 377
; else if(ReceiveHighByte>=100)
lds R24,_ReceiveHighByte
lds R25,_ReceiveHighByte+1
cpi R24,100
ldi R30,0
cpc R25,R30
brlo L119
.dbline 378
; {
.dbline 379
; PLAY[3] = 11;
ldi R24,11
sts _PLAY+3,R24
.dbline 380
; PLAY[4] = ReceiveHighByte%100/10;
ldi R18,100
ldi R19,0
lds R16,_ReceiveHighByte
lds R17,_ReceiveHighByte+1
rcall mod16u
ldi R18,10
ldi R19,0
rcall div16u
sts _PLAY+4,R16
.dbline 381
; PLAY[5] = ReceiveHighByte%10;
ldi R18,10
ldi R19,0
lds R16,_ReceiveHighByte
lds R17,_ReceiveHighByte+1
rcall mod16u
sts _PLAY+5,R16
.dbline 382
; } //esle if
rjmp L113
L119:
.dbline 384
; else
; {
.dbline 385
; PLAY[3] = 10;
ldi R24,10
sts _PLAY+3,R24
.dbline 386
; PLAY[4] = ReceiveHighByte%100/10;
ldi R18,100
ldi R19,0
lds R16,_ReceiveHighByte
lds R17,_ReceiveHighByte+1
rcall mod16u
ldi R18,10
ldi R19,0
rcall div16u
sts _PLAY+4,R16
.dbline 387
; PLAY[5] = ReceiveHighByte%10;
ldi R18,10
ldi R19,0
lds R16,_ReceiveHighByte
lds R17,_ReceiveHighByte+1
rcall mod16u
sts _PLAY+5,R16
.dbline 388
; } //esle
.dbline 390
;
; } //fi
rjmp L113
L112:
.dbline 392
; else
; {
.dbline 393
; PLAY[3] = ReceiveHighByte/100;
ldi R18,100
ldi R19,0
lds R16,_ReceiveHighByte
lds R17,_ReceiveHighByte+1
rcall div16u
sts _PLAY+3,R16
.dbline 394
; PLAY[4] = ReceiveHighByte%100/10;
ldi R18,100
ldi R19,0
lds R16,_ReceiveHighByte
lds R17,_ReceiveHighByte+1
rcall mod16u
ldi R18,10
ldi R19,0
rcall div16u
sts _PLAY+4,R16
.dbline 395
; PLAY[5] = ReceiveHighByte%10;
ldi R18,10
ldi R19,0
lds R16,_ReceiveHighByte
lds R17,_ReceiveHighByte+1
rcall mod16u
sts _PLAY+5,R16
.dbline 396
; if(ReceiveHighByte<100)
lds R24,_ReceiveHighByte
lds R25,_ReceiveHighByte+1
cpi R24,100
ldi R30,0
cpc R25,R30
brsh L130
.dbline 397
; {
.dbline 398
; PLAY[3]=14;
ldi R24,14
sts _PLAY+3,R24
.dbline 399
; }
L130:
.dbline 400
; } //esle
L113:
.dbline 402
;
; PLAY[0] = ReceiveLowByte/100; //湿度
ldi R18,100
ldi R19,0
lds R16,_ReceiveLowByte
lds R17,_ReceiveLowByte+1
rcall div16u
sts _PLAY,R16
.dbline 403
; PLAY[1] = ReceiveLowByte%100/10;
ldi R18,100
ldi R19,0
lds R16,_ReceiveLowByte
lds R17,_ReceiveLowByte+1
rcall mod16u
ldi R18,10
ldi R19,0
rcall div16u
sts _PLAY+1,R16
.dbline 404
; PLAY[2] = ReceiveLowByte%10;
ldi R18,10
ldi R19,0
lds R16,_ReceiveLowByte
lds R17,_ReceiveLowByte+1
rcall mod16u
sts _PLAY+2,R16
.dbline 405
; if(ReceiveLowByte<100)
lds R24,_ReceiveLowByte
lds R25,_ReceiveLowByte+1
cpi R24,100
ldi R30,0
cpc R25,R30
brsh L135
.dbline 406
; {
.dbline 407
; PLAY[0]=14;
ldi R24,14
sts _PLAY,R24
.dbline 408
; }
L135:
.dbline 410
L106:
.dbline -2
L104:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 429
;
; }//esle
;
; }
;
; /**************************************************************************
;
;
;
; 主函数
;
;
;
;
; **************************************************************************/
;
;
;
;
; void main(void)
; {
.dbline 431
;
; init_devices() ;
rcall _init_devices
.dbline 432
; COM_IN;
cbi 0x14,5
.dbline 433
; COM_SET;
sbi 0x15,5
rjmp L139
L138:
.dbline 435
; while(1)
; {
.dbline 437
;
; RH();
rcall _RH
.dbline 438
; Display_data();
rcall _Display_data
.dbline 439
; Display();
rcall _Display
.dbline 442
; //延时2S
;
; for(U8temp=0;U8temp<200;U8temp++)
clr R2
sts _U8temp,R2
rjmp L144
L141:
.dbline 443
.dbline 444
ldi R16,5
ldi R17,0
rcall _DelaymS
.dbline 445
rcall _Display
.dbline 446
L142:
.dbline 442
lds R24,_U8temp
subi R24,255 ; addi 1
sts _U8temp,R24
L144:
.dbline 442
lds R24,_U8temp
cpi R24,200
brlo L141
.dbline 448
L139:
.dbline 434
rjmp L138
X9:
.dbline -2
L137:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\Owner\桌面\产品程序文件\DHT21\新显示程序\Display_DHTXX.c
_ReceiveLowByte::
.blkb 2
.dbsym e ReceiveLowByte _ReceiveLowByte i
_ReceiveHighByte::
.blkb 2
.dbsym e ReceiveHighByte _ReceiveHighByte i
_U8comdata::
.blkb 1
.dbsym e U8comdata _U8comdata c
_U8checkdata_temp::
.blkb 1
.dbsym e U8checkdata_temp _U8checkdata_temp c
_U8RH_data_L_temp::
.blkb 1
.dbsym e U8RH_data_L_temp _U8RH_data_L_temp c
_U8RH_data_H_temp::
.blkb 1
.dbsym e U8RH_data_H_temp _U8RH_data_H_temp c
_U8T_data_L_temp::
.blkb 1
.dbsym e U8T_data_L_temp _U8T_data_L_temp c
_U8T_data_H_temp::
.blkb 1
.dbsym e U8T_data_H_temp _U8T_data_H_temp c
_U8checkdata::
.blkb 1
.dbsym e U8checkdata _U8checkdata c
_U8RH_data_L::
.blkb 1
.dbsym e U8RH_data_L _U8RH_data_L c
_U8RH_data_H::
.blkb 1
.dbsym e U8RH_data_H _U8RH_data_H c
_U8T_data_L::
.blkb 1
.dbsym e U8T_data_L _U8T_data_L c
_U8T_data_H::
.blkb 1
.dbsym e U8T_data_H _U8T_data_H c
_U8temp::
.blkb 1
.dbsym e U8temp _U8temp c
_U8count::
.blkb 1
.dbsym e U8count _U8count c
_k::
.blkb 1
.dbsym e k _k c
_U8FLAG::
.blkb 1
.dbsym e U8FLAG _U8FLAG c
_i::
.blkb 1
.dbsym e i _i c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -