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

📄 control.s

📁 Atmega8
💻 S
字号:
	.module Control.c
	.area lit(rom, con, rel)
_FTC2::
	.word 64
	.dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
	.dbsym e FTC2 _FTC2 kI
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 15
; //ICC-AVR application builder : 2006-12-10 17:22:46
; // Target : M8
; // Crystal: 8.0000Mhz
; //ICC-AVR application builder : 2006-12-10 21:46:41
; // Target : M8
; // Crystal: 8.0000Mhz
; 
; #include <iom8v.h>
; #include <macros.h>
; long Ddummy,Counter_MotorSpeedPulse,Counter_IRPulse,Settings_IRTopValue;
; char Settings_PrintQuality;
; const FTC2 =64;
; 
; void port_init(void)
; {
	.dbline 16
;  PORTB = 0x00;
	clr R2
	out 0x18,R2
	.dbline 17
;  DDRB  = 0xFF;
	ldi R24,255
	out 0x17,R24
	.dbline 18
;  PORTC = 0x7F; //m103 output only
	ldi R24,127
	out 0x15,R24
	.dbline 19
;  DDRC  = 0x00;
	out 0x14,R2
	.dbline 20
;  PORTD = 0xFF;
	ldi R24,255
	out 0x12,R24
	.dbline 21
;  DDRD  = 0x00;
	out 0x11,R2
	.dbline -2
	.dbline 22
; }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 29
; 
; //TIMER1 initialisation - prescale:1
; // WGM: 4) CTC, TOP=OCRnA
; // desired value: 1KHz
; // actual value:  1.000KHz (0.0%)
; void timer1_init(void)
; {
	.dbline 30
;  TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 31
;  TCNT1  = 0x00; //setup
	clr R3
	out 0x2d,R3
	out 0x2c,R2
	.dbline 32
;  ICR1H  = 0x1F;
	ldi R24,31
	out 0x27,R24
	.dbline 33
;  ICR1L  = 0x3F;
	ldi R24,63
	out 0x26,R24
	.dbline 34
;  OCR1A = FTC2*Settings_PrintQuality;    //每组Settings_PrintQuality个墨滴选一个充电
	lds R18,_Settings_PrintQuality
	clr R19
	ldi R30,<_FTC2
	ldi R31,>_FTC2
	lpm R16,Z+
	lpm R17,Z
	rcall empy16s
	out 0x2b,R17
	out 0x2a,R16
	.dbline 35
;  OCR1B = FTC2/2;                        //充电脉宽是墨滴周期时间的一半,充电相位为0,充电好坏由断点调整
	ldi R18,2
	ldi R19,0
	ldi R30,<_FTC2
	ldi R31,>_FTC2
	lpm R16,Z+
	lpm R17,Z
	rcall div16s
	out 0x29,R17
	out 0x28,R16
	.dbline 36
;  TCCR1A = 0x50;
	ldi R24,80
	out 0x2f,R24
	.dbline 37
;  TCCR1B = 0x09; //start Timer
	ldi R24,9
	out 0x2e,R24
	.dbline -2
	.dbline 38
; }
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 12
	rjmp _timer1_compa_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
	.dbfunc e timer1_compa_isr _timer1_compa_isr fV
	.even
_timer1_compa_isr::
	.dbline -1
	.dbline 42
; //
; #pragma interrupt_handler timer1_compa_isr:7   
; void timer1_compa_isr(void)   //开始一个新的充电墨滴时PB1开始产生一个下降沿或上升沿
; {   //compare occured TCNT1=OCR1A
	.dbline -2
	.dbline 46
;     //if(PINB1==0){   //如果PB1是低电平,就开始一个新的DA转换
; 	//   ;
; 	//}
; }
L3:
	.dbline 0 ; func end
	reti
	.dbend
	.area vector(rom, abs)
	.org 14
	rjmp _timer1_compb_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
	.dbfunc e timer1_compb_isr _timer1_compb_isr fV
	.even
_timer1_compb_isr::
	.dbline -1
	.dbline 50
; 
; #pragma interrupt_handler timer1_compb_isr:8
; void timer1_compb_isr(void)   //停止充电时刻,PB2开始产生上升沿或下降沿
; {
	.dbline -2
	.dbline 52
;  //compare occured TCNT1=OCR1B
; }
L4:
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e timer2_init _timer2_init fV
	.even
_timer2_init::
	.dbline -1
	.dbline 60
; //
; 
; //TIMER2 initialisation - prescale:1
; // WGM: Normal
; // desired value: 62.5KHz
; // actual value: 62.5KHz (0.0%)
; void timer2_init(void)
; {
	.dbline 61
;  TCCR2 = 0x00; //stop
	clr R2
	out 0x25,R2
	.dbline 62
;  ASSR  = 0x00; //set async mode
	out 0x22,R2
	.dbline 63
;  TCNT2 = 0x00; //setup
	out 0x24,R2
	.dbline 64
;  OCR2  = FTC2; //0x40;振荡频率的分频值,8M-64,4M-32 
	ldi R30,<_FTC2
	ldi R31,>_FTC2
	lpm R0,Z+
	lpm R1,Z
	movw R30,R0
	out 0x23,R30
	.dbline 65
;  TCCR2 = 0x19; //CTC 模式
	ldi R24,25
	out 0x25,R24
	.dbline -2
	.dbline 66
; }
L5:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 2
	rjmp _int0_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
	.dbfunc e int0_isr _int0_isr fV
	.even
_int0_isr::
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	st -y,R30
	in R2,0x3f
	st -y,R2
	rcall push_gset2
	.dbline -1
	.dbline 70
; 
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)  //external interupt on INT0  记录电机速度
; {
	.dbline 71
;      Counter_MotorSpeedPulse++;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_Counter_MotorSpeedPulse+2
	lds R5,_Counter_MotorSpeedPulse+2+1
	lds R2,_Counter_MotorSpeedPulse
	lds R3,_Counter_MotorSpeedPulse+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _Counter_MotorSpeedPulse+1,R3
	sts _Counter_MotorSpeedPulse,R2
	sts _Counter_MotorSpeedPulse+2+1,R5
	sts _Counter_MotorSpeedPulse+2,R4
	.dbline 72
; 	 if(Counter_MotorSpeedPulse>=1000){ //计算并显示电机速度
	ldi R20,232
	ldi R21,3
	ldi R22,0
	ldi R23,0
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlt L7
	.dbline 72
	.dbline 73
; 	    Counter_MotorSpeedPulse =0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _Counter_MotorSpeedPulse+1,R21
	sts _Counter_MotorSpeedPulse,R20
	sts _Counter_MotorSpeedPulse+2+1,R23
	sts _Counter_MotorSpeedPulse+2,R22
	.dbline 74
; 	    PORTB |=32; //PB5脚置高电平
	sbi 0x18,5
	.dbline 75
; 	 }
L7:
	.dbline 76
	ldi R20,244
	ldi R21,1
	ldi R22,0
	ldi R23,0
	lds R4,_Counter_MotorSpeedPulse+2
	lds R5,_Counter_MotorSpeedPulse+2+1
	lds R2,_Counter_MotorSpeedPulse
	lds R3,_Counter_MotorSpeedPulse+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L9
	.dbline 76
	in R24,0x18
	andi R24,223
	out 0x18,R24
L9:
	.dbline -2
	.dbline 77
; 	 if(Counter_MotorSpeedPulse==500) PORTB &=223; //PB5脚置低电平
; }
L6:
	rcall pop_gset2
	ld R2,y+
	out 0x3f,R2
	ld R30,y+
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.area vector(rom, abs)
	.org 4
	rjmp _int1_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
	.dbfunc e int1_isr _int1_isr fV
	.even
_int1_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R24
	st -y,R30
	in R0,0x3f
	st -y,R0
	rcall push_gset2
	.dbline -1
	.dbline 81
; 
; #pragma interrupt_handler int1_isr:3
; void int1_isr(void) //external interupt on INT1   记录光电开关的触发脉冲
; {
	.dbline 82
;      Counter_IRPulse++;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_Counter_IRPulse+2
	lds R5,_Counter_IRPulse+2+1
	lds R2,_Counter_IRPulse
	lds R3,_Counter_IRPulse+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _Counter_IRPulse+1,R3
	sts _Counter_IRPulse,R2
	sts _Counter_IRPulse+2+1,R5
	sts _Counter_IRPulse+2,R4
	.dbline 83
; 	 if(Counter_IRPulse >= 1000){  //计算并触发打印按钮
	ldi R20,232
	ldi R21,3
	ldi R22,0
	ldi R23,0
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlt L12
	.dbline 83
	.dbline 84
; 	    Counter_IRPulse=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _Counter_IRPulse+1,R21
	sts _Counter_IRPulse,R20
	sts _Counter_IRPulse+2+1,R23
	sts _Counter_IRPulse+2,R22
	.dbline 85
; 	    PORTB |=64; //PB6脚置高电平
	sbi 0x18,6
	.dbline 86
; 	 }
L12:
	.dbline 87
	ldi R20,244
	ldi R21,1
	ldi R22,0
	ldi R23,0
	lds R4,_Counter_IRPulse+2
	lds R5,_Counter_IRPulse+2+1
	lds R2,_Counter_IRPulse
	lds R3,_Counter_IRPulse+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L14
	.dbline 87
	in R24,0x18
	andi R24,191
	out 0x18,R24
L14:
	.dbline -2
	.dbline 88
;      if(Counter_IRPulse == 500) PORTB &=191; //PB6脚置低电平
; }
L11:
	rcall pop_gset2
	ld R0,y+
	out 0x3f,R0
	ld R30,y+
	ld R24,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 92
; 
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
	.dbline 94
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 95
;  port_init();
	rcall _port_init
	.dbline 96
;  timer2_init();
	rcall _timer2_init
	.dbline 97
;  timer1_init();
	rcall _timer1_init
	.dbline 99
; 
;  MCUCR = 0x0F;
	ldi R24,15
	out 0x35,R24
	.dbline 100
;  GICR  = 0xC0;
	ldi R24,192
	out 0x3b,R24
	.dbline 101
;  TIMSK = 0x18; //timer interrupt sources
	ldi R24,24
	out 0x39,R24
	.dbline 102
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
	.dbline 104
;  //all peripherals are now initialised
; }
L16:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 107
; 
; void main()
; {
	.dbline 108
;    Settings_IRTopValue = 1000;        //光电开关触发Settings_IRTopValue次后就开始打印一条信息 
	ldi R20,232
	ldi R21,3
	ldi R22,0
	ldi R23,0
	sts _Settings_IRTopValue+1,R21
	sts _Settings_IRTopValue,R20
	sts _Settings_IRTopValue+2+1,R23
	sts _Settings_IRTopValue+2,R22
	.dbline 109
;    Settings_PrintQuality = 10;     //10个墨滴选一个充电
	ldi R24,10
	sts _Settings_PrintQuality,R24
	.dbline 110
;    Counter_MotorSpeedPulse =0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _Counter_MotorSpeedPulse+1,R21
	sts _Counter_MotorSpeedPulse,R20
	sts _Counter_MotorSpeedPulse+2+1,R23
	sts _Counter_MotorSpeedPulse+2,R22
	.dbline 111
;    Counter_IRPulse =0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _Counter_IRPulse+1,R21
	sts _Counter_IRPulse,R20
	sts _Counter_IRPulse+2+1,R23
	sts _Counter_IRPulse+2,R22
	.dbline 113
;    
;    init_devices();
	.dbline -2
	.dbline 114
; }
L17:
	.dbline 0 ; func end
	rjmp _init_devices
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC1控制)\Control.c
_Settings_PrintQuality::
	.blkb 1
	.dbsym e Settings_PrintQuality _Settings_PrintQuality c
_Settings_IRTopValue::
	.blkb 4
	.dbsym e Settings_IRTopValue _Settings_IRTopValue L
_Counter_IRPulse::
	.blkb 4
	.dbsym e Counter_IRPulse _Counter_IRPulse L
_Counter_MotorSpeedPulse::
	.blkb 4
	.dbsym e Counter_MotorSpeedPulse _Counter_MotorSpeedPulse L
_Ddummy::
	.blkb 4
	.dbsym e Ddummy _Ddummy L

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -