📄 wsh.lst
字号:
Interrupt Vectors
00000 940C 002A JMP __start|__text_start
Program Code (text area)
__start|__text_start:
0002A E5CF LDI R28,0x5F
0002B E0D4 LDI R29,4
0002C BFCD OUT 0x3D,R28
0002D BFDE OUT 0x3E,R29
0002E 51CE SUBI R28,0x1E
0002F 40D0 SBCI R29,0
00030 EA0A LDI R16,0xAA
00031 8308 ST Y,R16
00032 2400 CLR R0
00033 E6E0 LDI R30,0x60
00034 E0F0 LDI R31,0
00035 E010 LDI R17,0
00036 37E4 CPI R30,0x74
00037 07F1 CPC R31,R17
00038 F011 BEQ 0x003B
00039 9201 ST Z+,R0
0003A CFFB RJMP 0x0036
0003B 8300 ST Z,R16
0003C E5E4 LDI R30,0x54
0003D E0F0 LDI R31,0
0003E E6A0 LDI R26,0x60
0003F E0B0 LDI R27,0
00040 E010 LDI R17,0
00041 E000 LDI R16,0
00042 BF0B OUT 0x3B,R16
00043 35E4 CPI R30,0x54
00044 07F1 CPC R31,R17
00045 F021 BEQ 0x004A
00046 95C8 LPM
00047 9631 ADIW R30,1
00048 920D ST X+,R0
00049 CFF9 RJMP 0x0043
0004A 940E 01B9 CALL _main
_exit:
0004C CFFF RJMP _exit
FILE: E:\AVR自编程序\11avr实验板\20温湿~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) typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
(0025) typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */
(0026) typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
(0027) typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
(0028) typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */
(0029) typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
(0030) typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
(0031) typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
(0032)
(0033)
(0034) /**************************************************************************
(0035) I/O空间定义
(0036) ***************************************************************************/
(0037) // B0_IN DDRB &= ~(1 << PB0) /*设置输入*/
(0038) // B0_OUT DDRB |= (1 << PB0) /*设置输出*/
(0039) // B0_CLR PORTB &= ~(1 << PB0) /*置低电平*/
(0040) // B0_SET PORTB |= (1 << PB0) /*置高电平*/
(0041) // B0_R PINB & (1 <<PB0) /*读了电平*/
(0042)
(0043) #define C4_IN DDRC &= ~(1 << PC4) /*设置输入*/
(0044) #define C4_OUT DDRC |= (1 << PC4) /*设置输出*/
(0045) #define C4_CLR PORTC &= ~(1 << PC4) /*置低电平*/
(0046) #define C4_SET PORTC |= (1 << PC4) /*置高电平*/
(0047) #define C4_R PINC & (1 <<PC4) /*读了电平*/
(0048)
(0049) /**************************************************************************
(0050) 通讯I/O空间定义
(0051) ***************************************************************************/
(0052) #define COM_IN C4_IN
(0053) #define COM_OUT C4_OUT
(0054) #define COM_CLR C4_CLR
(0055) #define COM_SET C4_SET
(0056) #define COM_R C4_R
(0057)
(0058) /**************************************************************************
(0059) 全局变量定义区
(0060) ***************************************************************************/
(0061) U8 i;
(0062) U8 U8FLAG,k;
(0063) U8 U8count,U8temp;
(0064) U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
(0065) U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
(0066) U8 U8comdata;
(0067) U16 ReceiveHighByte;
(0068) U16 ReceiveLowByte;
(0069) /**************************************************************************
(0070) ***************************************************************************/
(0071) void port_init(void)
(0072) {
(0073) PORTB = 0x00;
_port_init:
0004D 2422 CLR R2
0004E BA28 OUT 0x18,R2
(0074) DDRB = 0xFF;
0004F EF8F LDI R24,0xFF
00050 BB87 OUT 0x17,R24
(0075) PORTC = 0x03;
00051 E083 LDI R24,3
00052 BB85 OUT 0x15,R24
(0076) DDRC = 0x0C;
00053 E08C LDI R24,0xC
00054 BB84 OUT 0x14,R24
(0077) PORTD = 0x00;
00055 BA22 OUT 0x12,R2
(0078) DDRD = 0xF0;
00056 EF80 LDI R24,0xF0
00057 BB81 OUT 0x11,R24
00058 9508 RET
(0079) }
(0080)
(0081) void watchdog_init(void)
(0082) {
_watchdog_init:
00059 9508 RET
(0083) //WDR(); //this prevents a timout on enabling
(0084) //WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
(0085) }
(0086)
(0087)
(0088) void Delay(unsigned int i)
(0089) {
(0090) while(i--);
_Delay:
i --> R16
0005A 0118 MOVW R2,R16
0005B 5001 SUBI R16,1
0005C 4010 SBCI R17,0
0005D 2022 TST R2
0005E F7D9 BNE 0x005A
0005F 2033 TST R3
00060 F7C9 BNE 0x005A
00061 9508 RET
_DelaymS:
i --> R20
dly --> R16
00062 934A ST -Y,R20
00063 935A ST -Y,R21
(0091) }
(0092)
(0093) void DelaymS (U16 dly)
(0094) {
(0095) U16 i;
(0096) for ( ; dly>0; dly--)
00064 C00C RJMP 0x0071
(0097) {
(0098) WDR();
00065 95A8 WDR
(0099) for (i=0; i<1119; i++);
00066 2744 CLR R20
00067 2755 CLR R21
00068 C002 RJMP 0x006B
00069 5F4F SUBI R20,0xFF
0006A 4F5F SBCI R21,0xFF
0006B 354F CPI R20,0x5F
0006C E0E4 LDI R30,4
0006D 075E CPC R21,R30
0006E F3D0 BCS 0x0069
0006F 5001 SUBI R16,1
00070 4010 SBCI R17,0
00071 3000 CPI R16,0
00072 0701 CPC R16,R17
00073 F789 BNE 0x0065
00074 9159 LD R21,Y+
00075 9149 LD R20,Y+
00076 9508 RET
(0100) }
(0101) }
(0102)
(0103)
(0104) void Delay_10us(void)
(0105) {
(0106) U8 i;
(0107) i++;i++;i++;i++;i++;i++;i++;i++;i++;
_Delay_10us:
i --> R16
00077 9503 INC R16
00078 9503 INC R16
00079 9503 INC R16
0007A 9503 INC R16
0007B 9503 INC R16
0007C 9503 INC R16
0007D 9503 INC R16
0007E 9503 INC R16
0007F 9503 INC R16
(0108) i++;i++;i++;i++;i++;i++;i++;i++;i++;
00080 9503 INC R16
00081 9503 INC R16
00082 9503 INC R16
00083 9503 INC R16
00084 9503 INC R16
00085 9503 INC R16
00086 9503 INC R16
00087 9503 INC R16
00088 9503 INC R16
(0109) i++;i++;i++;i++;i++;i++;i++;i++;i++;
00089 9503 INC R16
0008A 9503 INC R16
0008B 9503 INC R16
0008C 9503 INC R16
0008D 9503 INC R16
0008E 9503 INC R16
0008F 9503 INC R16
00090 9503 INC R16
00091 9503 INC R16
(0110) i++;i++;i++;i++;i++;i++;i++;i++;i++;
00092 9503 INC R16
00093 9503 INC R16
00094 9503 INC R16
00095 9503 INC R16
00096 9503 INC R16
00097 9503 INC R16
00098 9503 INC R16
00099 9503 INC R16
0009A 9503 INC R16
(0111) i++;i++;i++;i++;i++;i++;i++;i++;i++;
0009B 9503 INC R16
0009C 9503 INC R16
0009D 9503 INC R16
0009E 9503 INC R16
0009F 9503 INC R16
000A0 9503 INC R16
000A1 9503 INC R16
000A2 9503 INC R16
000A3 9503 INC R16
(0112) i++;i++;i++;i++;i++;i++;i++;i++;i++;
000A4 9503 INC R16
000A5 9503 INC R16
000A6 9503 INC R16
000A7 9503 INC R16
000A8 9503 INC R16
000A9 9503 INC R16
000AA 9503 INC R16
000AB 9503 INC R16
000AC 9503 INC R16
(0113) i++;i++;i++;i++;i++;i++;i++;i++;i++;
000AD 9503 INC R16
000AE 9503 INC R16
000AF 9503 INC R16
000B0 9503 INC R16
000B1 9503 INC R16
000B2 9503 INC R16
000B3 9503 INC R16
000B4 9503 INC R16
000B5 9503 INC R16
(0114) i++;i++;i++;i++;i++;i++;i++;
000B6 9503 INC R16
000B7 9503 INC R16
000B8 9503 INC R16
000B9 9503 INC R16
000BA 9503 INC R16
000BB 9503 INC R16
000BC 9503 INC R16
000BD 9508 RET
_COM:
i --> R20
000BE 934A ST -Y,R20
(0115) }
(0116) void COM(void)
(0117) {
(0118)
(0119) U8 i;
(0120) for(i=0;i<8;i++)
000BF 2744 CLR R20
000C0 C03F RJMP 0x0100
(0121) {
(0122)
(0123) U8FLAG=2;
000C1 E082 LDI R24,2
000C2 9380 0072 STS U8FLAG,R24
(0124) while((!(COM_R))&&U8FLAG++);
000C4 999C SBIC 0x13,4
000C5 C009 RJMP 0x00CF
000C6 9020 0072 LDS R2,U8FLAG
000C8 2433 CLR R3
000C9 2D82 MOV R24,R2
000CA 5F8F SUBI R24,0xFF
000CB 9380 0072 STS U8FLAG,R24
000CD 2022 TST R2
000CE F7A9 BNE 0x00C4
(0125) if(U8FLAG==1)break;
000CF 9180 0072 LDS R24,U8FLAG
000D1 3081 CPI R24,1
000D2 F409 BNE 0x00D4
000D3 C02F RJMP 0x0103
(0126) Delay_10us();
000D4 DFA2 RCALL _Delay_10us
(0127) Delay_10us();
000D5 DFA1 RCALL _Delay_10us
(0128) Delay_10us();
000D6 DFA0 RCALL _Delay_10us
(0129) Delay_10us();
000D7 DF9F RCALL _Delay_10us
(0130) U8temp=0;
000D8 2422 CLR R2
000D9 9220 006F STS U8temp,R2
(0131) if(COM_R)U8temp=1;
000DB 9B9C SBIS 0x13,4
000DC C003 RJMP 0x00E0
000DD E081 LDI R24,1
000DE 9380 006F STS U8temp,R24
(0132) U8FLAG=2;
000E0 E082 LDI R24,2
000E1 9380 0072 STS U8FLAG,R24
(0133) while((COM_R)&&U8FLAG++);
000E3 9B9C SBIS 0x13,4
000E4 C009 RJMP 0x00EE
000E5 9020 0072 LDS R2,U8FLAG
000E7 2433 CLR R3
000E8 2D82 MOV R24,R2
000E9 5F8F SUBI R24,0xFF
000EA 9380 0072 STS U8FLAG,R24
000EC 2022 TST R2
000ED F7A9 BNE 0x00E3
(0134) //超时则跳出for循环
(0135) if(U8FLAG==1)break;
000EE 9180 0072 LDS R24,U8FLAG
000F0 3081 CPI R24,1
000F1 F409 BNE 0x00F3
000F2 C010 RJMP 0x0103
(0136) //判断数据位是0还是1
(0137)
(0138) // 如果高电平高过预定0高电平值则数据位为 1
(0139)
(0140) U8comdata<<=1;
000F3 9020 0064 LDS R2,U8comdata
000F5 0C22 LSL R2
000F6 9220 0064 STS U8comdata,R2
(0141) U8comdata|=U8temp; //0
000F8 9020 006F LDS R2,U8temp
000FA 9030 0064 LDS R3,U8comdata
000FC 2832 OR R3,R2
000FD 9230 0064 STS U8comdata,R3
000FF 9543 INC R20
00100 3048 CPI R20,0x8
00101 F408 BCC 0x0103
00102 CFBE RJMP 0x00C1
00103 9149 LD R20,Y+
00104 9508 RET
(0142) }//rof
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -