📄 inject.lst
字号:
(0114) void timer1_compa_isr(void)
(0115) {
(0116) //compare occured TCNT1=OCR1A
(0117) switch(ActFlag1)
2B6 9100 0128 LDS R16,ActFlag1
2B8 2711 CLR R17
2B9 3000 CPI R16,0
2BA 0701 CPC R16,R17
2BB F031 BEQ 0x02C2
2BC 3001 CPI R16,1
2BD E0E0 LDI R30,0
2BE 071E CPC R17,R30
2BF F409 BNE 0x02C1
2C0 C090 RJMP 0x0351
2C1 C0AC RJMP 0x036E
(0118) {
(0119) case 0:
(0120) {
(0121) if(HighByte1 == 0)
2C2 9020 0116 LDS R2,HighByte1
2C4 2022 TST R2
2C5 F009 BEQ 0x02C7
2C6 C081 RJMP 0x0348
(0122) {
(0123) if((SSpray1Num>0)||(Spray1Num==0))
2C7 E080 LDI R24,0
2C8 E090 LDI R25,0
2C9 E0A0 LDI R26,0
2CA E0B0 LDI R27,0
2CB 9040 011E LDS R4,SSpray1Num+2
2CD 9050 011F LDS R5,SSpray1Num+3
2CF 9020 011C LDS R2,SSpray1Num
2D1 9030 011D LDS R3,SSpray1Num+1
2D3 1628 CP R2,R24
2D4 0639 CPC R3,R25
2D5 064A CPC R4,R26
2D6 065B CPC R5,R27
2D7 F491 BNE 0x02EA
2D8 E080 LDI R24,0
2D9 E090 LDI R25,0
2DA E0A0 LDI R26,0
2DB E0B0 LDI R27,0
2DC 9040 0102 LDS R4,Spray1Num+2
2DE 9050 0103 LDS R5,Spray1Num+3
2E0 9020 0100 LDS R2,Spray1Num
2E2 9030 0101 LDS R3,Spray1Num+1
2E4 1628 CP R2,R24
2E5 0639 CPC R3,R25
2E6 064A CPC R4,R26
2E7 065B CPC R5,R27
2E8 F009 BEQ 0x02EA
2E9 C084 RJMP 0x036E
(0124) //喷油器控制引脚置高
(0125) //Spray1Num--;
(0126) {
(0127) PORTB = PORTB |(1<<PB2);
2EA 9A2A SBI 0x05,2
(0128) PORTB = PORTB |(1<<PB3);
2EB 9A2B SBI 0x05,3
(0129) PORTB = PORTB |(1<<PB4);
2EC 9A2C SBI 0x05,4
(0130) PORTB = PORTB |(1<<PB1);
2ED 9A29 SBI 0x05,1
(0131) PORTD = PORTD |(1<<PD4);
2EE 9A5C SBI 0x0B,4
(0132) PORTD = PORTD |(1<<PD5);
2EF 9A5D SBI 0x0B,5
(0133)
(0134) OCR1A = TCNT1 + CSpray1On; //喷油器关定时
2F0 9020 0108 LDS R2,CSpray1On
2F2 9030 0109 LDS R3,CSpray1On+1
2F4 9040 0084 LDS R4,0x0084
2F6 9050 0085 LDS R5,0x0085
2F8 0C42 ADD R4,R2
2F9 1C53 ADC R5,R3
2FA 9250 0089 STS 0x0089,R5
2FC 9240 0088 STS 0x0088,R4
(0135) if (Spray1Num>0)
2FE E080 LDI R24,0
2FF E090 LDI R25,0
300 E0A0 LDI R26,0
301 E0B0 LDI R27,0
302 9040 0102 LDS R4,Spray1Num+2
304 9050 0103 LDS R5,Spray1Num+3
306 9020 0100 LDS R2,Spray1Num
308 9030 0101 LDS R3,Spray1Num+1
30A 1628 CP R2,R24
30B 0639 CPC R3,R25
30C 064A CPC R4,R26
30D 065B CPC R5,R27
30E F0C1 BEQ 0x0327
(0136) SSpray1Num--;
30F E081 LDI R24,1
310 E090 LDI R25,0
311 E0A0 LDI R26,0
312 E0B0 LDI R27,0
313 9040 011E LDS R4,SSpray1Num+2
315 9050 011F LDS R5,SSpray1Num+3
317 9020 011C LDS R2,SSpray1Num
319 9030 011D LDS R3,SSpray1Num+1
31B 1A28 SUB R2,R24
31C 0A39 SBC R3,R25
31D 0A4A SBC R4,R26
31E 0A5B SBC R5,R27
31F 9230 011D STS SSpray1Num+1,R3
321 9220 011C STS SSpray1Num,R2
323 9250 011F STS SSpray1Num+3,R5
325 9240 011E STS SSpray1Num+2,R4
(0137) if(Spray1Num <= 0)
327 E080 LDI R24,0
328 E090 LDI R25,0
329 E0A0 LDI R26,0
32A E0B0 LDI R27,0
32B 9040 0102 LDS R4,Spray1Num+2
32D 9050 0103 LDS R5,Spray1Num+3
32F 9020 0100 LDS R2,Spray1Num
331 9030 0101 LDS R3,Spray1Num+1
333 1628 CP R2,R24
334 0639 CPC R3,R25
335 064A CPC R4,R26
336 065B CPC R5,R27
337 F461 BNE 0x0344
(0138) Spray1Num = 0;
338 E080 LDI R24,0
339 E090 LDI R25,0
33A E0A0 LDI R26,0
33B E0B0 LDI R27,0
33C 9390 0101 STS Spray1Num+1,R25
33E 9380 0100 STS Spray1Num,R24
340 93B0 0103 STS Spray1Num+3,R27
342 93A0 0102 STS Spray1Num+2,R26
(0139) //T1COMPA = OCR1A;
(0140) ActFlag1 = 1; //转换到下一动作
344 E081 LDI R24,1
345 9380 0128 STS ActFlag1,R24
(0141) }
(0142) }
347 C026 RJMP 0x036E
(0143) else
(0144) {
(0145) HighByte1 --;
348 9180 0116 LDS R24,HighByte1
34A 5081 SUBI R24,1
34B 9380 0116 STS HighByte1,R24
(0146) ActFlag1= 0; //转换到下一动作
34D 2422 CLR R2
34E 9220 0128 STS ActFlag1,R2
(0147) }
(0148) break;
350 C01D RJMP 0x036E
(0149) }
(0150) case 1:
(0151) {
(0152)
(0153) PORTB = PORTB &~(1<<PB2);
351 982A CBI 0x05,2
(0154) PORTB = PORTB &~(1<<PB3);
352 982B CBI 0x05,3
(0155) PORTB = PORTB &~(1<<PB4);
353 982C CBI 0x05,4
(0156) PORTB = PORTB &~(1<<PB1);
354 9829 CBI 0x05,1
(0157) PORTD = PORTD &~(1<<PD4);
355 985C CBI 0x0B,4
(0158) PORTD = PORTD &~(1<<PD5);
356 985D CBI 0x0B,5
(0159) //if(HighByte1 == 0)
(0160) {
(0161) OCR1A = TCNT1 + ( unsigned int )CSpray1Cyc - CSpray1On ;
357 9020 0104 LDS R2,CSpray1Cyc
359 9030 0105 LDS R3,CSpray1Cyc+1
35B 9040 0084 LDS R4,0x0084
35D 9050 0085 LDS R5,0x0085
35F 0C42 ADD R4,R2
360 1C53 ADC R5,R3
361 9020 0108 LDS R2,CSpray1On
363 9030 0109 LDS R3,CSpray1On+1
365 1842 SUB R4,R2
366 0853 SBC R5,R3
367 9250 0089 STS 0x0089,R5
369 9240 0088 STS 0x0088,R4
(0162) ActFlag1= 0; //转换到下一动作
36B 2422 CLR R2
36C 9220 0128 STS ActFlag1,R2
(0163) }
(0164) // else
(0165) // {
(0166) // HighByte1 --;
(0167) // ActFlag1= 1; //转换到下一动作
(0168) // }
(0169) break;
(0170) }
(0171) default:
(0172) break;
36E 90B9 LD R11,Y+
36F 90A9 LD R10,Y+
370 9009 LD R0,Y+
371 BE0F OUT 0x3F,R0
372 91E9 LD R30,Y+
373 91B9 LD R27,Y+
374 91A9 LD R26,Y+
375 9199 LD R25,Y+
376 9189 LD R24,Y+
377 9139 LD R19,Y+
378 9129 LD R18,Y+
379 9119 LD R17,Y+
37A 9109 LD R16,Y+
37B 9099 LD R9,Y+
37C 9089 LD R8,Y+
37D 9059 LD R5,Y+
37E 9049 LD R4,Y+
37F 9039 LD R3,Y+
380 9029 LD R2,Y+
381 9019 LD R1,Y+
382 9009 LD R0,Y+
383 9518 RETI
FILE: C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\main.c
(0001) //ICC-AVR application builder : 2007-4-24 9:11:17
(0002) // Target : M88
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom88v.h>
(0006) #include <macros.h>
(0007) #include <uart.c>
(0008) #include <timer1.c>
(0009) //#include <stdlib.h>
(0010)
(0011) //extern char _bss_end;
(0012) //ADC initialize
(0013) // Conversion time:128 prescale 208uS,free running,AVCC
(0014) //unsigned char AdcIntrCnt = 0;
(0015)
(0016) /*void adc_init(void)
(0017) {
(0018) ADCSRA = 0x00; //disable adc
(0019) ADMUX = 0x42; //select adc input 2,REF = AVCC
(0020) ACSR = 0x80;
(0021) ADCSRB = 0x00;
(0022) DIDR0 = 0x04; //禁用ADC2数字输入缓冲
(0023) ADCSRA = 0xEF;
(0024)
(0025) }*/
(0026)
(0027) /*#pragma interrupt_handler adc_isr:iv_ADC
(0028) void adc_isr(void)
(0029) {
(0030) //conversion complete, read value (int) using...
(0031)
(0032) int value;
(0033) int pressure;
(0034) char *ptr;
(0035) float cal;
(0036)
(0037) value=ADCL; //Read 8 low bits first (important)
(0038) value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
(0039)
(0040) if(++AdcIntrCnt > 100)
(0041) {
(0042) // PORTB = PORTB ^( 1<<PB3); //debug
(0043) AdcIntrCnt = 0;
(0044)
(0045) // putchar(ADCL); //debug
(0046) // putchar(ADCH); //debug
(0047)
(0048) // 进行相应转换,并发送
(0049) // if(value > 204) //电压应该大于1v
(0050) {
(0051) cal = value * 20/ 1023; //Ima,R = 250ohm
(0052) cal = (cal - 4) / 16 * 350 ; //pressure/bar
(0053) pressure = (int)cal;
(0054) ptr = (char*)&pressure;
(0055) putchar(*ptr); //传送压力低字节
(0056) putchar(*(ptr + 1)); //传送压力高字节
(0057) }
(0058)
(0059) }
(0060) }*/
(0061)
(0062)
(0063)
(0064) void port_init(void)
(0065) {
(0066) PORTB = 0x00;
_port_init:
384 2422 CLR R2
385 B825 OUT 0x05,R2
(0067) DDRB = 0x1E;
386 E18E LDI R24,0x1E
387 B984 OUT 0x04,R24
(0068) PORTC = 0x00; //m103 output only
388 B828 OUT 0x08,R2
(0069) DDRC = 0x00;
389 B827 OUT 0x07,R2
(0070) PORTD = 0x08;
38A E088 LDI R24,0x8
38B B98B OUT 0x0B,R24
(0071) DDRD = 0x38;
38C E388 LDI R24,0x38
38D B98A OUT 0x0A,R24
38E 9508 RET
(0072) }
(0073)
(0074) //call this routine to initialize all peripherals
(0075) void init_devices(void)
(0076) {
(0077) //stop errant interrupts until set up
(0078) CLI(); //disable all interrupts
_init_devices:
38F 94F8 BCLR 7
(0079) port_init();
390 DFF3 RCALL _port_init
(0080) timer1_init();
391 DEF3 RCALL _timer1_init
(0081) uart0_init();
392 DCD8 RCALL _uart0_init
(0082) //timer0_init();
(0083) //adc_init();
(0084)
(0085) MCUCR = 0x00;
393 2422 CLR R2
394 BE25 OUT 0x35,R2
(0086) EICRA = 0x00; //extended ext ints
395 9220 0069 STS 0x0069,R2
(0087) EIMSK = 0x00;
397 BA2D OUT 0x1D,R2
(0088)
(0089) TIMSK0 = 0x06; //timer 0 interrupt sources
398 E086 LDI R24,6
399 9380 006E STS 0x006E,R24
(0090) TIMSK1 = 0x07; //timer 1 interrupt sources
39B E087 LDI R24,7
39C 9380 006F STS 0x006F,R24
(0091) TIMSK2 = 0x00; //timer 2 interrupt sources
39E 9220 0070 STS 0x0070,R2
(0092)
(0093) PCMSK0 = 0x00; //pin change mask 0
3A0 9220 006B STS 0x006B,R2
(0094) PCMSK1 = 0x00; //pin change mask 1
3A2 9220 006C STS 0x006C,R2
(0095) PCMSK2 = 0x00; //pin change mask 2
3A4 9220 006D STS 0x006D,R2
(0096) PCICR = 0x00; //pin change enable
3A6 9220 0068 STS 0x0068,R2
(0097) PRR = 0x00; //power controller
3A8 9220 0064 STS 0x0064,R2
(0098) SEI(); //re-enable interrupts
3AA 9478 BSET 7
3AB 9508 RET
(0099) //all peripherals are now initialized
(0100) }
(0101)
(0102)
(0103)
(0104) void main(void)
(0105) {
(0106) unsigned int waitFlag = 0; //串口通讯等待时间计数
_main:
frameLength --> R22
waitFlag --> R20
i --> R10
3AC 2744 CLR R20
3AD 2755 CLR R21
(0107) unsigned char frameLength = 12; //帧长度
3AE E06C LDI R22,0xC
(0108) char i = 0;
3AF 24AA CLR R10
(0109)
(0110) // _NewHeap(&_bss_end + 1,&_bss_end+40);
(0111) //初始化外围器件
(0112) init_devices();
3B0 DFDE RCALL _init_devices
3B1 C02A RJMP 0x03DC
(0113)
(0114) while(1)
(0115) {
(0116) if(FrameHead0 > 0) //帧接收中
3B2 E080 LDI R24,0
3B3 9020 0161 LDS R2,FrameHead0
3B5 1582 CP R24,R2
3B6 F528 BCC 0x03DC
(0117) {
(0118) TCCR1B = 0x00; //关定时器1,准备接收数据
3B7 2422 CLR R2
3B8 9220 0081 STS 0x0081,R2
(0119) //ADCSRA = ADCSRA & ~(1<<ADIE); //disable adc interrupt
(0120) putchar(IDLE); //为和数据区分开,采用两字节的控制命令
3BA EF0D LDI R16,0xFD
3BB DD7F RCALL _putchar
(0121) putchar(IDLE);
3BC EF0D LDI R16,0xFD
3BD DD7D RCALL _putchar
(0122) i = 1;
3BE 24AA CLR R10
3BF 94A3 INC R10
3C0 C019 RJMP 0x03DA
(0123) while(i)
(0124) {
(0125) if(rx_counter0 == frameLength) //缓冲区收到规定字符数
3C1 9020 0163 LDS R2,rx_counter0
3C3 1626 CP R2,R22
3C4 F431 BNE 0x03CB
(0126) {
(0127) //处理缓冲区数据
(0128) DisposeBufDatas();
3C5 DDA8 RCALL _DisposeBufDatas
(0129) // FlashRxBuf(); //debug
(0130) waitFlag = 0;
3C6 2744 CLR R20
3C7 2755 CLR R21
(0131) timer1_init(); //开定时器
3C8 DEBC RCALL _timer1_init
(0132) //ADCSRA = ADCSRA | (1<<ADIE); //enable adc interrupt
(0133) i = 0;
3C9 24AA CLR R10
(0134)
(0135) }
3CA C00F RJMP 0x03DA
(0136) else
(0137) {
(0138) waitFlag++;
3CB 5F4F SUBI R20,0xFF
3CC 4F5F SBCI R21,0xFF
(0139) if(waitFlag == 0xFFFF) //等待超时,刷新缓冲区
3CD 3F4F CPI R20,0xFF
3CE EFEF LDI R30,0xFF
3CF 075E CPC R21,R30
3D0 F449 BNE 0x03DA
(0140) {
(0141) waitFlag = 0;
3D1 2744 CLR R20
3D2 2755 CLR R21
(0142) FlashRxBuf();
3D3 DC8D RCALL _FlashRxBuf
(0143) putchar(250); //回传超时标志 debug
3D4 EF0A LDI R16,0xFA
3D5 DD65 RCALL _putchar
(0144) putchar(250); //回传chongfa曛
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -