📄 ac20-1.lst
字号:
__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 + -