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

📄 wenshidu.lst

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