⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 control.lis

📁 Atmega8
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -