📄 mycontrol.lst
字号:
__text_start:
__start:
0014 E5CF LDI R28,0x5F
0015 E0D4 LDI R29,4
0016 BFCD OUT 0x3D,R28
0017 BFDE OUT 0x3E,R29
0018 51C0 SUBI R28,0x10
0019 40D0 SBCI R29,0
001A EA0A LDI R16,0xAA
001B 8308 STD Y+0,R16
001C 2400 CLR R0
001D E6E0 LDI R30,0x60
001E E0F0 LDI R31,0
001F E010 LDI R17,0
0020 37E1 CPI R30,0x71
0021 07F1 CPC R31,R17
0022 F011 BEQ 0x0025
0023 9201 ST R0,Z+
0024 CFFB RJMP 0x0020
0025 8300 STD Z+0,R16
0026 E2E8 LDI R30,0x28
0027 E0F0 LDI R31,0
0028 E6A0 LDI R26,0x60
0029 E0B0 LDI R27,0
002A E010 LDI R17,0
002B 32E8 CPI R30,0x28
002C 07F1 CPC R31,R17
002D F021 BEQ 0x0032
002E 95C8 LPM
002F 9631 ADIW R30,1
0030 920D ST R0,X+
0031 CFF9 RJMP 0x002B
0032 D0FC RCALL _main
_exit:
0033 CFFF RJMP _exit
FILE: C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
(0001) //ICC-AVR application builder : 2006-12-10 17:22:46
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) //ICC-AVR application builder : 2006-12-10 21:46:41
(0005) // Target : M8
(0006) // Crystal: 8.0000Mhz
(0007)
(0008) #include <iom8v.h>
(0009) #include <macros.h>
(0010) long Ddummy,Counter_MotorSpeedPulse,Counter_IRPulse,Settings_IRTopValue;
(0011) char Settings_PrintQuality;
(0012) const FTC2 =64;
(0013)
(0014) void port_init(void)
(0015) {
(0016) PORTB = 0x00;
_port_init:
0034 2422 CLR R2
0035 BA28 OUT 0x18,R2
(0017) DDRB = 0xFF;
0036 EF8F LDI R24,0xFF
0037 BB87 OUT 0x17,R24
(0018) PORTC = 0x7F; //m103 output only
0038 E78F LDI R24,0x7F
0039 BB85 OUT 0x15,R24
(0019) DDRC = 0x00;
003A BA24 OUT 0x14,R2
(0020) PORTD = 0xFF;
003B EF8F LDI R24,0xFF
003C BB82 OUT 0x12,R24
(0021) DDRD = 0x00;
003D BA21 OUT 0x11,R2
(0022) }
003E 9508 RET
(0023)
(0024) //TIMER1 initialisation - prescale:1
(0025) // WGM: 4) CTC, TOP=OCRnA
(0026) // desired value: 1KHz
(0027) // actual value: 1.000KHz (0.0%)
(0028) void timer1_init(void)
(0029) {
(0030) TCCR1B = 0x00; //stop
_timer1_init:
003F 2422 CLR R2
0040 BC2E OUT 0x2E,R2
(0031) TCNT1 = 0x00; //setup
0041 2433 CLR R3
0042 BC3D OUT 0x2D,R3
0043 BC2C OUT 0x2C,R2
(0032) ICR1H = 0x1F;
0044 E18F LDI R24,0x1F
0045 BD87 OUT 0x27,R24
(0033) ICR1L = 0x3F;
0046 E38F LDI R24,0x3F
0047 BD86 OUT 0x26,R24
(0034) OCR1A = FTC2*Settings_PrintQuality; //每组Settings_PrintQuality个墨滴选一个充电
0048 91200060 LDS R18,_Settings_PrintQuality
004A 2733 CLR R19
004B E2E6 LDI R30,0x26
004C E0F0 LDI R31,0
004D 9105 LPM R16,Z+
004E 9114 LPM R17,0(Z)
004F D140 RCALL empy16s
0050 BD1B OUT 0x2B,R17
0051 BD0A OUT 0x2A,R16
(0035) OCR1B = FTC2/2; //充电脉宽是墨滴周期时间的一半,充电相位为0,充电好坏由断点调整
0052 E022 LDI R18,2
0053 E030 LDI R19,0
0054 E2E6 LDI R30,0x26
0055 E0F0 LDI R31,0
0056 9105 LPM R16,Z+
0057 9114 LPM R17,0(Z)
0058 D102 RCALL div16s
0059 BD19 OUT 0x29,R17
005A BD08 OUT 0x28,R16
(0036) TCCR1A = 0x50;
005B E580 LDI R24,0x50
005C BD8F OUT 0x2F,R24
(0037) TCCR1B = 0x09; //start Timer
005D E089 LDI R24,0x9
005E BD8E OUT 0x2E,R24
(0038) }
005F 9508 RET
(0039) //
(0040) #pragma interrupt_handler timer1_compa_isr:7
(0041) void timer1_compa_isr(void) //开始一个新的充电墨滴时PB1开始产生一个下降沿或上升沿
(0042) { //compare occured TCNT1=OCR1A
(0043) //if(PINB1==0){ //如果PB1是低电平,就开始一个新的DA转换
(0044) // ;
(0045) //}
(0046) }
_timer1_compa_isr:
0060 9518 RETI
(0047)
(0048) #pragma interrupt_handler timer1_compb_isr:8
(0049) void timer1_compb_isr(void) //停止充电时刻,PB2开始产生上升沿或下降沿
(0050) {
(0051) //compare occured TCNT1=OCR1B
(0052) }
_timer1_compb_isr:
0061 9518 RETI
(0053) //
(0054)
(0055) //TIMER2 initialisation - prescale:1
(0056) // WGM: Normal
(0057) // desired value: 62.5KHz
(0058) // actual value: 62.5KHz (0.0%)
(0059) void timer2_init(void)
(0060) {
(0061) TCCR2 = 0x00; //stop
_timer2_init:
0062 2422 CLR R2
0063 BC25 OUT 0x25,R2
(0062) ASSR = 0x00; //set async mode
0064 BC22 OUT 0x22,R2
(0063) TCNT2 = 0x00; //setup
0065 BC24 OUT 0x24,R2
(0064) OCR2 = FTC2; //0x40;振荡频率的分频值,8M-64,4M-32
0066 E2E6 LDI R30,0x26
0067 E0F0 LDI R31,0
0068 9005 LPM R0,Z+
0069 9014 LPM R1,0(Z)
006A 01F0 MOVW R30,R0
006B BDE3 OUT 0x23,R30
(0065) TCCR2 = 0x19; //CTC 模式
006C E189 LDI R24,0x19
006D BD85 OUT 0x25,R24
(0066) }
006E 9508 RET
_int0_isr:
006F 922A ST R2,-Y
0070 923A ST R3,-Y
0071 924A ST R4,-Y
0072 925A ST R5,-Y
0073 938A ST R24,-Y
0074 939A ST R25,-Y
0075 93AA ST R26,-Y
0076 93BA ST R27,-Y
0077 93EA ST R30,-Y
0078 B62F IN R2,0x3F
0079 922A ST R2,-Y
007A D13E RCALL push_gset2
(0067)
(0068) #pragma interrupt_handler int0_isr:2
(0069) void int0_isr(void) //external interupt on INT0 记录电机速度
(0070) {
(0071) Counter_MotorSpeedPulse++;
007B E041 LDI R20,1
007C E050 LDI R21,0
007D E060 LDI R22,0
007E E070 LDI R23,0
007F 9040006B LDS R4,_Counter_MotorSpeedPulse+2
0081 9050006C LDS R5,_Counter_MotorSpeedPulse+3
0083 90200069 LDS R2,_Counter_MotorSpeedPulse
0085 9030006A LDS R3,_Counter_MotorSpeedPulse+1
0087 0E24 ADD R2,R20
0088 1E35 ADC R3,R21
0089 1E46 ADC R4,R22
008A 1E57 ADC R5,R23
008B 9230006A STS _Counter_MotorSpeedPulse+1,R3
008D 92200069 STS _Counter_MotorSpeedPulse,R2
008F 9250006C STS _Counter_MotorSpeedPulse+3,R5
0091 9240006B STS _Counter_MotorSpeedPulse+2,R4
(0072) if(Counter_MotorSpeedPulse>=1000){ //计算并显示电机速度
0093 EE48 LDI R20,0xE8
0094 E053 LDI R21,3
0095 E060 LDI R22,0
0096 E070 LDI R23,0
0097 1624 CP R2,R20
0098 0635 CPC R3,R21
0099 0646 CPC R4,R22
009A 0657 CPC R5,R23
009B F06C BLT 0x00A9
(0073) Counter_MotorSpeedPulse =0;
009C E040 LDI R20,0
009D E050 LDI R21,0
009E E060 LDI R22,0
009F E070 LDI R23,0
00A0 9350006A STS _Counter_MotorSpeedPulse+1,R21
00A2 93400069 STS _Counter_MotorSpeedPulse,R20
00A4 9370006C STS _Counter_MotorSpeedPulse+3,R23
00A6 9360006B STS _Counter_MotorSpeedPulse+2,R22
(0074) PORTB |=32; //PB5脚置高电平
00A8 9AC5 SBI 0x18,5
(0075) }
(0076) if(Counter_MotorSpeedPulse==500) PORTB &=223; //PB5脚置低电平
00A9 EF44 LDI R20,0xF4
00AA E051 LDI R21,1
00AB E060 LDI R22,0
00AC E070 LDI R23,0
00AD 9040006B LDS R4,_Counter_MotorSpeedPulse+2
00AF 9050006C LDS R5,_Counter_MotorSpeedPulse+3
00B1 90200069 LDS R2,_Counter_MotorSpeedPulse
00B3 9030006A LDS R3,_Counter_MotorSpeedPulse+1
00B5 1624 CP R2,R20
00B6 0635 CPC R3,R21
00B7 0646 CPC R4,R22
00B8 0657 CPC R5,R23
00B9 F419 BNE 0x00BD
00BA B388 IN R24,0x18
00BB 7D8F ANDI R24,0xDF
00BC BB88 OUT 0x18,R24
(0077) }
00BD D0E2 RCALL pop_gset2
00BE 9029 LD R2,Y+
00BF BE2F OUT 0x3F,R2
00C0 91E9 LD R30,Y+
00C1 91B9 LD R27,Y+
00C2 91A9 LD R26,Y+
00C3 9199 LD R25,Y+
00C4 9189 LD R24,Y+
00C5 9059 LD R5,Y+
00C6 9049 LD R4,Y+
00C7 9039 LD R3,Y+
00C8 9029 LD R2,Y+
00C9 9518 RETI
_int1_isr:
00CA 920A ST R0,-Y
00CB 921A ST R1,-Y
00CC 922A ST R2,-Y
00CD 923A ST R3,-Y
00CE 924A ST R4,-Y
00CF 925A ST R5,-Y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -