📄 wave50%.lst
字号:
__text_start:
__start:
0013 E5CF LDI R28,0x5F
0014 E0D4 LDI R29,4
0015 BFCD OUT 0x3D,R28
0016 BFDE OUT 0x3E,R29
0017 51C0 SUBI R28,0x10
0018 40D0 SBCI R29,0
0019 EA0A LDI R16,0xAA
001A 8308 STD Y+0,R16
001B 2400 CLR R0
001C E6E0 LDI R30,0x60
001D E0F0 LDI R31,0
001E E010 LDI R17,0
001F 36E6 CPI R30,0x66
0020 07F1 CPC R31,R17
0021 F011 BEQ 0x0024
0022 9201 ST R0,Z+
0023 CFFB RJMP 0x001F
0024 8300 STD Z+0,R16
0025 E2E6 LDI R30,0x26
0026 E0F0 LDI R31,0
0027 E6A0 LDI R26,0x60
0028 E0B0 LDI R27,0
0029 E010 LDI R17,0
002A 32E6 CPI R30,0x26
002B 07F1 CPC R31,R17
002C F021 BEQ 0x0031
002D 95C8 LPM
002E 9631 ADIW R30,1
002F 920D ST R0,X+
0030 CFF9 RJMP 0x002A
0031 D0C4 RCALL _main
_exit:
0032 CFFF RJMP _exit
FILE: C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC0控制)\Wave50%.c
(0001) //ICC-AVR application builder : 2006-12-10 11:12:46
(0002) // Target : M8
(0003) // Crystal: 4.0000Mhz
(0004)
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) long Ddummy;
(0008) char Settings_PerDotGroupNum,Settings_PrintPhase;
(0009)
(0010) void port_init(void)
(0011) {
(0012) PORTB = 0x00;
_port_init:
0033 2422 CLR R2
0034 BA28 OUT 0x18,R2
(0013) DDRB = 0xFF;
0035 EF8F LDI R24,0xFF
0036 BB87 OUT 0x17,R24
(0014) PORTC = 0x7F; //m103 output only
0037 E78F LDI R24,0x7F
0038 BB85 OUT 0x15,R24
(0015) DDRC = 0x00;
0039 BA24 OUT 0x14,R2
(0016) PORTD = 0xFF;
003A EF8F LDI R24,0xFF
003B BB82 OUT 0x12,R24
(0017) DDRD = 0x00;
003C BA21 OUT 0x11,R2
(0018) }
003D 9508 RET
(0019)
(0020) //TIMER0 initialisation - prescale:1
(0021) // WGM: Normal
(0022) // desired value: 125KHz
(0023) // actual value: 125.000KHz (0.0%)
(0024) void timer0_init(void)
(0025) {
(0026) TCCR0 = 0x00; //stop
_timer0_init:
003E 2422 CLR R2
003F BE23 OUT 0x33,R2
(0027) TCNT0 = 0xE0; //set count
0040 EE80 LDI R24,0xE0
0041 BF82 OUT 0x32,R24
(0028) TCCR0 = 0x01; //start timer
0042 E081 LDI R24,1
0043 BF83 OUT 0x33,R24
(0029) }
0044 9508 RET
_timer0_ovf_isr:
0045 922A ST R2,-Y
0046 923A ST R3,-Y
0047 924A ST R4,-Y
0048 925A ST R5,-Y
0049 926A ST R6,-Y
004A 927A ST R7,-Y
004B 928A ST R8,-Y
004C 929A ST R9,-Y
004D 930A ST R16,-Y
004E 931A ST R17,-Y
004F 932A ST R18,-Y
0050 933A ST R19,-Y
0051 938A ST R24,-Y
0052 939A ST R25,-Y
0053 93AA ST R26,-Y
0054 93BA ST R27,-Y
0055 93EA ST R30,-Y
0056 B62F IN R2,0x3F
0057 922A ST R2,-Y
0058 D166 RCALL push_gset2
(0030)
(0031) #pragma interrupt_handler timer0_ovf_isr:10
(0032) void timer0_ovf_isr(void)
(0033) {
(0034) Ddummy++;
0059 E041 LDI R20,1
005A E050 LDI R21,0
005B E060 LDI R22,0
005C E070 LDI R23,0
005D 90400064 LDS R4,_Ddummy+2
005F 90500065 LDS R5,_Ddummy+3
0061 90200062 LDS R2,_Ddummy
0063 90300063 LDS R3,_Ddummy+1
0065 0E24 ADD R2,R20
0066 1E35 ADC R3,R21
0067 1E46 ADC R4,R22
0068 1E57 ADC R5,R23
0069 92300063 STS _Ddummy+1,R3
006B 92200062 STS _Ddummy,R2
006D 92500065 STS _Ddummy+3,R5
006F 92400064 STS _Ddummy+2,R4
(0035) if(2*(Ddummy/2)==Ddummy){PORTB &=0xFD;} //PB1脚置低电平
0071 E042 LDI R20,2
0072 E050 LDI R21,0
0073 E060 LDI R22,0
0074 E070 LDI R23,0
0075 937A ST R23,-Y
0076 936A ST R22,-Y
0077 935A ST R21,-Y
0078 934A ST R20,-Y
0079 0181 MOVW R16,R2
007A 0192 MOVW R18,R4
007B D093 RCALL div32s
007C E042 LDI R20,2
007D E050 LDI R21,0
007E E060 LDI R22,0
007F E070 LDI R23,0
0080 933A ST R19,-Y
0081 932A ST R18,-Y
0082 931A ST R17,-Y
0083 930A ST R16,-Y
0084 018A MOVW R16,R20
0085 019B MOVW R18,R22
0086 D0F3 RCALL empy32u
0087 90400064 LDS R4,_Ddummy+2
0089 90500065 LDS R5,_Ddummy+3
008B 90200062 LDS R2,_Ddummy
008D 90300063 LDS R3,_Ddummy+1
008F 1502 CP R16,R2
0090 0513 CPC R17,R3
0091 0524 CPC R18,R4
0092 0535 CPC R19,R5
0093 F421 BNE 0x0098
0094 B388 IN R24,0x18
0095 7F8D ANDI R24,0xFD
0096 BB88 OUT 0x18,R24
0097 C001 RJMP 0x0099
(0036) else{PORTB |=0X02;} //PB1脚置高电平
0098 9AC1 SBI 0x18,1
(0037)
(0038) if(Ddummy==1) PORTB &=0xFE; //PB0脚置低电平
0099 E041 LDI R20,1
009A E050 LDI R21,0
009B E060 LDI R22,0
009C E070 LDI R23,0
009D 90400064 LDS R4,_Ddummy+2
009F 90500065 LDS R5,_Ddummy+3
00A1 90200062 LDS R2,_Ddummy
00A3 90300063 LDS R3,_Ddummy+1
00A5 1624 CP R2,R20
00A6 0635 CPC R3,R21
00A7 0646 CPC R4,R22
00A8 0657 CPC R5,R23
00A9 F419 BNE 0x00AD
00AA B388 IN R24,0x18
00AB 7F8E ANDI R24,0xFE
00AC BB88 OUT 0x18,R24
(0039) if(Ddummy >=Settings_PerDotGroupNum){
00AD 90200061 LDS R2,_Settings_PerDotGroupNum
00AF 2433 CLR R3
00B0 2444 CLR R4
00B1 2455 CLR R5
00B2 90800064 LDS R8,_Ddummy+2
00B4 90900065 LDS R9,_Ddummy+3
00B6 90600062 LDS R6,_Ddummy
00B8 90700063 LDS R7,_Ddummy+1
00BA 1462 CP R6,R2
00BB 0473 CPC R7,R3
00BC 0484 CPC R8,R4
00BD 0495 CPC R9,R5
00BE F06C BLT 0x00CC
(0040) Ddummy =0; //恢复计数初值
00BF E040 LDI R20,0
00C0 E050 LDI R21,0
00C1 E060 LDI R22,0
00C2 E070 LDI R23,0
00C3 93500063 STS _Ddummy+1,R21
00C5 93400062 STS _Ddummy,R20
00C7 93700065 STS _Ddummy+3,R23
00C9 93600064 STS _Ddummy+2,R22
(0041) PORTB |=0X01; //PB0脚置高电平
00CB 9AC0 SBI 0x18,0
(0042) }
(0043) TCNT0 = 0xF0; //reload counter value
00CC EF80 LDI R24,0xF0
00CD BF82 OUT 0x32,R24
(0044) }
00CE D0D7 RCALL pop_gset2
00CF 9029 LD R2,Y+
00D0 BE2F OUT 0x3F,R2
00D1 91E9 LD R30,Y+
00D2 91B9 LD R27,Y+
00D3 91A9 LD R26,Y+
00D4 9199 LD R25,Y+
00D5 9189 LD R24,Y+
00D6 9139 LD R19,Y+
00D7 9129 LD R18,Y+
00D8 9119 LD R17,Y+
00D9 9109 LD R16,Y+
00DA 9099 LD R9,Y+
00DB 9089 LD R8,Y+
00DC 9079 LD R7,Y+
00DD 9069 LD R6,Y+
00DE 9059 LD R5,Y+
00DF 9049 LD R4,Y+
00E0 9039 LD R3,Y+
00E1 9029 LD R2,Y+
00E2 9518 RETI
(0045)
(0046) //ADC initialisation
(0047) // Conversion time: 6uS
(0048) void adc_init(void)
(0049) {
(0050) ADCSR = 0x00; //disable adc
_adc_init:
00E3 2422 CLR R2
00E4 B826 OUT 0x06,R2
(0051) ADMUX = 0x00; //select adc input 0
00E5 B827 OUT 0x07,R2
(0052) ACSR = 0x00;
00E6 B828 OUT 0x08,R2
(0053) ADCSR = 0xA9;
00E7 EA89 LDI R24,0xA9
00E8 B986 OUT 0x06,R24
(0054) }
00E9 9508 RET
(0055)
(0056) #pragma interrupt_handler adc_isr:15
(0057) void adc_isr(void)
(0058) {
(0059) //conversion complete, read value (int) using...
(0060) // value=ADCL; //Read 8 low bits first (important)
(0061) // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
(0062) }
_adc_isr:
00EA 9518 RETI
(0063)
(0064) //call this routine to initialise all peripherals
(0065) void init_devices(void)
(0066) {
(0067) //stop errant interrupts until set up
(0068) CLI(); //disable all interrupts
_init_devices:
00EB 94F8 BCLR 7
(0069) port_init();
00EC DF46 RCALL _port_init
(0070) timer0_init();
00ED DF50 RCALL _timer0_init
(0071) adc_init();
00EE DFF4 RCALL _adc_init
(0072)
(0073) MCUCR = 0x00;
00EF 2422 CLR R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -