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

📄 ac20-1.lst

📁 AVR单片机ATmega16(L)应用实例—红外线感应自动移门
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    006E E5CF      LDI	R28,0x5F
    006F E0D4      LDI	R29,4
    0070 BFCD      OUT	0x3D,R28
    0071 BFDE      OUT	0x3E,R29
    0072 51C0      SUBI	R28,0x10
    0073 40D0      SBCI	R29,0
    0074 EA0A      LDI	R16,0xAA
    0075 8308      STD	Y+0,R16
    0076 2400      CLR	R0
    0077 E6E9      LDI	R30,0x69
    0078 E0F0      LDI	R31,0
    0079 E010      LDI	R17,0
    007A 3CE8      CPI	R30,0xC8
    007B 07F1      CPC	R31,R17
    007C F011      BEQ	0x007F
    007D 9201      ST	R0,Z+
    007E CFFB      RJMP	0x007A
    007F 8300      STD	Z+0,R16
    0080 EDE2      LDI	R30,0xD2
    0081 E0F0      LDI	R31,0
    0082 E6A0      LDI	R26,0x60
    0083 E0B0      LDI	R27,0
    0084 E010      LDI	R17,0
    0085 3DEB      CPI	R30,0xDB
    0086 07F1      CPC	R31,R17
    0087 F021      BEQ	0x008C
    0088 95C8      LPM
    0089 9631      ADIW	R30,1
    008A 920D      ST	R0,X+
    008B CFF9      RJMP	0x0085
    008C 940E0B61  CALL	_main
_exit:
    008E CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  k                    --> R16
    008F 940E10F3  CALL	push_gset2
FILE: d:\MYDOCU~1\ac20-1\ac20-1.c
(0001) #include<iom16v.h>		//文件包含
(0002) #include<eeprom.h>
(0003) #define uchar unsigned char  //变量类型的宏定义
(0004) #define uint unsigned int
(0005) 
(0006) uchar const seg[10]={0x3f,0x06,0x5b,0x4f,0x66,  //数码管段码设定
(0007)                 0x6d,0x7d,0x07,0x7f,0x6f};
(0008) uchar const act[4]={0xdf,0xbf,0x7f,0xef};        //数码管位码设定
(0009) 
(0010) /***********************输入量设定*************************/
(0011) uchar stoptime=3;		//靠墙停顿时间设定
(0012) uchar study_speed;		//学习时的速度设定
(0013) uchar study_speed_temp=4;
(0014) 
(0015) uchar open_max,open_min;  //开门最大速度、最小速度设定
(0016) uchar open_max_temp=4,open_min_temp=4;
(0017) 
(0018) uchar close_max,close_min;  //关门最大速度、最小速度设定
(0019) uchar close_max_temp=1,close_min_temp=4;
(0020) 
(0021) /*****************输入量的列表****************/
(0022) uint const stoptime_tab[10]={500,1000,2000,3000,4000,5000,
(0023) 	 					6000,7000,8000,9000};
(0024) uchar const round_cnt_tab[10]={5,6,7,8,9,10,15,20,25,30};	
(0025) uchar const study_speed_tab[10]={5,7,9,11,13,15,
(0026) 	  							20,25,30,35};	
(0027) uchar const open_max_tab[10]={100,120,140,150,155,
(0028) 	  					160,165,170,175,180};
(0029) uchar const open_min_tab[10]={5,7,8,9,10,
(0030) 	  					15,20,25,30,35};
(0031) uchar const close_max_tab[10]={100,120,140,150,155,
(0032) 	  					160,165,170,175,180};
(0033) uchar const close_min_tab[10]={5,7,8,9,10,
(0034) 	  					15,20,25,30,35};
(0035) 						
(0036) uint round_cnt;  //直流电机旋转的圈数
(0037) int changdu;       //实际门扇移动的长度
(0038) uint st_changdu;	//设定门扇移动的长度
(0039) uint allchangdu_x;  //总长度(中间变量)
(0040) uint allchangdu;	//总长度
(0041) uint sp_pl;       	//脉冲计数变量
(0042) uchar set_status;	//设定状态
(0043) uchar status;		//工作状态
(0044) 
(0045) /***********临时变量***********/
(0046) uint cnt_500;		
(0047) uchar fst,val;
(0048) uchar temp;
(0049) uchar x;uchar FX=0;
(0050) uchar eep_temp;
(0051) 
(0052) uchar open_inc_tab[16];		//开门加速函数的计算表
(0053) uchar open_dec_tab[16];		//开门减速函数的计算表
(0054) uchar close_inc_tab[16];		//关门加速函数的计算表
(0055) uchar close_dec_tab[16];	//关门减速函数的计算表
(0056) 
(0057) uchar openflag;
(0058) uchar dis_bit,ddata=0;
(0059) /***********************************************/
(0060) uchar inc_dec_flag;		//加减速的标志
(0061) uchar wide=0;			//加减速的脉冲宽度变量
(0062) 
(0063) /****************常量定义***************/
(0064) #define L 1;
(0065) #define R 0;
(0066) #define ON 0;
(0067) #define OFF 1;
(0068) #define ALL 1
(0069) #define HALF 0
(0070) 
(0071) /**************端口高低电平定义****************/
(0072) #define PWMOUT_0  (PORTD=PORTD|0x80)		//PWM端输出0
(0073) #define PWMOUT_1  (PORTD=PORTD&0x7f)		//PWM端输出1
(0074) #define SACE_0  (PORTD=PORTD|0x40)			//SACE端输出0
(0075) #define SACE_1  (PORTD=PORTD&0xbf)		//SACE端输出1
(0076) #define FANXIANG_L  (PORTD=PORTD|0x20)	//方向向左
(0077) #define FANXIANG_R  (PORTD=PORTD&0xdf)	//方向向右
(0078) #define RELAY_ON  (PORTD=PORTD&0xf7)		//继电器吸合
(0079) #define RELAY_OFF  (PORTD=PORTD|0x08)		//继电器断开
(0080) #define LOCK_ON  (PORTD=PORTD&0xef)		//锁停门扇打开
(0081) #define LOCK_OFF  (PORTD=PORTD|0x10)		//锁停门扇关闭
(0082) 
(0083) #define CON_SMAIL  (PORTC&0x01)			//门扇打开微小的距离运行
(0084) #define TANTE1 (PINC&0x40)					//门外侧的红外感应探测器1
(0085) #define TANTE2 (PINC&0x02)					//门内侧的红外感应探测器2
(0086) #define KEY_SET (PINB&0x01)					//按键输入SET
(0087) #define KEY_ADD (PINB&0x02)					//按键输入ADD
(0088) #define KEY_OK (PINB&0x04)					//按键输入OK
(0089) #define OFF_ALLTANTE (PINB&0x08)			//关闭全部的红外感应探测器
(0090) #define OFF_TANTE1 (PINB&0x10)				//关闭门外侧的红外感应探测器1
(0091) #define HALF_RUN (PIND&0x01)				//门扇半开运行
(0092) #define ALLOPEN_STOP (PIND&0x02)			//门扇全开后锁停
(0093) #define STOP (PINC&0x10)						//门扇锁停
(0094) 
(0095) /****************EEPROM内部地址定义*********************/
(0096) #define stoptime_address 10
(0097) #define study_speed_address 15
(0098) #define open_max_address 20
(0099) #define open_min_address 25 
(0100) #define close_max_address 30
(0101) #define close_min_address 35
(0102) 
(0103) /***********************************************************/
(0104) uchar openstop;			//门全开后停止不动的标志
(0105) uchar tante_flag;			//门外侧的红外感应探测器1允许使用的标志
(0106) 
(0107) /******************函数声明***********************/
(0108) void start(void);			
(0109) //void fai_zhan(void);
(0110) 
(0111) /****************延时子函数*******************/
(0112) void delay(uint k)
(0113) {
(0114) uint i,j;
(0115) for(i=0;i<k;i++){
    0091 2744      CLR	R20
    0092 2755      CLR	R21
    0093 C00B      RJMP	0x009F
(0116) for(j=0;j<1500;j++)
    0094 2766      CLR	R22
    0095 2777      CLR	R23
    0096 C002      RJMP	0x0099
    0097 5F6F      SUBI	R22,0xFF
    0098 4F7F      SBCI	R23,0xFF
    0099 3D6C      CPI	R22,0xDC
    009A E0E5      LDI	R30,5
    009B 077E      CPC	R23,R30
    009C F3D0      BCS	0x0097
    009D 5F4F      SUBI	R20,0xFF
    009E 4F5F      SBCI	R21,0xFF
    009F 1740      CP	R20,R16
    00A0 0751      CPC	R21,R17
    00A1 F390      BCS	0x0094
    00A2 940E10E7  CALL	pop_gset2
    00A4 9508      RET
_init_IO:
    00A5 9722      SBIW	R28,2
(0117) {;}}
(0118) }
(0119) 
(0120) /*==========初始化单片机I/O口子函数==========*/
(0121) void init_IO(void)             
(0122) {DDRA=0x7f;                    
    00A6 E78F      LDI	R24,0x7F
    00A7 BB8A      OUT	0x1A,R24
(0123)  PORTA=0x00;
    00A8 2422      CLR	R2
    00A9 BA2B      OUT	0x1B,R2
(0124)  DDRB=0xe0;					   
    00AA EE80      LDI	R24,0xE0
    00AB BB87      OUT	0x17,R24
(0125)  PORTB=0xff;
    00AC EF8F      LDI	R24,0xFF
    00AD BB88      OUT	0x18,R24
(0126)  DDRC=0x01;					   
    00AE E081      LDI	R24,1
    00AF BB84      OUT	0x14,R24
(0127)  PORTC=0xff;
    00B0 EF8F      LDI	R24,0xFF
    00B1 BB85      OUT	0x15,R24
(0128)  DDRD=0xf8;
    00B2 EF88      LDI	R24,0xF8
    00B3 BB81      OUT	0x11,R24
(0129)  PORTD=0xff;
    00B4 EF8F      LDI	R24,0xFF
    00B5 BB82      OUT	0x12,R24
(0130)  //-----------------------------
(0131)  PWMOUT_0;
    00B6 9A97      SBI	0x12,7
(0132)  SACE_0;
    00B7 9A96      SBI	0x12,6
(0133)  TCCR0=0x04;
    00B8 E084      LDI	R24,4
    00B9 BF83      OUT	0x33,R24
(0134)  TCNT0=0xd9;
    00BA ED89      LDI	R24,0xD9
    00BB BF82      OUT	0x32,R24
(0135)  GICR=0x40;/*c0;*/
    00BC E480      LDI	R24,0x40
    00BD BF8B      OUT	0x3B,R24
(0136)  MCUCR=0x02;/*0a;*/
    00BE E082      LDI	R24,2
    00BF BF85      OUT	0x35,R24
(0137)  TIMSK=0x01;
    00C0 E081      LDI	R24,1
    00C1 BF89      OUT	0x39,R24
(0138)  TCCR2=0x71;
    00C2 E781      LDI	R24,0x71
    00C3 BD85      OUT	0x25,R24
(0139)  FANXIANG_R;
    00C4 B382      IN	R24,0x12
    00C5 7D8F      ANDI	R24,0xDF
    00C6 BB82      OUT	0x12,R24
(0140) round_cnt=0;
    00C7 2433      CLR	R3
    00C8 923000C2  STS	round_cnt+1,R3
    00CA 922000C1  STS	round_cnt,R2
(0141) changdu=0;
    00CC 923000C0  STS	changdu+1,R3
    00CE 922000BF  STS	changdu,R2
(0142) sp_pl=0;
    00D0 923000B8  STS	sp_pl+1,R3
    00D2 922000B7  STS	sp_pl,R2
(0143) allchangdu=0;
    00D4 923000BA  STS	allchangdu+1,R3
    00D6 922000B9  STS	allchangdu,R2
(0144) changdu=0;
    00D8 923000C0  STS	changdu+1,R3
    00DA 922000BF  STS	changdu,R2
(0145) st_changdu=0;
    00DC 923000BE  STS	st_changdu+1,R3
    00DE 922000BD  STS	st_changdu,R2
(0146) status=0;
    00E0 922000B5  STS	status,R2
(0147) inc_dec_flag=0;
    00E2 9220006B  STS	inc_dec_flag,R2
(0148) //***********************************
(0149) eep_temp=0;
    00E4 922000AE  STS	eep_temp,R2
(0150) EEPROM_READ(stoptime_address+1,eep_temp);
    00E6 E081      LDI	R24,1
    00E7 E090      LDI	R25,0
    00E8 8399      STD	Y+1,R25
    00E9 8388      STD	Y+0,R24
    00EA EA2E      LDI	R18,0xAE
    00EB E030      LDI	R19,0
    00EC E00B      LDI	R16,0xB
    00ED E010      LDI	R17,0
    00EE 940E1122  CALL	_EEPROMReadBytes
(0151) if(eep_temp==55)
    00F0 918000AE  LDS	R24,eep_temp
    00F2 3387      CPI	R24,0x37
    00F3 F451      BNE	0x00FE
(0152) {EEPROM_READ(stoptime_address,stoptime);}
    00F4 E081      LDI	R24,1
    00F5 E090      LDI	R25,0
    00F6 8399      STD	Y+1,R25
    00F7 8388      STD	Y+0,R24
    00F8 E620      LDI	R18,0x60
    00F9 E030      LDI	R19,0
    00FA E00A      LDI	R16,0xA
    00FB E010      LDI	R17,0
    00FC 940E1122  CALL	_EEPROMReadBytes
(0153) //************************************
(0154) eep_temp=0;
    00FE 2422      CLR	R2
    00FF 922000AE  STS	eep_temp,R2
(0155) EEPROM_READ(open_max_address+1,eep_temp);
    0101 E081      LDI	R24,1
    0102 E090      LDI	R25,0
    0103 8399      STD	Y+1,R25
    0104 8388      STD	Y+0,R24
    0105 EA2E      LDI	R18,0xAE
    0106 E030      LDI	R19,0
    0107 E105      LDI	R16,0x15
    0108 E010      LDI	R17,0
    0109 940E1122  CALL	_EEPROMReadBytes
(0156) if(eep_temp==55)
    010B 918000AE  LDS	R24,eep_temp
    010D 3387      CPI	R24,0x37
    010E F451      BNE	0x0119
(0157) {EEPROM_READ(open_max_address,open_max_temp);}
    010F E081      LDI	R24,1
    0110 E090      LDI	R25,0
    0111 8399      STD	Y+1,R25
    0112 8388      STD	Y+0,R24
    0113 E622      LDI	R18,0x62
    0114 E030      LDI	R19,0
    0115 E104      LDI	R16,0x14
    0116 E010      LDI	R17,0
    0117 940E1122  CALL	_EEPROMReadBytes
(0158) //*************************************
(0159) eep_temp=0;
    0119 2422      CLR	R2
    011A 922000AE  STS	eep_temp,R2
(0160) EEPROM_READ(open_min_address+1,eep_temp);
    011C E081      LDI	R24,1
    011D E090      LDI	R25,0
    011E 8399      STD	Y+1,R25
    011F 8388      STD	Y+0,R24
    0120 EA2E      LDI	R18,0xAE
    0121 E030      LDI	R19,0
    0122 E10A      LDI	R16,0x1A
    0123 E010      LDI	R17,0
    0124 940E1122  CALL	_EEPROMReadBytes
(0161) if(eep_temp==55)
    0126 918000AE  LDS	R24,eep_temp
    0128 3387      CPI	R24,0x37
    0129 F451      BNE	0x0134
(0162) {EEPROM_READ(open_min_address,open_min_temp);}
    012A E081      LDI	R24,1
    012B E090      LDI	R25,0
    012C 8399      STD	Y+1,R25
    012D 8388      STD	Y+0,R24
    012E E623      LDI	R18,0x63
    012F E030      LDI	R19,0
    0130 E109      LDI	R16,0x19
    0131 E010      LDI	R17,0
    0132 940E1122  CALL	_EEPROMReadBytes
(0163) //*************************************
(0164) eep_temp=0;
    0134 2422      CLR	R2
    0135 922000AE  STS	eep_temp,R2
(0165) EEPROM_READ(close_max_address+1,eep_temp);
    0137 E081      LDI	R24,1
    0138 E090      LDI	R25,0
    0139 8399      STD	Y+1,R25
    013A 8388      STD	Y+0,R24
    013B EA2E      LDI	R18,0xAE
    013C E030      LDI	R19,0
    013D E10F      LDI	R16,0x1F
    013E E010      LDI	R17,0
    013F 940E1122  CALL	_EEPROMReadBytes
(0166) if(eep_temp==55)
    0141 918000AE  LDS	R24,eep_temp
    0143 3387      CPI	R24,0x37
    0144 F451      BNE	0x014F
(0167) {EEPROM_READ(close_max_address,open_max_temp);}
    0145 E081      LDI	R24,1
    0146 E090      LDI	R25,0
    0147 8399      STD	Y+1,R25
    0148 8388      STD	Y+0,R24
    0149 E622      LDI	R18,0x62
    014A E030      LDI	R19,0
    014B E10E      LDI	R16,0x1E
    014C E010      LDI	R17,0
    014D 940E1122  CALL	_EEPROMReadBytes
(0168) //*************************************
(0169) eep_temp=0;
    014F 2422      CLR	R2
    0150 922000AE  STS	eep_temp,R2
(0170) EEPROM_READ(close_min_address+1,eep_temp);
    0152 E081      LDI	R24,1
    0153 E090      LDI	R25,0
    0154 8399      STD	Y+1,R25
    0155 8388      STD	Y+0,R24
    0156 EA2E      LDI	R18,0xAE
    0157 E030      LDI	R19,0
    0158 E204      LDI	R16,0x24
    0159 E010      LDI	R17,0
    015A 940E1122  CALL	_EEPROMReadBytes
(0171) if(eep_temp==55)
    015C 918000AE  LDS	R24,eep_temp
    015E 3387      CPI	R24,0x37
    015F F451      BNE	0x016A
(0172) {EEPROM_READ(close_min_address,open_min_temp);}
    0160 E081      LDI	R24,1
    0161 E090      LDI	R25,0
    0162 8399      STD	Y+1,R25
    0163 8388      STD	Y+0,R24
    0164 E623      LDI	R18,0x63
    0165 E030      LDI	R19,0
    0166 E203      LDI	R16,0x23
    0167 E010      LDI	R17,0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -