📄 ds18b20.lis
字号:
01BC D8DF rcall _delayms
01BE .dbline 71
01BE ; PORTC=0B00000101;
01BE 85E0 ldi R24,5
01C0 85BB out 0x15,R24
01C2 .dbline 72
01C2 ; PORTC=0B00000100;
01C2 84E0 ldi R24,4
01C4 85BB out 0x15,R24
01C6 .dbline -2
01C6 L21:
01C6 00D0 rcall pop_gset1
01C8 .dbline 0 ; func end
01C8 0895 ret
01CA .dbsym r WDLCM 20 c
01CA .dbend
01CA .dbfunc e WriteCommandLCM _WriteCommandLCM fV
01CA ; BuysC -> R22
01CA ; WCLCM -> R20
.even
01CA _WriteCommandLCM::
01CA 00D0 rcall push_gset2
01CC 622F mov R22,R18
01CE 402F mov R20,R16
01D0 .dbline -1
01D0 .dbline 78
01D0 ; }
01D0 ;
01D0 ; //写指令
01D0 ; void WriteCommandLCM(unsigned char WCLCM,unsigned char BuysC) //BuysC为0时忽略忙检测
01D0 ;
01D0 ; {
01D0 .dbline 79
01D0 ; if (BuysC)
01D0 6623 tst R22
01D2 01F0 breq L23
01D4 .dbline 80
01D4 ; ;//ReadStatusLCM(); //根据需要检测忙
01D4 L23:
01D4 .dbline 81
01D4 ; LCM_Data = WCLCM;
01D4 48BB out 0x18,R20
01D6 .dbline 82
01D6 ; delayms(1);
01D6 01E0 ldi R16,1
01D8 10E0 ldi R17,0
01DA C9DF rcall _delayms
01DC .dbline 83
01DC ; PORTC=0B00000001;
01DC 81E0 ldi R24,1
01DE 85BB out 0x15,R24
01E0 .dbline 84
01E0 ; delayms(1);
01E0 01E0 ldi R16,1
01E2 10E0 ldi R17,0
01E4 C4DF rcall _delayms
01E6 .dbline 85
01E6 ; PORTC=0B00000000;
01E6 2224 clr R2
01E8 25BA out 0x15,R2
01EA .dbline -2
01EA L22:
01EA 00D0 rcall pop_gset2
01EC .dbline 0 ; func end
01EC 0895 ret
01EE .dbsym r BuysC 22 c
01EE .dbsym r WCLCM 20 c
01EE .dbend
01EE .dbfunc e ReadDataLCM _ReadDataLCM fc
.even
01EE _ReadDataLCM::
01EE .dbline -1
01EE .dbline 90
01EE ; }
01EE ;
01EE ; //读数据
01EE ; unsigned char ReadDataLCM(void)
01EE ; {
01EE .dbline 91
01EE ; PORTC=0X00000111;
01EE 81E1 ldi R24,273
01F0 91E0 ldi R25,1
01F2 85BB out 0x15,R24
01F4 .dbline 92
01F4 ; return(LCM_Data);
01F4 08B3 in R16,0x18
01F6 .dbline -2
01F6 L25:
01F6 .dbline 0 ; func end
01F6 0895 ret
01F8 .dbend
01F8 .dbfunc e LCMInit _LCMInit fV
.even
01F8 _LCMInit::
01F8 .dbline -1
01F8 .dbline 99
01F8 ; }
01F8 ;
01F8 ; //读状态
01F8 ;
01F8 ;
01F8 ; void LCMInit(void) //LCM初始化
01F8 ; {
01F8 .dbline 108
01F8 ; /* LCM_Data = 0;
01F8 ; WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
01F8 ; delayms(5);
01F8 ; WriteCommandLCM(0x38,0);
01F8 ; delayms(5);
01F8 ; WriteCommandLCM(0x38,0);
01F8 ; delayms(5);
01F8 ; */
01F8 ; WriteCommandLCM(0x38,0); //显示模式设置,开始要求每次检测忙信号
01F8 2227 clr R18
01FA 08E3 ldi R16,56
01FC E6DF rcall _WriteCommandLCM
01FE .dbline 110
01FE ; //WriteCommandLCM(0x08,0); //关闭显示
01FE ; WriteCommandLCM(0x01,0); //显示清屏
01FE 2227 clr R18
0200 01E0 ldi R16,1
0202 E3DF rcall _WriteCommandLCM
0204 .dbline 111
0204 ; WriteCommandLCM(0x06,0); // 显示光标移动设置
0204 2227 clr R18
0206 06E0 ldi R16,6
0208 E0DF rcall _WriteCommandLCM
020A .dbline 112
020A ; WriteCommandLCM(0x0c,0); // 显示开及光标设置
020A 2227 clr R18
020C 0CE0 ldi R16,12
020E DDDF rcall _WriteCommandLCM
0210 .dbline -2
0210 L26:
0210 .dbline 0 ; func end
0210 0895 ret
0212 .dbend
0212 .dbfunc e DisplayOneChar _DisplayOneChar fV
0212 ; DData -> y+4
0212 ; Y -> R22
0212 ; X -> R20
.even
0212 _DisplayOneChar::
0212 00D0 rcall push_gset2
0214 622F mov R22,R18
0216 402F mov R20,R16
0218 .dbline -1
0218 .dbline 120
0218 ; }
0218 ;
0218 ; /*****************************************************************************/
0218 ;
0218 ;
0218 ; //按指定位置显示一个字符
0218 ; void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
0218 ; {
0218 .dbline 121
0218 ; Y &= 0x1;
0218 6170 andi R22,1
021A .dbline 122
021A ; X &= 0xF; //限制X不能大于15,Y不能大于1
021A 4F70 andi R20,15
021C .dbline 123
021C ; if (Y) X += 0x40; //当要显示第二行时地址码+0x40;
021C 6623 tst R22
021E 09F0 breq L28
0220 .dbline 123
0220 405C subi R20,192 ; addi 64
0222 L28:
0222 .dbline 124
0222 ; X += 0x80; // 算出指令码
0222 4058 subi R20,128 ; addi 128
0224 .dbline 125
0224 ; WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
0224 2227 clr R18
0226 042F mov R16,R20
0228 D0DF rcall _WriteCommandLCM
022A .dbline 126
022A ; WriteDataLCM(DData);
022A 0C81 ldd R16,y+4
022C C2DF rcall _WriteDataLCM
022E .dbline -2
022E L27:
022E 00D0 rcall pop_gset2
0230 .dbline 0 ; func end
0230 0895 ret
0232 .dbsym l DData 4 c
0232 .dbsym r Y 22 c
0232 .dbsym r X 20 c
0232 .dbend
0232 .dbfunc e DisplayListChar _DisplayListChar fV
0232 ; ListLength -> R20
0232 ; DData -> R22,R23
0232 ; Y -> R10
0232 ; X -> R12
.even
0232 _DisplayListChar::
0232 00D0 rcall push_gset4
0234 A22E mov R10,R18
0236 C02E mov R12,R16
0238 2197 sbiw R28,1
023A 6985 ldd R22,y+9
023C 7A85 ldd R23,y+10
023E .dbline -1
023E .dbline 131
023E ; }
023E ;
023E ; //按指定位置显示一串字符
023E ; void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)
023E ; {
023E .dbline 134
023E ; unsigned char ListLength;
023E ;
023E ; ListLength = 0;
023E 4427 clr R20
0240 .dbline 135
0240 ; Y &= 0x1;
0240 8A2D mov R24,R10
0242 8170 andi R24,1
0244 A82E mov R10,R24
0246 .dbline 136
0246 ; X &= 0xF; //限制X不能大于15,Y不能大于1
0246 8C2D mov R24,R12
0248 8F70 andi R24,15
024A C82E mov R12,R24
024C 0EC0 rjmp L32
024E L31:
024E .dbline 138
024E ; while (DData[ListLength]!= '$') //若到达字串尾则退出
024E ; {
024E .dbline 139
024E ; if (X <= 0xF) //X坐标应小于0xF
024E 8FE0 ldi R24,15
0250 8C15 cp R24,R12
0252 58F0 brlo L34
0254 .dbline 140
0254 ; {
0254 .dbline 141
0254 ; DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
0254 E42F mov R30,R20
0256 FF27 clr R31
0258 E60F add R30,R22
025A F71F adc R31,R23
025C 2080 ldd R2,z+0
025E 2882 std y+0,R2
0260 2A2D mov R18,R10
0262 0C2D mov R16,R12
0264 D6DF rcall _DisplayOneChar
0266 .dbline 142
0266 ; ListLength++;
0266 4395 inc R20
0268 .dbline 143
0268 ; X++;
0268 C394 inc R12
026A .dbline 144
026A ; }
026A L34:
026A .dbline 145
026A L32:
026A .dbline 137
026A E42F mov R30,R20
026C FF27 clr R31
026E E60F add R30,R22
0270 F71F adc R31,R23
0272 8081 ldd R24,z+0
0274 8432 cpi R24,36
0276 59F7 brne L31
0278 .dbline -2
0278 L30:
0278 2196 adiw R28,1
027A 00D0 rcall pop_gset4
027C .dbline 0 ; func end
027C 0895 ret
027E .dbsym r ListLength 20 c
027E .dbsym r DData 22 pc
027E .dbsym r Y 10 c
027E .dbsym r X 12 c
027E .dbend
027E .dbfunc e Writr0 _Writr0 fV
.even
027E _Writr0::
027E .dbline -1
027E .dbline 155
027E ; }
027E ; }
027E ;
027E ; /**********************************************************/
027E ;
027E ;
027E ; /***************************************************************
027E ; * 功能:主机向总线写0 *
027E ; ***************************************************************/
027E ; void Writr0(void)
027E ; {
027E .dbline 156
027E ; Set_DQ1;
027E A39A sbi 0x14,3
0280 .dbline 156
0280 AB9A sbi 0x15,3
0282 .dbline 156
0282 .dbline 157
0282 ; Set_DQ0;
0282 A39A sbi 0x14,3
0284 .dbline 157
0284 85B3 in R24,0x15
0286 877F andi R24,247
0288 85BB out 0x15,R24
028A .dbline 157
028A .dbline 158
028A ; delayus(700);
028A 0CEB ldi R16,700
028C 12E0 ldi R17,2
028E 81DF rcall _delayus
0290 .dbline 160
0290 ;
0290 ; Set_DQ1;
0290 A39A sbi 0x14,3
0292 .dbline 160
0292 AB9A sbi 0x15,3
0294 .dbline 160
0294 .dbline 161
0294 ; asm("nop");
0294 0000 nop
0296 .dbline 162
0296 ; delayus(15);
0296 0FE0 ldi R16,15
0298 10E0 ldi R17,0
029A 7BDF rcall _delayus
029C .dbline -2
029C L36:
029C .dbline 0 ; func end
029C 0895 ret
029E .dbend
029E .dbfunc e Writr1 _Writr1 fV
.even
029E _Writr1::
029E .dbline -1
029E .dbline 169
029E ; }
029E ;
029E ; /***************************************************************
029E ; * 功能:主机向总线写1 *
029E ; ***************************************************************/
029E ; void Writr1(void)
029E ; {
029E .dbline 170
029E ; Set_DQ1;
029E A39A sbi 0x14,3
02A0 .dbline 170
02A0 AB9A sbi 0x15,3
02A2 .dbline 170
02A2 .dbline 171
02A2 ; Set_DQ0;
02A2 A39A sbi 0x14,3
02A4 .dbline 171
02A4 85B3 in R24,0x15
02A6 877F andi R24,247
02A8 85BB out 0x15,R24
02AA .dbline 171
02AA .dbline 172
02AA ; asm("nop");
02AA 0000 nop
02AC .dbline 173
02AC ; asm("nop");
02AC 0000 nop
02AE .dbline 174
02AE ; asm("nop");
02AE 0000 nop
02B0 .dbline 175
02B0 ; asm("nop");
02B0 0000 nop
02B2 .dbline 176
02B2 ; asm("nop");
02B2 0000 nop
02B4 .dbline 177
02B4 ; asm("nop");
02B4 0000 nop
02B6 .dbline 178
02B6 ; asm("nop");
02B6 0000 nop
02B8 .dbline 179
02B8 ; asm("nop");
02B8 0000 nop
02BA .dbline 180
02BA ; asm("nop");
02BA 0000 nop
02BC .dbline 181
02BC ; asm("nop");
02BC 0000 nop
02BE .dbline 182
02BE ; asm("nop");
02BE 0000 nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -