📄 inject.lst
字号:
171 9403 INC R0
172 8208 STD Y+0,R0
(0151) if((SREG & 0x80) == 0x00) //I之前是否置位
173 B62F IN R2,0x3F
174 FC27 SBRC R2,7
175 C002 RJMP 0x0178
(0152) IisOn = 0;
176 2400 CLR R0
177 8208 STD Y+0,R0
(0153)
(0154) if(rx_error0) //接收错误
178 9020 0162 LDS R2,rx_error0
17A 2022 TST R2
17B F059 BEQ 0x0187
(0155) {
(0156) CLI();
17C 94F8 BCLR 7
(0157) putchar(SENDAGAIN);
17D EF0E LDI R16,0xFE
17E DFBC RCALL _putchar
(0158) putchar(SENDAGAIN);
17F EF0E LDI R16,0xFE
180 DFBA RCALL _putchar
(0159) if(IisOn)
181 8008 LDD R0,Y+0
182 2000 TST R0
183 F409 BNE 0x0185
184 C0F2 RJMP 0x0277
(0160) SEI();
185 9478 BSET 7
(0161) }
186 C0F0 RJMP 0x0277
(0162) else
(0163) {
(0164) spray1NumL = getchar();
187 DF60 RCALL _getchar
188 830D STD Y+5,R16
(0165) spray1NumH = getchar();
189 DF5E RCALL _getchar
18A 830E STD Y+6,R16
(0166) tSpray1On = getchar();
18B DF5C RCALL _getchar
18C 2EA0 MOV R10,R16
18D 82AA STD Y+2,R10
(0167) tSpray1Cyc = getchar();
18E DF59 RCALL _getchar
18F 2EA0 MOV R10,R16
190 2C2A MOV R2,R10
191 2433 CLR R3
192 823C STD Y+4,R3
193 822B STD Y+3,R2
(0168) tPump1Cyc = getchar();
194 DF53 RCALL _getchar
195 2EA0 MOV R10,R16
196 82A9 STD Y+1,R10
(0169) tPump1On = getchar();
197 DF50 RCALL _getchar
198 2EA0 MOV R10,R16
(0170)
(0171) spray2NumL = getchar();
199 DF4E RCALL _getchar
19A 2EC0 MOV R12,R16
(0172) spray2NumH = getchar();
19B DF4C RCALL _getchar
19C 2EE0 MOV R14,R16
(0173) //tSpray2On = getchar();
(0174) //tSpray2Cyc = getchar();
(0175) //tPump2Cyc = getchar();
(0176) //tPump2On = getchar();
(0177)
(0178) /************debug*****************/
(0179) //putchar(sprayNumL); //debug
(0180) //putchar(sprayNumH); //debug
(0181) // putchar(tPump1Cyc); //debug
(0182) //putchar(tSprayOn); //debug
(0183) //putchar(tSprayCyc); //debug
(0184) //putchar(tPivDelay); //debug
(0185)
(0186) //**********************************/
(0187)
(0188) //转换数据
(0189) Pump1Num = (int)spray1NumL + ((int)spray1NumH << 8);
19D 802E LDD R2,Y+6
19E 2433 CLR R3
19F 2C32 MOV R3,R2
1A0 2422 CLR R2
1A1 804D LDD R4,Y+5
1A2 2455 CLR R5
1A3 0C42 ADD R4,R2
1A4 1C53 ADC R5,R3
1A5 0112 MOVW R2,R4
1A6 2444 CLR R4
1A7 FC37 SBRC R3,7
1A8 9440 COM R4
1A9 2455 CLR R5
1AA FC47 SBRC R4,7
1AB 9450 COM R5
1AC 9230 010B STS Pump1Num+1,R3
1AE 9220 010A STS Pump1Num,R2
1B0 9250 010D STS Pump1Num+3,R5
1B2 9240 010C STS Pump1Num+2,R4
(0190) PPump1Num = Pump1Num;
1B4 9230 0119 STS PPump1Num+1,R3
1B6 9220 0118 STS PPump1Num,R2
1B8 9250 011B STS PPump1Num+3,R5
1BA 9240 011A STS PPump1Num+2,R4
(0191) Spray1Num = Pump1Num ;
1BC 9230 0101 STS Spray1Num+1,R3
1BE 9220 0100 STS Spray1Num,R2
1C0 9250 0103 STS Spray1Num+3,R5
1C2 9240 0102 STS Spray1Num+2,R4
(0192) SSpray1Num = Spray1Num;
1C4 9040 0102 LDS R4,Spray1Num+2
1C6 9050 0103 LDS R5,Spray1Num+3
1C8 9020 0100 LDS R2,Spray1Num
1CA 9030 0101 LDS R3,Spray1Num+1
1CC 9230 011D STS SSpray1Num+1,R3
1CE 9220 011C STS SSpray1Num,R2
1D0 9250 011F STS SSpray1Num+3,R5
1D2 9240 011E STS SSpray1Num+2,R4
(0193) CPump1Cyc = tPump1Cyc * 1000-370;//修正0.37ms
1D4 8129 LDD R18,Y+1
1D5 2733 CLR R19
1D6 EE08 LDI R16,0xE8
1D7 E013 LDI R17,3
1D8 D205 RCALL empy16s
1D9 01C8 MOVW R24,R16
1DA 5782 SUBI R24,0x72
1DB 4091 SBCI R25,1
1DC 9390 010F STS CPump1Cyc+1,R25
1DE 9380 010E STS CPump1Cyc,R24
(0194) CPump1CycH = (CPump1Cyc >> 8);
1E0 011C MOVW R2,R24
1E1 2C23 MOV R2,R3
1E2 2433 CLR R3
1E3 9230 0111 STS CPump1CycH+1,R3
1E5 9220 0110 STS CPump1CycH,R2
(0195) CSpray1On = (unsigned int)(tSpray1On * 100 );
1E7 E684 LDI R24,0x64
1E8 800A LDD R0,Y+2
1E9 9D80 MUL R24,R0
1EA 9210 0109 STS CSpray1On+1,R1
1EC 9200 0108 STS CSpray1On,R0
(0196) CSpray1Cyc = (unsigned long )tSpray1Cyc * 1000 ;
1EE 802B LDD R2,Y+3
1EF 803C LDD R3,Y+4
1F0 2444 CLR R4
1F1 2455 CLR R5
1F2 EE48 LDI R20,0xE8
1F3 E053 LDI R21,3
1F4 E060 LDI R22,0
1F5 E070 LDI R23,0
1F6 925A ST R5,-Y
1F7 924A ST R4,-Y
1F8 923A ST R3,-Y
1F9 922A ST R2,-Y
1FA 018A MOVW R16,R20
1FB 019B MOVW R18,R22
1FC D1F1 RCALL empy32u
1FD 9310 0105 STS CSpray1Cyc+1,R17
1FF 9300 0104 STS CSpray1Cyc,R16
201 9330 0107 STS CSpray1Cyc+3,R19
203 9320 0106 STS CSpray1Cyc+2,R18
(0197) CPump1On = tPump1On * 1000;
205 2D2A MOV R18,R10
206 2733 CLR R19
207 EE08 LDI R16,0xE8
208 E013 LDI R17,3
209 D1D4 RCALL empy16s
20A 9310 0113 STS CPump1On+1,R17
20C 9300 0112 STS CPump1On,R16
(0198) CPump1OnH = (CPump1On >> 8);
20E 0118 MOVW R2,R16
20F 2C23 MOV R2,R3
210 2433 CLR R3
211 9230 0115 STS CPump1OnH+1,R3
213 9220 0114 STS CPump1OnH,R2
(0199)
(0200) Spray2Num = (int)spray2NumL + ((int)spray2NumH << 8);
215 2C2E MOV R2,R14
216 2433 CLR R3
217 2C32 MOV R3,R2
218 2422 CLR R2
219 2C4C MOV R4,R12
21A 2455 CLR R5
21B 0C42 ADD R4,R2
21C 1C53 ADC R5,R3
21D 0112 MOVW R2,R4
21E 2444 CLR R4
21F FC37 SBRC R3,7
220 9440 COM R4
221 2455 CLR R5
222 FC47 SBRC R4,7
223 9450 COM R5
224 9230 012B STS Spray2Num+1,R3
226 9220 012A STS Spray2Num,R2
228 9250 012D STS Spray2Num+3,R5
22A 9240 012C STS Spray2Num+2,R4
(0201) Pump2Num = Spray2Num;
22C 9230 0135 STS Pump2Num+1,R3
22E 9220 0134 STS Pump2Num,R2
230 9250 0137 STS Pump2Num+3,R5
232 9240 0136 STS Pump2Num+2,R4
(0202) PPump2Num = Pump2Num;
234 9040 0136 LDS R4,Pump2Num+2
236 9050 0137 LDS R5,Pump2Num+3
238 9020 0134 LDS R2,Pump2Num
23A 9030 0135 LDS R3,Pump2Num+1
23C 9230 0143 STS PPump2Num+1,R3
23E 9220 0142 STS PPump2Num,R2
240 9250 0145 STS PPump2Num+3,R5
242 9240 0144 STS PPump2Num+2,R4
(0203) SSpray2Num = Spray2Num;
244 9040 012C LDS R4,Spray2Num+2
246 9050 012D LDS R5,Spray2Num+3
248 9020 012A LDS R2,Spray2Num
24A 9030 012B LDS R3,Spray2Num+1
24C 9230 0147 STS SSpray2Num+1,R3
24E 9220 0146 STS SSpray2Num,R2
250 9250 0149 STS SSpray2Num+3,R5
252 9240 0148 STS SSpray2Num+2,R4
(0204) //Pump2Num = Pump1Num;
(0205) //CPump2Cyc = tPump2Cyc * 1000 -350;
(0206) //CPump2Cyc = CPump1Cyc;
(0207) //CPump2CycH = (CPump2Cyc >> 8);
(0208) //CPump2CycH =CPump1CycH ;
(0209) //CSpray2On = (unsigned int)(tSpray2On * 100 );
(0210) //CSpray2Cyc = (unsigned long )tSpray2Cyc * 1000 ;
(0211) //CPump2On = tPump2On * 1000 -200;
(0212) //CPump2On = CPump1On;
(0213) //CPump2OnH = (CPump2On >> 8);
(0214) //CPump2OnH = CPump1OnH;
(0215) HighByte1 = (unsigned char )(CSpray1Cyc >> 16);
254 9040 0106 LDS R4,CSpray1Cyc+2
256 9050 0107 LDS R5,CSpray1Cyc+3
258 9020 0104 LDS R2,CSpray1Cyc
25A 9030 0105 LDS R3,CSpray1Cyc+1
25C 0112 MOVW R2,R4
25D 2444 CLR R4
25E 2455 CLR R5
25F 9220 0116 STS HighByte1,R2
(0216) HighByte2 = (unsigned char )(CSpray2Cyc >> 16);
261 9040 0130 LDS R4,CSpray2Cyc+2
263 9050 0131 LDS R5,CSpray2Cyc+3
265 9020 012E LDS R2,CSpray2Cyc
267 9030 012F LDS R3,CSpray2Cyc+1
269 0112 MOVW R2,R4
26A 2444 CLR R4
26B 2455 CLR R5
26C 9220 0140 STS HighByte2,R2
(0217)
(0218)
(0219) CLI(); //禁止中断,保证以下发送的两字节连续
26E 94F8 BCLR 7
(0220) putchar(REVSUCCEED); //回传接收成功标志
26F EF0C LDI R16,0xFC
270 DECA RCALL _putchar
(0221) putchar(REVSUCCEED); //回传接收成功标志
271 EF0C LDI R16,0xFC
272 DEC8 RCALL _putchar
(0222)
(0223) if(IisOn)
273 8008 LDD R0,Y+0
274 2000 TST R0
275 F009 BEQ 0x0277
(0224) SEI();
276 9478 BSET 7
(0225) }
(0226) FlashRxBuf();
277 DDE9 RCALL _FlashRxBuf
278 9627 ADIW R28,7
279 C1A4 RJMP pop_xgsetF0FC
FILE: C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.c
(0001) #include <iom88v.h>
(0002) #include <macros.h>
(0003) #include <uart.h>
(0004) #include <timer1.h>
(0005)
(0006)
(0007) //TIMER0 initialize - prescale:8
(0008) // WGM: Normal
(0009) // desired value: 1Hz
(0010) // actual value: 1953.125Hz (99.9%)
(0011) void timer0_init(void)
(0012) {
(0013) TCCR0B = 0x00; //stop
_timer0_init:
27A 2422 CLR R2
27B BC25 OUT 0x25,R2
(0014) TCNT0 = 0x00; //set count
27C BC26 OUT 0x26,R2
(0015) TCCR0A = 0x00;
27D BC24 OUT 0x24,R2
(0016) TCCR0B = 0x02; //start timer
27E E082 LDI R24,2
27F BD85 OUT 0x25,R24
(0017) OCR0B = 0x60;
280 E680 LDI R24,0x60
281 BD88 OUT 0x28,R24
(0018) OCR0A = 0x03;
282 E083 LDI R24,3
283 BD87 OUT 0x27,R24
284 9508 RET
(0019) }
(0020)
(0021) //TIMER1 initialize - prescale:8
(0022) // WGM: 0) Normal, TOP=0xFFFF
(0023) // desired value: 1MHz
(0024) // actual value: Out of range
(0025) void timer1_init(void)
(0026) {
(0027) TCCR1B = 0x00; //stop
_timer1_init:
285 2422 CLR R2
286 9220 0081 STS 0x0081,R2
(0028) TCNT1H = 0x00 /*INVALID SETTING*/; //setup
288 9220 0085 STS 0x0085,R2
(0029) TCNT1L = 0x00 /*INVALID SETTING*/;
28A 9220 0084 STS 0x0084,R2
(0030) OCR1AH = 0x00 /*INVALID SETTING*/;
28C 9220 0089 STS 0x0089,R2
(0031) OCR1AL = 0x20 /*INVALID SETTING*/;
28E E280 LDI R24,0x20
28F 9380 0088 STS 0x0088,R24
(0032) OCR1BH = 0x02 /*INVALID SETTING*/;
291 E082 LDI R24,2
292 9380 008B STS 0x008B,R24
(0033) OCR1BL = 0xFF /*INVALID SETTING*/;
294 EF8F LDI R24,0xFF
295 9380 008A STS 0x008A,R24
(0034) ICR1H = 0x00 /*INVALID SETTING*/;
297 9220 0087 STS 0x0087,R2
(0035) ICR1L = 0x00 /*INVALID SETTING*/;
299 9220 0086 STS 0x0086,R2
(0036) TCCR1A = 0x00;
29B 9220 0080 STS 0x0080,R2
(0037) TCCR1B = 0x02; //start Timer
29D E082 LDI R24,2
29E 9380 0081 STS 0x0081,R24
2A0 9508 RET
_timer1_compa_isr:
2A1 920A ST R0,-Y
2A2 921A ST R1,-Y
2A3 922A ST R2,-Y
2A4 923A ST R3,-Y
2A5 924A ST R4,-Y
2A6 925A ST R5,-Y
2A7 928A ST R8,-Y
2A8 929A ST R9,-Y
2A9 930A ST R16,-Y
2AA 931A ST R17,-Y
2AB 932A ST R18,-Y
2AC 933A ST R19,-Y
2AD 938A ST R24,-Y
2AE 939A ST R25,-Y
2AF 93AA ST R26,-Y
2B0 93BA ST R27,-Y
2B1 93EA ST R30,-Y
2B2 B60F IN R0,0x3F
2B3 920A ST R0,-Y
2B4 92AA ST R10,-Y
2B5 92BA ST R11,-Y
(0038) }
(0039) /*#pragma interrupt_handler timer0_compb_isr:iv_TIM0_COMPA
(0040) void timer0_compb_isr(void) ///wy修改
(0041) {
(0042) if(Pump1Flag == 1)
(0043) {
(0044) if(Cyc1H== 0)
(0045) {
(0046) if((PPump1Num>0)||(Pump1Num==0))
(0047) {
(0048) PORTB |= (1 << PB4); //开启油泵1
(0049) if (Pump1Num>0)
(0050) PPump1Num--;
(0051) OCR0B = TCNT0 + CPump1On;//定时油泵关闭
(0052) Pump1Flag = 0;
(0053) On1H = CPump1OnH;
(0054) }
(0055)
(0056) }
(0057) else //动作应该为关闭油泵1
(0058) Cyc1H--;
(0059) }
(0060)
(0061) else
(0062) {
(0063) if(On1H == 0)
(0064) {
(0065) PORTB &= ~(1 << PB4); //关闭油泵1
(0066) OCR0B = TCNT0 + CPump1Cyc - CPump1On;
(0067) Pump1Flag = 1;
(0068) Cyc1H = CPump1CycH - CPump1OnH;
(0069) }
(0070) else //动作应该为关闭油泵1
(0071) On1H--;
(0072) }
(0073) }
(0074) */
(0075) /*#pragma interrupt_handler timer0_compa_isr:iv_TIM0_COMPB
(0076) void timer0_compa_isr(void)
(0077) {
(0078) //compare TCNT0=OCR0B
(0079) if(Pump2Flag == 1) //动作应该为开启油泵2
(0080) {
(0081) if(Cyc2H== 0)
(0082) {
(0083) if((PPump2Num>0)||(Pump2Num==0))
(0084) {
(0085) PORTD |= (1 << PD4); //开启油泵2
(0086) if(Pump2Num>0)
(0087) PPump2Num--;
(0088) //定时油泵关闭
(0089) OCR0A = TCNT0 + CPump2On;
(0090) Pump2Flag = 0;
(0091) On2H = CPump2OnH;
(0092) }
(0093) }
(0094) else
(0095) Cyc2H--;
(0096) }
(0097)
(0098) else //动作应该为关闭油泵
(0099) {
(0100) if(On2H == 0)
(0101) {
(0102) PORTD &= ~(1 << PD4);//关闭油泵
(0103) //OCR0A = TCNT0 + 100;
(0104) OCR0A = TCNT0 + CPump2Cyc - CPump2On;
(0105) Pump2Flag = 1;
(0106) Cyc2H = CPump2CycH - CPump2OnH;
(0107) }
(0108) else
(0109) On2H--;
(0110) }
(0111) }*/
(0112)
(0113) #pragma interrupt_handler timer1_compa_isr:iv_TIM1_COMPA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -