📄 ad2disp.lst
字号:
0123 E070 LDI R23,0
0124 929A ST R9,-Y
0125 928A ST R8,-Y
0126 927A ST R7,-Y
0127 926A ST R6,-Y
0128 018A MOVW R16,R20
0129 019B MOVW R18,R22
012A 940E02F2 CALL empy32s
012C 925A ST R5,-Y
012D 924A ST R4,-Y
012E 923A ST R3,-Y
012F 922A ST R2,-Y
0130 940E02F2 CALL empy32s
0132 90200076 LDS R2,0x76
0134 90300077 LDS R3,0x77
0136 2444 CLR R4
0137 2455 CLR R5
0138 925A ST R5,-Y
0139 924A ST R4,-Y
013A 923A ST R3,-Y
013B 922A ST R2,-Y
013C 940E0277 CALL div32s
013E 01FE MOVW R30,R28
013F 8300 STD Z+0,R16
0140 8311 STD Z+1,R17
0141 8322 STD Z+2,R18
0142 8333 STD Z+3,R19
(0081)
(0082) }
(0083)
(0084) display((unsigned int)(result),0);
0143 2722 CLR R18
0144 01FE MOVW R30,R28
0145 8100 LDD R16,Z+0
0146 8111 LDD R17,Z+1
0147 940E0051 CALL _display
(0085) }
(0086) display(AdValue[3],1);
0149 E021 LDI R18,1
014A 91000072 LDS R16,0x72
014C 91100073 LDS R17,0x73
014E 940E0051 CALL _display
(0087) display(AdValue[5],2);
0150 E022 LDI R18,2
0151 91000076 LDS R16,0x76
0153 91100077 LDS R17,0x77
0155 940E0051 CALL _display
(0088) display(AdValue[7]*5,3);
0157 E023 LDI R18,3
0158 9020007A LDS R2,0x7A
015A 9030007B LDS R3,0x7B
015C E005 LDI R16,5
015D E010 LDI R17,0
015E 932F PUSH R18
015F 933F PUSH R19
0160 0191 MOVW R18,R2
0161 940E02E2 CALL empy16s
0163 913F POP R19
0164 912F POP R18
0165 940E0051 CALL _display
0167 C003 RJMP 0x016B
(0089)
(0090) while(!time_flag)
(0091) key=ReadKey();
0168 940E01A7 CALL _ReadKey
016A 2EA0 MOV R10,R16
016B 90200064 LDS R2,0x64
016D 2022 TST R2
016E F3C9 BEQ 0x0168
016F CF78 RJMP 0x00E8
(0092)
(0093) }
(0094) }
0170 9624 ADIW R28,4
0171 9508 RET
_timer2_ovf_isr:
0172 938A ST R24,-Y
0173 B78F IN R24,0x3F
0174 938A ST R24,-Y
FILE: F:\IccAvr_Pro\time.c
(0001)
(0002) #include "time.h"
(0003)
(0004) unsigned char time_flag=0;
(0005) unsigned char pwm=0x7f;
(0006) #pragma interrupt_handler timer2_ovf_isr:5
(0007) void timer2_ovf_isr(void)
(0008) {
(0009) TCNT2 = 0x71; //reload counter value
0175 E781 LDI R24,0x71
0176 BD84 OUT 0x24,R24
(0010) time_flag=1;
0177 E081 LDI R24,1
0178 93800064 STS 0x64,R24
(0011) }
017A 9189 LD R24,Y+
017B BF8F OUT 0x3F,R24
017C 9189 LD R24,Y+
017D 9518 RETI
(0012)
(0013) //TIMER2 initialize - prescale:256
(0014) // WGM: Normal
(0015) // desired value: 5mSec
(0016) // actual value: 4.965mSec (0.7%)
(0017) void timer2_init(void)
(0018) {
(0019) TCCR2 = 0x00; //stop
_timer2_init:
017E 2422 CLR R2
017F BC25 OUT 0x25,R2
(0020) ASSR = 0x00; //set async mode
0180 BC22 OUT 0x22,R2
(0021) TCNT2 = 0x71; //setup
0181 E781 LDI R24,0x71
0182 BD84 OUT 0x24,R24
(0022) OCR2 = 0x8F;
0183 E88F LDI R24,0x8F
0184 BD83 OUT 0x23,R24
(0023) TCCR2 = 0x06; //start
0185 E086 LDI R24,6
0186 BD85 OUT 0x25,R24
(0024) time_flag=0;
0187 92200064 STS 0x64,R2
(0025) }
0189 9508 RET
(0026)
(0027) //TIMER1 initialize - prescale:1
(0028) // WGM: 8) PWM phz freq correct, TOP=ICRn
(0029) // desired value: 14.4KHz
(0030) // actual value: 14.456KHz (0.4%)
(0031) void timer1_init(void)
(0032) {
(0033) DDRD|=BIT(PORTD4)|BIT(PORTD5);
_timer1_init:
018A B381 IN R24,0x11
018B 6380 ORI R24,0x30
018C BB81 OUT 0x11,R24
(0034) TCCR1B = 0x00; //stop
018D 2422 CLR R2
018E BC2E OUT 0x2E,R2
(0035) TCNT1H = 0xFF; //setup
018F EF8F LDI R24,0xFF
0190 BD8D OUT 0x2D,R24
(0036) TCNT1L = 0x01;
0191 E081 LDI R24,1
0192 BD8C OUT 0x2C,R24
(0037) OCR1AH = 0x00;
0193 BC2B OUT 0x2B,R2
(0038) OCR1AL = 0x7f;
0194 E78F LDI R24,0x7F
0195 BD8A OUT 0x2A,R24
(0039) OCR1BH = 0x00;
0196 BC29 OUT 0x29,R2
(0040) OCR1BL = 0x7f;
0197 BD88 OUT 0x28,R24
(0041) ICR1H = 0x00;
0198 BC27 OUT 0x27,R2
(0042) ICR1L = 0xFF;
0199 EF8F LDI R24,0xFF
019A BD86 OUT 0x26,R24
(0043) TCCR1A = 0xA0;
019B EA80 LDI R24,0xA0
019C BD8F OUT 0x2F,R24
(0044) TCCR1B = 0x11; //start Timer
019D E181 LDI R24,0x11
019E BD8E OUT 0x2E,R24
(0045) }
019F 9508 RET
(0046) void pwm_change(unsigned char pwm)
(0047) {
(0048) OCR1AH = 0x00;
_pwm_change:
pwm --> R16
01A0 2422 CLR R2
01A1 BC2B OUT 0x2B,R2
(0049) OCR1AL = pwm;
01A2 BD0A OUT 0x2A,R16
(0050) OCR1BH = 0x00;
01A3 BC29 OUT 0x29,R2
(0051) OCR1BL = pwm;
01A4 BD08 OUT 0x28,R16
(0052) ICR1H = 0x00;
01A5 BC27 OUT 0x27,R2
(0053)
(0054) }
01A6 9508 RET
FILE: F:\IccAvr_Pro\key.c
(0001) #include "key.h"
(0002)
(0003) unsigned char keyflag[4];
(0004)
(0005) unsigned char ReadKey(void)
(0006) {
(0007) unsigned char temp,i;
(0008) temp=PINB&0x0f;
_ReadKey:
temp --> R16
i --> R16
01A7 B306 IN R16,0x16
01A8 700F ANDI R16,0xF
(0009) switch(temp)
01A9 2711 CLR R17
01AA 3007 CPI R16,7
01AB E0E0 LDI R30,0
01AC 071E CPC R17,R30
01AD F0F9 BEQ 0x01CD
01AE 300B CPI R16,0xB
01AF E0E0 LDI R30,0
01B0 071E CPC R17,R30
01B1 F0A9 BEQ 0x01C7
01B2 300D CPI R16,0xD
01B3 E0E0 LDI R30,0
01B4 071E CPC R17,R30
01B5 F059 BEQ 0x01C1
01B6 300E CPI R16,0xE
01B7 E0E0 LDI R30,0
01B8 071E CPC R17,R30
01B9 F009 BEQ 0x01BB
01BA C017 RJMP 0x01D2
(0010) {
(0011) case 0x0e:
(0012) keyflag[0]++;break;
01BB 91800068 LDS R24,_keyflag
01BD 5F8F SUBI R24,0xFF
01BE 93800068 STS _keyflag,R24
01C0 C011 RJMP 0x01D2
(0013) case 0x0d:
(0014) keyflag[1]++;break;
01C1 91800069 LDS R24,_keyflag+1
01C3 5F8F SUBI R24,0xFF
01C4 93800069 STS _keyflag+1,R24
01C6 C00B RJMP 0x01D2
(0015) case 0x0b:
(0016) keyflag[2]++;break;
01C7 9180006A LDS R24,_keyflag+2
01C9 5F8F SUBI R24,0xFF
01CA 9380006A STS _keyflag+2,R24
01CC C005 RJMP 0x01D2
(0017) case 0x07:
(0018) keyflag[3]++;break;
01CD 9180006B LDS R24,_keyflag+3
01CF 5F8F SUBI R24,0xFF
01D0 9380006B STS _keyflag+3,R24
(0019) }
(0020) for(i=0;i<4;i++)
01D2 2700 CLR R16
01D3 C015 RJMP 0x01E9
(0021) {
(0022) if(keyflag[i]==4)
01D4 E688 LDI R24,0x68
01D5 E090 LDI R25,0
01D6 2FE0 MOV R30,R16
01D7 27FF CLR R31
01D8 0FE8 ADD R30,R24
01D9 1FF9 ADC R31,R25
01DA 8180 LDD R24,Z+0
01DB 3084 CPI R24,4
01DC F459 BNE 0x01E8
(0023) {
(0024) keyflag[0]=0;
01DD 2422 CLR R2
01DE 92200068 STS _keyflag,R2
(0025) keyflag[1]=0;
01E0 92200069 STS _keyflag+1,R2
(0026) keyflag[2]=0;
01E2 9220006A STS _keyflag+2,R2
(0027) keyflag[3]=0;
01E4 9220006B STS _keyflag+3,R2
(0028) return i+1;
01E6 5F0F SUBI R16,0xFF
01E7 C004 RJMP 0x01EC
01E8 9503 INC R16
01E9 3004 CPI R16,4
01EA F348 BCS 0x01D4
(0029) }
(0030) }
(0031) return 0;
01EB 2700 CLR R16
01EC 9508 RET
FILE: F:\IccAvr_Pro\ADC.c
(0001)
(0002) #include "ADC.h"
(0003) const unsigned char ADChannel[]={3,5,7,0xff};
(0004) unsigned int AdValue[8];
(0005) unsigned char AdP=0;
(0006) unsigned char AdFlag=0;
(0007) //ADC initialisation
(0008) // Conversion time: 28uS
(0009) void adc_init(void)
(0010) {
(0011) ADCSR = 0x00; //disable adc
_adc_init:
01ED 2422 CLR R2
01EE B826 OUT 0x06,R2
(0012) ADMUX = 0x40; //select adc input 0
01EF E480 LDI R24,0x40
01F0 B987 OUT 0x07,R24
(0013) ACSR = 0x80;
01F1 E880 LDI R24,0x80
01F2 B988 OUT 0x08,R24
(0014) ADCSR = 0x8C;
01F3 E88C LDI R24,0x8C
01F4 B986 OUT 0x06,R24
(0015) AdP=0;
01F5 92200066 STS 0x66,R2
(0016) }
01F7 9508 RET
_adc_isr:
value --> R16
01F8 920A ST R0,-Y
01F9 921A ST R1,-Y
01FA 922A ST R2,-Y
01FB 923A ST R3,-Y
01FC 930A ST R16,-Y
01FD 931A ST R17,-Y
01FE 938A ST R24,-Y
01FF 939A ST R25,-Y
0200 93EA ST R30,-Y
0201 93FA ST R31,-Y
0202 B60F IN R0,0x3F
0203 920A ST R0,-Y
(0017)
(0018) #pragma interrupt_handler adc_isr:15
(0019) void adc_isr(void)
(0020) {
(0021) //conversion complete, read value (int) using...
(0022) // value=ADCL; //Read 8 low bits first (important)
(0023) // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
(0024) unsigned int value;
(0025) value=ADCL;
0204 B104 IN R16,0x04
0205 2711 CLR R17
(0026) value|=(int)ADCH<<8;
0206 B025 IN R2,0x05
0207 2433 CLR R3
0208 2C32 MOV R3,R2
0209 2422 CLR R2
020A 2902 OR R16,R2
020B 2913 OR R17,R3
(0027) AdValue[ADChannel[AdP]]=value;
020C E584 LDI R24,0x54
020D E090 LDI R25,0
020E 91E00066 LDS R30,0x66
0210 27FF CLR R31
0211 0FE8 ADD R30,R24
0212 1FF9 ADC R31,R25
0213 91E4 LPM R30,0(Z)
0214 E082 LDI R24,2
0215 9F8E MUL R24,R30
0216 01F0 MOVW R30,R0
0217 E68C LDI R24,0x6C
0218 E090 LDI R25,0
0219 0FE8 ADD R30,R24
021A 1FF9 ADC R31,R25
021B 8311 STD Z+1,R17
021C 8300 STD Z+0,R16
(0028) AdP++;
021D 91800066 LDS R24,0x66
021F 5F8F SUBI R24,0xFF
0220 93800066 STS 0x66,R24
(0029) if (ADChannel[AdP]!=0xff)
0222 E584 LDI R24,0x54
0223 E090 LDI R25,0
0224 91E00066 LDS R30,0x66
0226 27FF CLR R31
0227 0FE8 ADD R30,R24
0228 1FF9 ADC R31,R25
0229 91E4 LPM R30,0(Z)
022A 3FEF CPI R30,0xFF
022B F051 BEQ 0x0236
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -