⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wsh.lst

📁 avr基础程序大全
💻 LST
📖 第 1 页 / 共 2 页
字号:
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 + -