📄 12864串口显示.lst
字号:
(0007) #define ddrt DDRD
(0008) #define port PORTD
(0009) #define uchar unsigned char
(0010) #define uint unsigned int
(0011) #define D0 0x01 //18b20端口,PD.0
(0012) #define pin PIND
(0013) #define CL_DQ PORTD&=~(1<<PD0)
(0014) #define SET_DQ PORTD|=(1<<PD0)
(0015) #define SET_OUT DDRD|=(1<<PD0)
(0016) #define SET_IN DDRD&=~(1<<PD0)
(0017) #define IN_DQ PIND&(1<<PD0)
(0018) unsigned int temp=0;
(0019) unsigned char temp_data[2]={0};
(0020) unsigned char dis_buf_18b20[3]={0};
(0021) uchar temp_comp;
(0022) void write_1820(unsigned char x) ;
(0023) /*---------------------------------------------------------------------
(0024) 函数名称:void init_1820()
(0025) 函数功能: 18b20的复位
(0026) 参 数:
(0027) 返 回 值:
(0028) ---------------------------------------------------------------------*/
(0029) void init_1820(void)
(0030) {
(0031) SET_OUT; //设置端口输出
_init_1820:
01BC 9A88 SBI 0x11,0
(0032) SET_DQ; //输出一个脉冲
01BD 9A90 SBI 0x12,0
(0033) CL_DQ; //低电平保持480us以上
01BE 9890 CBI 0x12,0
(0034) delay_us(500); //延时480us以上
01BF EF04 LDI R16,0xF4
01C0 E011 LDI R17,1
01C1 DF49 RCALL _delay_us
(0035) SET_DQ; //没有输出一个脉冲
01C2 9A90 SBI 0x12,0
(0036) SET_IN; //设置端口输入,即释放总线,外接上拉电阻,端口被拉高
01C3 9888 CBI 0x11,0
(0037) delay_us(60); //延时15~60us
01C4 E30C LDI R16,0x3C
01C5 E010 LDI R17,0
01C6 DF44 RCALL _delay_us
(0038) while(IN_DQ); //等待应答,即等待低电平信号
01C7 9980 SBIC 0x10,0
01C8 CFFE RJMP 0x01C7
(0039) delay_us(80);
01C9 E500 LDI R16,0x50
01CA E010 LDI R17,0
01CB DF3F RCALL _delay_us
(0040) SET_OUT; //设置输出
01CC 9A88 SBI 0x11,0
(0041) SET_DQ; //输出高电平
01CD 9A90 SBI 0x12,0
(0042) delay_us(80); //60~240us
01CE E500 LDI R16,0x50
01CF E010 LDI R17,0
01D0 DF3A RCALL _delay_us
01D1 9508 RET
_write_1820:
m --> R20
x --> R22
01D2 D655 RCALL push_gset2
01D3 2F60 MOV R22,R16
(0043) }
(0044) /*---------------------------------------------------------------------
(0045) 函数名称:void write_1820(unsigned char x)
(0046) 函数功能: 写18B20温度
(0047) 参 数: x
(0048) 返 回 值:
(0049) ---------------------------------------------------------------------*/
(0050) void write_1820(unsigned char x) //下降沿写数据
(0051) {
(0052) unsigned char m;
(0053) //SET_DQ;
(0054) for(m=0;m<8;m++)
01D4 2744 CLR R20
01D5 C012 RJMP 0x01E8
(0055) {
(0056) CL_DQ; //写数据,从低位开始
01D6 9890 CBI 0x12,0
(0057) if(x&(1<<m)) //判断数据极性
01D7 E001 LDI R16,1
01D8 2F14 MOV R17,R20
01D9 D6AC RCALL lsl8
01DA 2E26 MOV R2,R22
01DB 2220 AND R2,R16
01DC F011 BEQ 0x01DF
(0058) SET_DQ;
01DD 9A90 SBI 0x12,0
01DE C001 RJMP 0x01E0
(0059) else
(0060) CL_DQ;
01DF 9890 CBI 0x12,0
(0061) delay_us(40); //延时15~60us
01E0 E208 LDI R16,0x28
01E1 E010 LDI R17,0
01E2 DF28 RCALL _delay_us
(0062) SET_DQ;
01E3 9A90 SBI 0x12,0
(0063) delay_us(1); //连续写两位数据的间隔要大于1us
01E4 E001 LDI R16,1
01E5 E010 LDI R17,0
01E6 DF24 RCALL _delay_us
01E7 9543 INC R20
01E8 3048 CPI R20,0x8
01E9 F360 BCS 0x01D6
(0064) }
(0065) SET_DQ; //结束写数据,置高总线
01EA 9A90 SBI 0x12,0
01EB D61D RCALL pop_gset2
01EC 9508 RET
_read_1820:
temp --> R20
k --> R22
n --> R10
01ED D63D RCALL push_gset3
(0066) }
(0067) /*---------------------------------------------------------------------
(0068) 函数名称:unsigned char read_1820(void)
(0069) 函数功能: 读取18B20温度
(0070) 参 数:
(0071) 返 回 值: count
(0072) ---------------------------------------------------------------------*/
(0073) unsigned char read_1820(void) //上升沿读数据
(0074) {
(0075) unsigned char temp=0,k,n;
01EE 2744 CLR R20
(0076) for(n=0;n<8;n++)
01EF 24AA CLR R10
01F0 C01D RJMP 0x020E
(0077) {
(0078) CL_DQ; //输出一个起始脉冲
01F1 9890 CBI 0x12,0
(0079) delay_us(1); //保持1us
01F2 E001 LDI R16,1
01F3 E010 LDI R17,0
01F4 DF16 RCALL _delay_us
(0080) SET_DQ;
01F5 9A90 SBI 0x12,0
(0081) SET_IN; //设端口为输入
01F6 9888 CBI 0x11,0
(0082) k=IN_DQ; //读数据,从低位开始
01F7 B360 IN R22,0x10
01F8 7061 ANDI R22,1
(0083) delay_us(1);
01F9 E001 LDI R16,1
01FA E010 LDI R17,0
01FB DF0F RCALL _delay_us
(0084) if(k) //判断数据极性
01FC 2366 TST R22
01FD F029 BEQ 0x0203
(0085) temp|=(1<<n);
01FE E001 LDI R16,1
01FF 2D1A MOV R17,R10
0200 D685 RCALL lsl8
0201 2B40 OR R20,R16
0202 C006 RJMP 0x0209
(0086) else
(0087) temp&=~(1<<n);
0203 E001 LDI R16,1
0204 2D1A MOV R17,R10
0205 D680 RCALL lsl8
0206 2E20 MOV R2,R16
0207 9420 COM R2
0208 2142 AND R20,R2
(0088) delay_us(60); //延时60~120us
0209 E30C LDI R16,0x3C
020A E010 LDI R17,0
020B DEFF RCALL _delay_us
(0089) SET_OUT; //设端口为输出
020C 9A88 SBI 0x11,0
020D 94A3 INC R10
020E 2D8A MOV R24,R10
020F 3088 CPI R24,0x8
0210 F300 BCS 0x01F1
(0090) }
(0091) return (temp); //返回读出的数据
0211 2F04 MOV R16,R20
0212 D5F8 RCALL pop_gset3
0213 9508 RET
_Read_1820_temperature:
teml --> R22
temh --> R10
count --> R20
0214 D619 RCALL push_gset4
0215 9728 SBIW R28,0x8
(0092) }
(0093) /*---------------------------------------------------------------------
(0094) 函数名称:unsigned int Read_1820_temperature(void)
(0095) 函数功能: 读取18B20温度,计算
(0096) 参 数:
(0097) 返 回 值: count
(0098) ---------------------------------------------------------------------*/
(0099) void Read_1820_temperature(void)
(0100) {
(0101) unsigned int count;
(0102) unsigned char temh,teml;
(0103) init_1820(); //复位18b20
0216 DFA5 RCALL _init_1820
(0104) write_1820(0xcc); //跳过ROM
0217 EC0C LDI R16,0xCC
0218 DFB9 RCALL _write_1820
(0105) write_1820(0x44); //发出温度转换命令
0219 E404 LDI R16,0x44
021A DFB7 RCALL _write_1820
(0106) delay_ms(750);
021B EE0E LDI R16,0xEE
021C E012 LDI R17,2
021D DEF5 RCALL _delay_ms
(0107) init_1820();
021E DF9D RCALL _init_1820
(0108) write_1820(0xcc); //发出读命令
021F EC0C LDI R16,0xCC
0220 DFB1 RCALL _write_1820
(0109) write_1820(0xbe);
0221 EB0E LDI R16,0xBE
0222 DFAF RCALL _write_1820
(0110) teml=read_1820(); //读数据
0223 DFC9 RCALL _read_1820
0224 2F60 MOV R22,R16
(0111) temh=read_1820();
0225 DFC7 RCALL _read_1820
0226 2EA0 MOV R10,R16
(0112) temp_data[0]=read_1820();
0227 DFC5 RCALL _read_1820
0228 93000062 STS 0x62,R16
(0113) temp_data[1]=read_1820();
022A DFC2 RCALL _read_1820
022B 93000063 STS 0x63,R16
(0114) count=temh<<8+teml;
022D 2F26 MOV R18,R22
022E 2733 CLR R19
022F 5F28 SUBI R18,0xF8
0230 4F3F SBCI R19,0xFF
0231 2D0A MOV R16,R10
0232 2711 CLR R17
0233 D64B RCALL lsl16
0234 01A8 MOVW R20,R16
(0115) count=count*0.0625;
0235 E302 LDI R16,0x32
0236 E010 LDI R17,0
0237 D605 RCALL lpm32
0238 933A ST R19,-Y
0239 932A ST R18,-Y
023A 931A ST R17,-Y
023B 930A ST R16,-Y
023C E20E LDI R16,0x2E
023D E010 LDI R17,0
023E D5FE RCALL lpm32
023F 933A ST R19,-Y
0240 932A ST R18,-Y
0241 931A ST R17,-Y
0242 930A ST R16,-Y
0243 018A MOVW R16,R20
0244 9516 LSR R17
0245 9507 ROR R16
0246 D683 RCALL int2fp
0247 933A ST R19,-Y
0248 932A ST R18,-Y
0249 931A ST R17,-Y
024A 930A ST R16,-Y
024B D756 RCALL empy32fs
024C 018A MOVW R16,R20
024D 7001 ANDI R16,1
024E 7010 ANDI R17,0
024F D67A RCALL int2fp
0250 933A ST R19,-Y
0251 932A ST R18,-Y
0252 931A ST R17,-Y
0253 930A ST R16,-Y
0254 D6CA RCALL add32fs
0255 D74E RCALL empy32f
0256 01FE MOVW R30,R28
0257 8300 STD Z+0,R16
0258 8311 STD Z+1,R17
0259 8322 STD Z+2,R18
025A 8333 STD Z+3,R19
025B 01FE MOVW R30,R28
025C 8020 LDD R2,Z+0
025D 8031 LDD R3,Z+1
025E 8042 LDD R4,Z+2
025F 8053 LDD R5,Z+3
0260 925A ST R5,-Y
0261 924A ST R4,-Y
0262 923A ST R3,-Y
0263 922A ST R2,-Y
0264 E20A LDI R16,0x2A
0265 E010 LDI R17,0
0266 D5D6 RCALL lpm32
0267 933A ST R19,-Y
0268 932A ST R18,-Y
0269 931A ST R17,-Y
026A 930A ST R16,-Y
026B D707 RCALL cmp32f
026C F0BC BLT 0x0284
026D 01FE MOVW R30,R28
026E 8020 LDD R2,Z+0
026F 8031 LDD R3,Z+1
0270 8042 LDD R4,Z+2
0271 8053 LDD R5,Z+3
0272 925A ST R5,-Y
0273 924A ST R4,-Y
0274 923A ST R3,-Y
0275 922A ST R2,-Y
0276 E20A LDI R16,0x2A
0277 E010 LDI R17,0
0278 D5C4 RCALL lpm32
0279 933A ST R19,-Y
027A 932A ST R18,-Y
027B 931A ST R17,-Y
027C 930A ST R16,-Y
027D D6A8 RCALL sub32f
027E D60D RCALL fp2int
027F 01C8 MOVW R24,R16
0280 5080 SUBI R24,0
0281 4890 SBCI R25,0x80
0282 016C MOVW R12,R24
0283 C007 RJMP 0x028B
0284 01FE MOVW R30,R28
0285 8100 LDD R16,Z+0
0286 8111 LDD R17,Z+1
0287 8122 LDD R18,Z+2
0288 8133 LDD R19,Z+3
0289 D602 RCALL fp2int
028A 0168 MOVW R12,R16
028B 01A6 MOVW R20,R12
(0116) count=(temh*256+teml)*6.25; //计算具体温度
028C E206 LDI R16,0x26
028D E010 LDI R17,0
028E D5AE RCALL lpm32
028F 933A ST R19,-Y
0290 932A ST R18,-Y
0291 931A ST R17,-Y
0292 930A ST R16,-Y
0293 2D2A MOV R18,R10
0294 2733 CLR R19
0295 E000 LDI R16,0
0296 E011 LDI R17,1
0297 D561 RCALL empy16s
0298 0118 MOVW R2,R16
0299 2E46 MOV R4,R22
029A 2455 CLR R5
029B 0C24 ADD R2,R4
029C 1C35 ADC R3,R5
029D 0181 MOVW R16,R2
029E D62B RCALL int2fp
029F 933A ST R19,-Y
02A0 932A ST R18,-Y
02A1 931A ST R17,-Y
02A2 930A ST R16,-Y
02A3 D700 RCALL empy32f
02A4 01FE MOVW R30,R28
02A5 8304 STD Z+4,R16
02A6 8315 STD Z+5,R17
02A7 8326 STD Z+6,R18
02A8 8337 STD Z+7,R19
02A9 01FE MOVW R30,R28
02AA 8024 LDD R2,Z+4
02AB 8035 LDD R3,Z+5
02AC 8046 LDD R4,Z+6
02AD 8057 LDD R5,Z+7
02AE 925A ST R5,-Y
02AF 924A ST R4,-Y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -