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

📄 coder.lst

📁 m8改造4VF遥控器
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0208)  OUTL;
    0148 9897      CBI	0x12,7
(0209)  }
    0149 9029      LD	R2,Y+
    014A BE2F      OUT	0x3F,R2
    014B 91E9      LD	R30,Y+
    014C 9189      LD	R24,Y+
    014D 9119      LD	R17,Y+
    014E 9109      LD	R16,Y+
    014F 9029      LD	R2,Y+
    0150 9518      RETI
(0210)  
(0211) }
(0212) 
(0213) 
(0214) 
(0215) void Putchar (Uchar c)
(0216) {
(0217) while(!(UCSRA&(1<<UDRE)));
_Putchar:
  c                    --> R16
    0151 9B5D      SBIS	0x0B,5
    0152 CFFE      RJMP	_Putchar
(0218) UDR=c;
    0153 B90C      OUT	0x0C,R16
    0154 9508      RET
_ReadADC:
  int2                 --> R20
  int1                 --> R22
  channel              --> R16
    0155 D158      RCALL	push_gset2
(0219) }
(0220) 
(0221) 
(0222) Uint ReadADC (Uchar channel)
(0223) {
(0224) Uint int1,int2;
(0225) ADMUX&=~0x1F;
    0156 B187      IN	R24,0x07
    0157 7E80      ANDI	R24,0xE0
    0158 B987      OUT	0x07,R24
(0226) ADMUX|=channel;
    0159 B027      IN	R2,0x07
    015A 2A20      OR	R2,R16
    015B B827      OUT	0x07,R2
(0227) ADCSRA|=0x40;
    015C 9A36      SBI	0x06,6
(0228) while(~ADCSRA&0x10){}
    015D B026      IN	R2,0x06
    015E 2433      CLR	R3
    015F 9420      COM	R2
    0160 9430      COM	R3
    0161 FC24      SBRC	R2,4
    0162 CFFA      RJMP	0x015D
(0229) ADCSRA|=0x10;
    0163 9A34      SBI	0x06,4
(0230) int2=ADCL;
    0164 B144      IN	R20,0x04
    0165 2755      CLR	R21
(0231) int1=ADCH;
    0166 B165      IN	R22,0x05
    0167 2777      CLR	R23
(0232) int1<<=8;
    0168 2F76      MOV	R23,R22
    0169 2766      CLR	R22
(0233) return (int1+int2);
    016A 018B      MOVW	R16,R22
    016B 0F04      ADD	R16,R20
    016C 1F15      ADC	R17,R21
    016D D138      RCALL	pop_gset2
    016E 9508      RET
_main:
  warning_frequency    --> R10
  ledonof              --> Y+13
  warning_counter      --> Y+12
  battcheck            --> Y+11
  youmen               --> R14
  safedelay            --> Y+10
  safe                 --> Y+9
  batt                 --> R22
  checken              --> Y+8
  temp                 --> Y+0
  counter              --> R20
    016F 972E      SBIW	R28,0xE
(0234) }
(0235) 
(0236) 
(0237) main()
(0238) {
(0239) 
(0240) Uint batt;//电量
(0241) Uint temp[4];//滤波用
(0242) Uint youmen ;//油门缓存
(0243) Uchar counter ;//采集计数
(0244) Uchar safe=1,safedelay=0;//油门保护
    0170 2400      CLR	R0
    0171 9403      INC	R0
    0172 8609      STD	Y+9,R0
    0173 2400      CLR	R0
    0174 860A      STD	Y+10,R0
(0245) Uchar warning_frequency;//警告频率
(0246) Uchar warning_counter=0;
    0175 860C      STD	Y+12,R0
(0247) Uchar ledonof=0;
    0176 860D      STD	Y+13,R0
(0248) Uchar battcheck=1;//检测电量许可
    0177 2400      CLR	R0
    0178 9403      INC	R0
    0179 860B      STD	Y+11,R0
(0249) Uchar checken=200;//等待电压稳定
    017A EC88      LDI	R24,0xC8
    017B 8788      STD	Y+8,R24
(0250) 
(0251) init_devices();
    017C DF6E      RCALL	_init_devices
    017D C125      RJMP	0x02A3
(0252) 
(0253) 
(0254) while(1)
(0255) {
(0256) 
(0257) 
(0258) for(counter=0;counter<=3;counter++)
    017E 2744      CLR	R20
    017F C033      RJMP	0x01B3
(0259) {
(0260) temp[counter]=ReadADC (counter);
    0180 2F04      MOV	R16,R20
    0181 DFD3      RCALL	_ReadADC
    0182 E082      LDI	R24,2
    0183 9F84      MUL	R24,R20
    0184 01F0      MOVW	R30,R0
    0185 01CE      MOVW	R24,R28
    0186 0FE8      ADD	R30,R24
    0187 1FF9      ADC	R31,R25
    0188 8311      STD	Z+1,R17
    0189 8300      STD	Z+0,R16
(0261) if((temp[counter]>time[counter]+1)||(temp[counter]<time[counter]-1))time[counter]=temp[counter];
    018A E082      LDI	R24,2
    018B 9F84      MUL	R24,R20
    018C 01CE      MOVW	R24,R28
    018D 01F0      MOVW	R30,R0
    018E 0FE8      ADD	R30,R24
    018F 1FF9      ADC	R31,R25
    0190 8020      LDD	R2,Z+0
    0191 8031      LDD	R3,Z+1
    0192 E786      LDI	R24,0x76
    0193 E090      LDI	R25,0
    0194 01F0      MOVW	R30,R0
    0195 0FE8      ADD	R30,R24
    0196 1FF9      ADC	R31,R25
    0197 8040      LDD	R4,Z+0
    0198 8051      LDD	R5,Z+1
    0199 01C2      MOVW	R24,R4
    019A 9601      ADIW	R24,1
    019B 1582      CP	R24,R2
    019C 0593      CPC	R25,R3
    019D F028      BCS	0x01A3
    019E 01C2      MOVW	R24,R4
    019F 9701      SBIW	R24,1
    01A0 1628      CP	R2,R24
    01A1 0639      CPC	R3,R25
    01A2 F478      BCC	0x01B2
    01A3 E082      LDI	R24,2
    01A4 9F84      MUL	R24,R20
    01A5 01CE      MOVW	R24,R28
    01A6 01F0      MOVW	R30,R0
    01A7 0FE8      ADD	R30,R24
    01A8 1FF9      ADC	R31,R25
    01A9 8020      LDD	R2,Z+0
    01AA 8031      LDD	R3,Z+1
    01AB E786      LDI	R24,0x76
    01AC E090      LDI	R25,0
    01AD 01F0      MOVW	R30,R0
    01AE 0FE8      ADD	R30,R24
    01AF 1FF9      ADC	R31,R25
    01B0 8231      STD	Z+1,R3
    01B1 8220      STD	Z+0,R2
    01B2 9543      INC	R20
    01B3 E083      LDI	R24,3
    01B4 1784      CP	R24,R20
    01B5 F008      BCS	0x01B7
    01B6 CFC9      RJMP	0x0180
(0262) 
(0263) }
(0264) 
(0265) batt=ReadADC (4);
    01B7 E004      LDI	R16,4
    01B8 DF9C      RCALL	_ReadADC
    01B9 01B8      MOVW	R22,R16
(0266) 
(0267) if(BUTTON1)time[4]=SWL_time;else time[4]=SWH_time;
    01BA 9BB1      SBIS	0x16,1
    01BB C007      RJMP	0x01C3
    01BC E684      LDI	R24,0x64
    01BD E090      LDI	R25,0
    01BE 9390007F  STS	0x7F,R25
    01C0 9380007E  STS	0x7E,R24
    01C2 C006      RJMP	0x01C9
    01C3 E884      LDI	R24,0x84
    01C4 E093      LDI	R25,3
    01C5 9390007F  STS	0x7F,R25
    01C7 9380007E  STS	0x7E,R24
(0268) if(BUTTON2)time[5]=SWL_time;else time[5]=SWH_time;
    01C9 9BB2      SBIS	0x16,2
    01CA C007      RJMP	0x01D2
    01CB E684      LDI	R24,0x64
    01CC E090      LDI	R25,0
    01CD 93900081  STS	0x81,R25
    01CF 93800080  STS	0x80,R24
    01D1 C006      RJMP	0x01D8
    01D2 E884      LDI	R24,0x84
    01D3 E093      LDI	R25,3
    01D4 93900081  STS	0x81,R25
    01D6 93800080  STS	0x80,R24
(0269) if(BUTTON3)time[6]=SWL_time;else time[6]=SWH_time;
    01D8 9BB3      SBIS	0x16,3
    01D9 C007      RJMP	0x01E1
    01DA E684      LDI	R24,0x64
    01DB E090      LDI	R25,0
    01DC 93900083  STS	0x83,R25
    01DE 93800082  STS	0x82,R24
    01E0 C006      RJMP	0x01E7
    01E1 E884      LDI	R24,0x84
    01E2 E093      LDI	R25,3
    01E3 93900083  STS	0x83,R25
    01E5 93800082  STS	0x82,R24
(0270) if(BUTTON4)time[7]=SWL_time;else time[7]=SWH_time;
    01E7 9BB4      SBIS	0x16,4
    01E8 C007      RJMP	0x01F0
    01E9 E684      LDI	R24,0x64
    01EA E090      LDI	R25,0
    01EB 93900085  STS	0x85,R25
    01ED 93800084  STS	0x84,R24
    01EF C006      RJMP	0x01F6
    01F0 E884      LDI	R24,0x84
    01F1 E093      LDI	R25,3
    01F2 93900085  STS	0x85,R25
    01F4 93800084  STS	0x84,R24
(0271) 
(0272) time[8]=12000-time[0]-time[1]-time[2]-time[3]-time[4]-time[5]-time[6]-time[7];
    01F6 90200076  LDS	R2,time
    01F8 90300077  LDS	R3,time+1
    01FA EE80      LDI	R24,0xE0
    01FB E29E      LDI	R25,0x2E
    01FC 1982      SUB	R24,R2
    01FD 0993      SBC	R25,R3
    01FE 90200078  LDS	R2,time+2
    0200 90300079  LDS	R3,time+3
    0202 1982      SUB	R24,R2
    0203 0993      SBC	R25,R3
    0204 9020007A  LDS	R2,0x7A
    0206 9030007B  LDS	R3,0x7B
    0208 1982      SUB	R24,R2
    0209 0993      SBC	R25,R3
    020A 9020007C  LDS	R2,0x7C
    020C 9030007D  LDS	R3,0x7D
    020E 1982      SUB	R24,R2
    020F 0993      SBC	R25,R3
    0210 9020007E  LDS	R2,0x7E
    0212 9030007F  LDS	R3,0x7F
    0214 1982      SUB	R24,R2
    0215 0993      SBC	R25,R3
    0216 90200080  LDS	R2,0x80
    0218 90300081  LDS	R3,0x81
    021A 1982      SUB	R24,R2
    021B 0993      SBC	R25,R3
    021C 90200082  LDS	R2,0x82
    021E 90300083  LDS	R3,0x83
    0220 1982      SUB	R24,R2
    0221 0993      SBC	R25,R3
    0222 90200084  LDS	R2,0x84
    0224 90300085  LDS	R3,0x85
    0226 1982      SUB	R24,R2
    0227 0993      SBC	R25,R3
    0228 93900087  STS	0x87,R25
    022A 93800086  STS	0x86,R24
(0273) 
(0274) WDR();
    022C 95A8      WDR
(0275) 
(0276) if(safe)
    022D 8409      LDD	R0,Y+9
    022E 2000      TST	R0
    022F F0C9      BEQ	0x0249
(0277) {
(0278) youmen=time[2];
    0230 90E0007A  LDS	R14,0x7A
    0232 90F0007B  LDS	R15,0x7B
(0279) time[2]=0;
    0234 2422      CLR	R2
    0235 2433      CLR	R3
    0236 9230007B  STS	0x7B,R3
    0238 9220007A  STS	0x7A,R2
(0280) if(safedelay>3)
    023A E083      LDI	R24,3
    023B 840A      LDD	R0,Y+10
    023C 1580      CP	R24,R0
    023D F440      BCC	0x0246
(0281)  {
(0282)   if(youmen<50)safe=0;
    023E 01C7      MOVW	R24,R14
    023F 3382      CPI	R24,0x32
    0240 E0E0      LDI	R30,0
    0241 079E      CPC	R25,R30
    0242 F430      BCC	0x0249
    0243 2400      CLR	R0
    0244 8609      STD	Y+9,R0
(0283)  }
    0245 C003      RJMP	0x0249
(0284) else safedelay++;
    0246 840A      LDD	R0,Y+10
    0247 9403      INC	R0
    0248 860A      STD	Y+10,R0
(0285) }
(0286) 
(0287) 
(0288) if(!(BUTTON5))
    0249 99B5      SBIC	0x16,5
    024A C016      RJMP	0x0261
(0289) {
(0290) TCCR0 = 0x05; //start timer//开始判断有无信号
    024B E085      LDI	R24,5
    024C BF83      OUT	0x33,R24
(0291) GICR  = 0xC0;//外中断开
    024D EC80      LDI	R24,0xC0
    024E BF8B      OUT	0x3B,R24
(0292)   if (input)
    024F 90200073  LDS	R2,input
    0251 2022      TST	R2
    0252 F041      BEQ	0x025B
(0293)   {
(0294)   TCCR1B = 0x00;//原来的信号发送关闭
    0253 2422      CLR	R2
    0254 BC2E      OUT	0x2E,R2
(0295)   train=1;//开始训练
    0255 E081      LDI	R24,1
    0256 93800074  STS	train,R24
(0296)   ch_counter=0;//等待放行
    0258 92200072  STS	ch_counter,R2
(0297)   }
    025A C010      RJMP	0x026B
(0298)   else
(0299)   {
(0300)   TCCR1B = 0x02;
    025B E082      LDI	R24,2
    025C BD8E      OUT	0x2E,R24
(0301)   train=0;//退出时关闭训练
    025D 2422      CLR	R2
    025E 92200074  STS	train,R2
(0302)    ////原来的信号发送打开
(0303)   }
(0304) }//if(!(BUTTON5))
    0260 C00A      RJMP	0x026B
(0305) else
(0306) {
(0307) GICR  = 0x00;//外中断关
    0261 2422      CLR	R2
    0262 BE2B      OUT	0x3B,R2
(0308) TCCR0 = 0x00;
    0263 BE23      OUT	0x33,R2
(0309) TCNT0 = 0x00;
    0264 BE22      OUT	0x32,R2
(0310) train=0;
    0265 92200074  STS	train,R2
(0311) input=0;
    0267 92200073  STS	input,R2
(0312) TCCR1B = 0x02;
    0269 E082      LDI	R24,2
    026A BD8E      OUT	0x2E,R24
(0313) }
(0314) 
(0315) ////////////////////////////
(0316) 
(0317) if(checken==0)
    026B 8408      LDD	R0,Y+8
    026C 2000      TST	R0
    026D F571      BNE	0x029C
(0318) {
(0319) if(battcheck)
    026E 840B      LDD	R0,Y+11
    026F 2000      TST	R0
    0270 F171      BEQ	0x029F
(0320) {
(0321) if(batt<450) //进入报警状态
    0271 3C62      CPI	R22,0xC2
    0272 E0E1      LDI	R30,1
    0273 077E      CPC	R23,R30
    0274 F528      BCC	0x029A
(0322) {
(0323)   if(batt>393) //进入频闪状态
    0275 E889      LDI	R24,0x89
    0276 E091      LDI	R25,1
    0277 1786      CP	R24,R22
    0278 0797      CPC	R25,R23
    0279 F4E0      BCC	0x0296
(0324) {
(0325) warning_frequency=batt-390;
    027A 01CB      MOVW	R24,R22
    027B 5886      SUBI	R24,0x86
    027C 4091      SBCI	R25,1
    027D 2EA8      MOV	R10,R24
(0326) warning_counter++;
    027E 840C      LDD	R0,Y+12
    027F 9403      INC	R0
    0280 860C      STD	Y+12,R0
(0327) if(warning_counter>=warning_frequency)
    0281 1608      CP	R0,R24
    0282 F0E0      BCS	0x029F
(0328) {
(0329) warning_counter=0;
    0283 2400      CLR	R0
    0284 860C      STD	Y+12,R0
(0330) ledonof=!ledonof;
    0285 840D      LDD	R0,Y+13
    0286 2000      TST	R0
    0287 F421      BNE	0x028C
    0288 E081      LDI	R24,1
    0289 E090      LDI	R25,0
    028A 016C      MOVW	R12,R24
    028B C002      RJMP	0x028E
    028C 24CC      CLR	R12
    028D 24DD      CLR	R13
    028E 86CD      STD	Y+13,R12
(0331) if(ledonof)LEDH;
    028F 2C0C      MOV	R0,R12
    0290 20CC      TST	R12
    0291 F011      BEQ	0x0294
    0292 9AC0      SBI	0x18,0
    0293 C00B      RJMP	0x029F
(0332) else LEDL;
    0294 98C0      CBI	0x18,0
(0333) }
(0334) }
    0295 C009      RJMP	0x029F
(0335)  else {LEDH;battcheck=0; }//进入长亮状态,不允许电压回升
    0296 9AC0      SBI	0x18,0
    0297 2400      CLR	R0
    0298 860B      STD	Y+11,R0
(0336) 
(0337) }
    0299 C005      RJMP	0x029F
(0338) 
(0339) else LEDL;  //关闭
    029A 98C0      CBI	0x18,0
(0340) }
(0341) }//if(checken==0)
    029B C003      RJMP	0x029F
(0342) else checken--;
    029C 8408      LDD	R0,Y+8
    029D 940A      DEC	R0
    029E 8608      STD	Y+8,R0
(0343) 
(0344) 
(0345) ////////////////////////////
(0346) 
(0347) while(ch_counter);
FILE: <library>
    029F 90200072  LDS	R2,ch_counter
    02A1 2022      TST	R2
    02A2 F7E1      BNE	0x029F
    02A3 CEDA      RJMP	0x017E
    02A4 962E      ADIW	R28,0xE
    02A5 9508      RET
pop_gset2:
    02A6 E0E2      LDI	R30,2
    02A7 C00C      RJMP	pop
push_gset5:
    02A8 92FA      ST	R15,-Y
    02A9 92EA      ST	R14,-Y
push_gset4:
    02AA 92DA      ST	R13,-Y
    02AB 92CA      ST	R12,-Y
push_gset3:
    02AC 92BA      ST	R11,-Y
    02AD 92AA      ST	R10,-Y
push_gset2:
    02AE 937A      ST	R23,-Y
    02AF 936A      ST	R22,-Y
push_gset1:
    02B0 935A      ST	R21,-Y
    02B1 934A      ST	R20,-Y
    02B2 9508      RET
pop_gset1:
    02B3 E0E1      LDI	R30,1
pop:
    02B4 9149      LD	R20,Y+
    02B5 9159      LD	R21,Y+
    02B6 FDE0      SBRC	R30,0
    02B7 9508      RET
    02B8 9169      LD	R22,Y+
    02B9 9179      LD	R23,Y+
    02BA FDE1      SBRC	R30,1
    02BB 9508      RET
    02BC 90A9      LD	R10,Y+
    02BD 90B9      LD	R11,Y+
    02BE FDE2      SBRC	R30,2
    02BF 9508      RET
    02C0 90C9      LD	R12,Y+
    02C1 90D9      LD	R13,Y+
    02C2 FDE3      SBRC	R30,3
    02C3 9508      RET
    02C4 90E9      LD	R14,Y+
    02C5 90F9      LD	R15,Y+
    02C6 9508      RET

⌨️ 快捷键说明

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