📄 wenshidu.lst
字号:
(0108) write_shuju(0,0x01); //清屏
00154 E021 LDI R18,1
00155 2700 CLR R16
00156 DF72 RCALL _write_shuju
(0109) delay_ms(20);
00157 E104 LDI R16,0x14
00158 E010 LDI R17,0
00159 CF46 RJMP _delay_ms
FILE: E:\AVR自编程序\11avr实验板\21温湿~1\温湿度.c
(0001) //ICC-AVR application builder : 2008-4-28 9:22:37
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) /*************************************************************************
(0005) 程序开发软件:ICC-AVR
(0006) 功能:波特率9600 串口发送温湿度数据
(0007) 数据格式:湿度高8位 湿度高8位 温度低8位 温度低8位 校验和
(0008)
(0009) 校验和= 湿度高8位+湿度低8位+温度高8位+温度低8位
(0010)
(0011) 公司:DHT21
(0012) 芯片:M8
(0013) 晶振:外部 8Mhz
(0014) 创建人:
(0015) 创建时间:09.07.03
(0016) 修改人:
(0017) 修改时间:
(0018) 修改原因:
(0019) **************************************************** **********************/
(0020)
(0021)
(0022) #include <iom16v.h>
(0023) #include <macros.h>
(0024) #include "12864.h"
(0025) typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
(0026) typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */
(0027) typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
(0028) typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
(0029) typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */
(0030) typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
(0031) typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
(0032) typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
(0033)
(0034)
(0035) /**************************************************************************
(0036) I/O空间定义
(0037) ***************************************************************************/
(0038) // B0_IN DDRB &= ~(1 << PB0) /*设置输入*/
(0039) // B0_OUT DDRB |= (1 << PB0) /*设置输出*/
(0040) // B0_CLR PORTB &= ~(1 << PB0) /*置低电平*/
(0041) // B0_SET PORTB |= (1 << PB0) /*置高电平*/
(0042) // B0_R PINB & (1 <<PB0) /*读了电平*/
(0043)
(0044) #define C4_IN DDRC &= ~(1 << PC4) /*设置输入*/
(0045) #define C4_OUT DDRC |= (1 << PC4) /*设置输出*/
(0046) #define C4_CLR PORTC &= ~(1 << PC4) /*置低电平*/
(0047) #define C4_SET PORTC |= (1 << PC4) /*置高电平*/
(0048) #define C4_R PINC & (1 <<PC4) /*读了电平*/
(0049)
(0050) /**************************************************************************
(0051) 通讯I/O空间定义
(0052) ***************************************************************************/
(0053) #define COM_IN C4_IN
(0054) #define COM_OUT C4_OUT
(0055) #define COM_CLR C4_CLR
(0056) #define COM_SET C4_SET
(0057) #define COM_R C4_R
(0058)
(0059) /**************************************************************************
(0060) 全局变量定义区
(0061) ***************************************************************************/
(0062) U8 i;
(0063) U8 U8FLAG,k;
(0064) U8 U8count,U8temp;
(0065) U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
(0066) U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
(0067) U8 U8comdata;
(0068) U16 ReceiveHighByte;
(0069) U16 ReceiveLowByte;
(0070) /**************************************************************************
(0071) ***************************************************************************/
(0072) void port_init(void)
(0073) {
(0074) PORTB = 0x00;
_port_init:
0015A 2422 CLR R2
0015B BA28 OUT 0x18,R2
(0075) DDRB = 0xFF;
0015C EF8F LDI R24,0xFF
0015D BB87 OUT 0x17,R24
(0076) PORTC = 0x03;
0015E E083 LDI R24,3
0015F BB85 OUT 0x15,R24
(0077) DDRC = 0x0C;
00160 E08C LDI R24,0xC
00161 BB84 OUT 0x14,R24
(0078) PORTD = 0x00;
00162 BA22 OUT 0x12,R2
(0079) DDRD = 0xF0;
00163 EF80 LDI R24,0xF0
00164 BB81 OUT 0x11,R24
00165 9508 RET
(0080) }
(0081)
(0082) void watchdog_init(void)
(0083) {
_watchdog_init:
00166 9508 RET
(0084) //WDR(); //this prevents a timout on enabling
(0085) //WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
(0086) }
(0087)
(0088)
(0089) void Delay(unsigned int i)
(0090) {
(0091) while(i--);
_Delay:
i --> R16
00167 0118 MOVW R2,R16
00168 5001 SUBI R16,1
00169 4010 SBCI R17,0
0016A 2022 TST R2
0016B F7D9 BNE 0x0167
0016C 2033 TST R3
0016D F7C9 BNE 0x0167
0016E 9508 RET
_DelaymS:
i --> R20
dly --> R16
0016F 934A ST -Y,R20
00170 935A ST -Y,R21
(0092) }
(0093)
(0094) void DelaymS (U16 dly)
(0095) {
(0096) U16 i;
(0097) for ( ; dly>0; dly--)
00171 C00C RJMP 0x017E
(0098) {
(0099) WDR();
00172 95A8 WDR
(0100) for (i=0; i<1119; i++);
00173 2744 CLR R20
00174 2755 CLR R21
00175 C002 RJMP 0x0178
00176 5F4F SUBI R20,0xFF
00177 4F5F SBCI R21,0xFF
00178 354F CPI R20,0x5F
00179 E0E4 LDI R30,4
0017A 075E CPC R21,R30
0017B F3D0 BCS 0x0176
0017C 5001 SUBI R16,1
0017D 4010 SBCI R17,0
0017E 3000 CPI R16,0
0017F 0701 CPC R16,R17
00180 F789 BNE 0x0172
00181 9159 LD R21,Y+
00182 9149 LD R20,Y+
00183 9508 RET
(0101) }
(0102) }
(0103)
(0104)
(0105) void Delay_10us(void)
(0106) {
(0107) U8 i;
(0108) i++;i++;i++;i++;i++;i++;i++;i++;i++;
_Delay_10us:
i --> R16
00184 9503 INC R16
00185 9503 INC R16
00186 9503 INC R16
00187 9503 INC R16
00188 9503 INC R16
00189 9503 INC R16
0018A 9503 INC R16
0018B 9503 INC R16
0018C 9503 INC R16
(0109) i++;i++;i++;i++;i++;i++;i++;i++;i++;
0018D 9503 INC R16
0018E 9503 INC R16
0018F 9503 INC R16
00190 9503 INC R16
00191 9503 INC R16
00192 9503 INC R16
00193 9503 INC R16
00194 9503 INC R16
00195 9503 INC R16
(0110) i++;i++;i++;i++;i++;i++;i++;i++;i++;
00196 9503 INC R16
00197 9503 INC R16
00198 9503 INC R16
00199 9503 INC R16
0019A 9503 INC R16
0019B 9503 INC R16
0019C 9503 INC R16
0019D 9503 INC R16
0019E 9503 INC R16
(0111) i++;i++;i++;i++;i++;i++;i++;i++;i++;
0019F 9503 INC R16
001A0 9503 INC R16
001A1 9503 INC R16
001A2 9503 INC R16
001A3 9503 INC R16
001A4 9503 INC R16
001A5 9503 INC R16
001A6 9503 INC R16
001A7 9503 INC R16
(0112) i++;i++;i++;i++;i++;i++;i++;i++;i++;
001A8 9503 INC R16
001A9 9503 INC R16
001AA 9503 INC R16
001AB 9503 INC R16
001AC 9503 INC R16
001AD 9503 INC R16
001AE 9503 INC R16
001AF 9503 INC R16
001B0 9503 INC R16
(0113) i++;i++;i++;i++;i++;i++;i++;i++;i++;
001B1 9503 INC R16
001B2 9503 INC R16
001B3 9503 INC R16
001B4 9503 INC R16
001B5 9503 INC R16
001B6 9503 INC R16
001B7 9503 INC R16
001B8 9503 INC R16
001B9 9503 INC R16
(0114) i++;i++;i++;i++;i++;i++;i++;i++;i++;
001BA 9503 INC R16
001BB 9503 INC R16
001BC 9503 INC R16
001BD 9503 INC R16
001BE 9503 INC R16
001BF 9503 INC R16
001C0 9503 INC R16
001C1 9503 INC R16
001C2 9503 INC R16
(0115) i++;i++;i++;i++;i++;i++;i++;
001C3 9503 INC R16
001C4 9503 INC R16
001C5 9503 INC R16
001C6 9503 INC R16
001C7 9503 INC R16
001C8 9503 INC R16
001C9 9503 INC R16
001CA 9508 RET
_COM:
i --> R20
001CB 934A ST -Y,R20
(0116) }
(0117) void COM(void)
(0118) {
(0119)
(0120) U8 i;
(0121) for(i=0;i<8;i++)
001CC 2744 CLR R20
001CD C03F RJMP 0x020D
(0122) {
(0123)
(0124) U8FLAG=2;
001CE E082 LDI R24,2
001CF 9380 0212 STS U8FLAG,R24
(0125) while((!(COM_R))&&U8FLAG++);
001D1 999C SBIC 0x13,4
001D2 C009 RJMP 0x01DC
001D3 9020 0212 LDS R2,U8FLAG
001D5 2433 CLR R3
001D6 2D82 MOV R24,R2
001D7 5F8F SUBI R24,0xFF
001D8 9380 0212 STS U8FLAG,R24
001DA 2022 TST R2
001DB F7A9 BNE 0x01D1
(0126) if(U8FLAG==1)break;
001DC 9180 0212 LDS R24,U8FLAG
001DE 3081 CPI R24,1
001DF F409 BNE 0x01E1
001E0 C02F RJMP 0x0210
(0127) Delay_10us();
001E1 DFA2 RCALL _Delay_10us
(0128) Delay_10us();
001E2 DFA1 RCALL _Delay_10us
(0129) Delay_10us();
001E3 DFA0 RCALL _Delay_10us
(0130) Delay_10us();
001E4 DF9F RCALL _Delay_10us
(0131) U8temp=0;
001E5 2422 CLR R2
001E6 9220 020F STS U8temp,R2
(0132) if(COM_R)U8temp=1;
001E8 9B9C SBIS 0x13,4
001E9 C003 RJMP 0x01ED
001EA E081 LDI R24,1
001EB 9380 020F STS U8temp,R24
(0133) U8FLAG=2;
001ED E082 LDI R24,2
001EE 9380 0212 STS U8FLAG,R24
(0134) while((COM_R)&&U8FLAG++);
001F0 9B9C SBIS 0x13,4
001F1 C009 RJMP 0x01FB
001F2 9020 0212 LDS R2,U8FLAG
001F4 2433 CLR R3
001F5 2D82 MOV R24,R2
001F6 5F8F SUBI R24,0xFF
001F7 9380 0212 STS U8FLAG,R24
001F9 2022 TST R2
001FA F7A9 BNE 0x01F0
(0135) //超时则跳出for循环
(0136) if(U8FLAG==1)break;
001FB 9180 0212 LDS R24,U8FLAG
001FD 3081 CPI R24,1
001FE F409 BNE 0x0200
001FF C010 RJMP 0x0210
(0137) //判断数据位是0还是1
(0138)
(0139) // 如果高电平高过预定0高电平值则数据位为 1
(0140)
(0141) U8comdata<<=1;
00200 9020 0204 LDS R2,U8comdata
00202 0C22 LSL R2
00203 9220 0204 STS U8comdata,R2
(0142) U8comdata|=U8temp; //0
00205 9020 020F LDS R2,U8temp
00207 9030 0204 LDS R3,U8comdata
00209 2832 OR R3,R2
0020A 9230 0204 STS U8comdata,R3
0020C 9543 INC R20
0020D 3048 CPI R20,0x8
0020E F408 BCC 0x0210
0020F CFBE RJMP 0x01CE
00210 9149 LD R20,Y+
00211 9508 RET
(0143) }//rof
(0144)
(0145) }
(0146)
(0147) //--------------------------------
(0148) //-----湿度读取子程序 ------------
(0149) //--------------------------------
(0150) //----以下变量均为全局变量--------
(0151) //----温度高8位== U8T_data_H------
(0152) //----温度低8位== U8T_data_L------
(0153) //----湿度高8位== U8RH_data_H-----
(0154) //----湿度低8位== U8RH_data_L-----
(0155) //----校验 8位 == U8checkdata-----
(0156) //----调用相关子程序如下----------
(0157) //---- Delay();, Delay_10us();,COM();
(0158) //--------------------------------
(0159)
(0160) void RH(void)
(0161) {
(0162)
(0163) //主机拉低18ms
(0164) COM_OUT;
_RH:
00212 9AA4 SBI 0x14,4
(0165) COM_CLR;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -