📄 control.lis
字号:
.module Control.c
.area lit(rom, con, rel)
0000 _FTC2::
0000 4000 .word 64
0002 .dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
0002 .dbsym e FTC2 _FTC2 kI
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 15
0000 ; //ICC-AVR application builder : 2006-12-10 17:22:46
0000 ; // Target : M8
0000 ; // Crystal: 8.0000Mhz
0000 ; //ICC-AVR application builder : 2006-12-10 21:46:41
0000 ; // Target : M8
0000 ; // Crystal: 8.0000Mhz
0000 ;
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ; long Ddummy,Counter_MotorSpeedPulse,Counter_IRPulse,Settings_IRTopValue;
0000 ; char Settings_PrintQuality;
0000 ; const FTC2 =64;
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 16
0000 ; PORTB = 0x00;
0000 2224 clr R2
0002 28BA out 0x18,R2
0004 .dbline 17
0004 ; DDRB = 0xFF;
0004 8FEF ldi R24,255
0006 87BB out 0x17,R24
0008 .dbline 18
0008 ; PORTC = 0x7F; //m103 output only
0008 8FE7 ldi R24,127
000A 85BB out 0x15,R24
000C .dbline 19
000C ; DDRC = 0x00;
000C 24BA out 0x14,R2
000E .dbline 20
000E ; PORTD = 0xFF;
000E 8FEF ldi R24,255
0010 82BB out 0x12,R24
0012 .dbline 21
0012 ; DDRD = 0x00;
0012 21BA out 0x11,R2
0014 .dbline -2
0014 .dbline 22
0014 ; }
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e timer1_init _timer1_init fV
.even
0016 _timer1_init::
0016 .dbline -1
0016 .dbline 29
0016 ;
0016 ; //TIMER1 initialisation - prescale:1
0016 ; // WGM: 4) CTC, TOP=OCRnA
0016 ; // desired value: 1KHz
0016 ; // actual value: 1.000KHz (0.0%)
0016 ; void timer1_init(void)
0016 ; {
0016 .dbline 30
0016 ; TCCR1B = 0x00; //stop
0016 2224 clr R2
0018 2EBC out 0x2e,R2
001A .dbline 31
001A ; TCNT1 = 0x00; //setup
001A 3324 clr R3
001C 3DBC out 0x2d,R3
001E 2CBC out 0x2c,R2
0020 .dbline 32
0020 ; ICR1H = 0x1F;
0020 8FE1 ldi R24,31
0022 87BD out 0x27,R24
0024 .dbline 33
0024 ; ICR1L = 0x3F;
0024 8FE3 ldi R24,63
0026 86BD out 0x26,R24
0028 .dbline 34
0028 ; OCR1A = FTC2*Settings_PrintQuality; //每组Settings_PrintQuality个墨滴选一个充电
0028 20910000 lds R18,_Settings_PrintQuality
002C 3327 clr R19
002E E0E0 ldi R30,<_FTC2
0030 F0E0 ldi R31,>_FTC2
0032 0591 lpm R16,Z+
0034 1491 lpm R17,Z
0036 00D0 rcall empy16s
0038 1BBD out 0x2b,R17
003A 0ABD out 0x2a,R16
003C .dbline 35
003C ; OCR1B = FTC2/2; //充电脉宽是墨滴周期时间的一半,充电相位为0,充电好坏由断点调整
003C 22E0 ldi R18,2
003E 30E0 ldi R19,0
0040 E0E0 ldi R30,<_FTC2
0042 F0E0 ldi R31,>_FTC2
0044 0591 lpm R16,Z+
0046 1491 lpm R17,Z
0048 00D0 rcall div16s
004A 19BD out 0x29,R17
004C 08BD out 0x28,R16
004E .dbline 36
004E ; TCCR1A = 0x50;
004E 80E5 ldi R24,80
0050 8FBD out 0x2f,R24
0052 .dbline 37
0052 ; TCCR1B = 0x09; //start Timer
0052 89E0 ldi R24,9
0054 8EBD out 0x2e,R24
0056 .dbline -2
0056 .dbline 38
0056 ; }
0056 L2:
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbend
.area vector(rom, abs)
.org 12
000C 2CC0 rjmp _timer1_compa_isr
.area text(rom, con, rel)
0058 .dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
0058 .dbfunc e timer1_compa_isr _timer1_compa_isr fV
.even
0058 _timer1_compa_isr::
0058 .dbline -1
0058 .dbline 42
0058 ; //
0058 ; #pragma interrupt_handler timer1_compa_isr:7
0058 ; void timer1_compa_isr(void) //开始一个新的充电墨滴时PB1开始产生一个下降沿或上升沿
0058 ; { //compare occured TCNT1=OCR1A
0058 .dbline -2
0058 .dbline 46
0058 ; //if(PINB1==0){ //如果PB1是低电平,就开始一个新的DA转换
0058 ; // ;
0058 ; //}
0058 ; }
0058 L3:
0058 .dbline 0 ; func end
0058 1895 reti
005A .dbend
.area vector(rom, abs)
.org 14
000E 2DC0 rjmp _timer1_compb_isr
.area text(rom, con, rel)
005A .dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
005A .dbfunc e timer1_compb_isr _timer1_compb_isr fV
.even
005A _timer1_compb_isr::
005A .dbline -1
005A .dbline 50
005A ;
005A ; #pragma interrupt_handler timer1_compb_isr:8
005A ; void timer1_compb_isr(void) //停止充电时刻,PB2开始产生上升沿或下降沿
005A ; {
005A .dbline -2
005A .dbline 52
005A ; //compare occured TCNT1=OCR1B
005A ; }
005A L4:
005A .dbline 0 ; func end
005A 1895 reti
005C .dbend
005C .dbfunc e timer2_init _timer2_init fV
.even
005C _timer2_init::
005C .dbline -1
005C .dbline 60
005C ; //
005C ;
005C ; //TIMER2 initialisation - prescale:1
005C ; // WGM: Normal
005C ; // desired value: 62.5KHz
005C ; // actual value: 62.5KHz (0.0%)
005C ; void timer2_init(void)
005C ; {
005C .dbline 61
005C ; TCCR2 = 0x00; //stop
005C 2224 clr R2
005E 25BC out 0x25,R2
0060 .dbline 62
0060 ; ASSR = 0x00; //set async mode
0060 22BC out 0x22,R2
0062 .dbline 63
0062 ; TCNT2 = 0x00; //setup
0062 24BC out 0x24,R2
0064 .dbline 64
0064 ; OCR2 = FTC2; //0x40;振荡频率的分频值,8M-64,4M-32
0064 E0E0 ldi R30,<_FTC2
0066 F0E0 ldi R31,>_FTC2
0068 0590 lpm R0,Z+
006A 1490 lpm R1,Z
006C F001 movw R30,R0
006E E3BD out 0x23,R30
0070 .dbline 65
0070 ; TCCR2 = 0x19; //CTC 模式
0070 89E1 ldi R24,25
0072 85BD out 0x25,R24
0074 .dbline -2
0074 .dbline 66
0074 ; }
0074 L5:
0074 .dbline 0 ; func end
0074 0895 ret
0076 .dbend
.area vector(rom, abs)
.org 2
0002 3BC0 rjmp _int0_isr
.area text(rom, con, rel)
0076 .dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
0076 .dbfunc e int0_isr _int0_isr fV
.even
0076 _int0_isr::
0076 2A92 st -y,R2
0078 3A92 st -y,R3
007A 4A92 st -y,R4
007C 5A92 st -y,R5
007E 8A93 st -y,R24
0080 9A93 st -y,R25
0082 AA93 st -y,R26
0084 BA93 st -y,R27
0086 EA93 st -y,R30
0088 2FB6 in R2,0x3f
008A 2A92 st -y,R2
008C 00D0 rcall push_gset2
008E .dbline -1
008E .dbline 70
008E ;
008E ; #pragma interrupt_handler int0_isr:2
008E ; void int0_isr(void) //external interupt on INT0 记录电机速度
008E ; {
008E .dbline 71
008E ; Counter_MotorSpeedPulse++;
008E 41E0 ldi R20,1
0090 50E0 ldi R21,0
0092 60E0 ldi R22,0
0094 70E0 ldi R23,0
0096 40900B00 lds R4,_Counter_MotorSpeedPulse+2
009A 50900C00 lds R5,_Counter_MotorSpeedPulse+2+1
009E 20900900 lds R2,_Counter_MotorSpeedPulse
00A2 30900A00 lds R3,_Counter_MotorSpeedPulse+1
00A6 240E add R2,R20
00A8 351E adc R3,R21
00AA 461E adc R4,R22
00AC 571E adc R5,R23
00AE 30920A00 sts _Counter_MotorSpeedPulse+1,R3
00B2 20920900 sts _Counter_MotorSpeedPulse,R2
00B6 50920C00 sts _Counter_MotorSpeedPulse+2+1,R5
00BA 40920B00 sts _Counter_MotorSpeedPulse+2,R4
00BE .dbline 72
00BE ; if(Counter_MotorSpeedPulse>=1000){ //计算并显示电机速度
00BE 48EE ldi R20,232
00C0 53E0 ldi R21,3
00C2 60E0 ldi R22,0
00C4 70E0 ldi R23,0
00C6 2416 cp R2,R20
00C8 3506 cpc R3,R21
00CA 4606 cpc R4,R22
00CC 5706 cpc R5,R23
00CE 6CF0 brlt L7
00D0 .dbline 72
00D0 .dbline 73
00D0 ; Counter_MotorSpeedPulse =0;
00D0 40E0 ldi R20,0
00D2 50E0 ldi R21,0
00D4 60E0 ldi R22,0
00D6 70E0 ldi R23,0
00D8 50930A00 sts _Counter_MotorSpeedPulse+1,R21
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -