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

📄 wave50%.s

📁 利用ATmega16单片机的T2定时器产生方波的控制程序
💻 S
字号:
	.module Wave50%.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC0控制)\Wave50%.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 11
; //ICC-AVR application builder : 2006-12-10 11:12:46
; // Target : M8
; // Crystal: 4.0000Mhz
; 
; #include <iom8v.h>
; #include <macros.h>
; long Ddummy;
; char Settings_PerDotGroupNum,Settings_PrintPhase;
; 
; void port_init(void)
; {
	.dbline 12
;  PORTB = 0x00;
	clr R2
	out 0x18,R2
	.dbline 13
;  DDRB  = 0xFF;
	ldi R24,255
	out 0x17,R24
	.dbline 14
;  PORTC = 0x7F; //m103 output only
	ldi R24,127
	out 0x15,R24
	.dbline 15
;  DDRC  = 0x00;
	out 0x14,R2
	.dbline 16
;  PORTD = 0xFF;
	ldi R24,255
	out 0x12,R24
	.dbline 17
;  DDRD  = 0x00;
	out 0x11,R2
	.dbline -2
	.dbline 18
; }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 25
; 
; //TIMER0 initialisation - prescale:1
; // WGM: Normal
; // desired value: 125KHz
; // actual value: 125.000KHz (0.0%)
; void timer0_init(void)
; {
	.dbline 26
;  TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 27
;  TCNT0 = 0xE0; //set count
	ldi R24,224
	out 0x32,R24
	.dbline 28
;  TCCR0 = 0x01; //start timer
	ldi R24,1
	out 0x33,R24
	.dbline -2
	.dbline 29
; }
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 18
	rjmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC0控制)\Wave50%.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R8
	st -y,R9
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	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 33
; 
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
	.dbline 34
;     Ddummy++;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_Ddummy+2
	lds R5,_Ddummy+2+1
	lds R2,_Ddummy
	lds R3,_Ddummy+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _Ddummy+1,R3
	sts _Ddummy,R2
	sts _Ddummy+2+1,R5
	sts _Ddummy+2,R4
	.dbline 35
;     if(2*(Ddummy/2)==Ddummy){PORTB &=0xFD;} //PB1脚置低电平
	ldi R20,2
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	rcall div32s
	ldi R20,2
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R20
	movw R18,R22
	rcall empy32s
	lds R4,_Ddummy+2
	lds R5,_Ddummy+2+1
	lds R2,_Ddummy
	lds R3,_Ddummy+1
	cp R16,R2
	cpc R17,R3
	cpc R18,R4
	cpc R19,R5
	brne L4
	.dbline 35
	.dbline 35
	in R24,0x18
	andi R24,253
	out 0x18,R24
	.dbline 35
	rjmp L5
L4:
	.dbline 36
; 	else{PORTB |=0X02;} //PB1脚置高电平
	.dbline 36
	sbi 0x18,1
	.dbline 36
L5:
	.dbline 38
; 	
;     if(Ddummy==1) PORTB &=0xFE;    //PB0脚置低电平
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_Ddummy+2
	lds R5,_Ddummy+2+1
	lds R2,_Ddummy
	lds R3,_Ddummy+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L6
	.dbline 38
	in R24,0x18
	andi R24,254
	out 0x18,R24
L6:
	.dbline 39
; 	if(Ddummy >=Settings_PerDotGroupNum){
	lds R2,_Settings_PerDotGroupNum
	clr R3
	clr R4
	clr R5
	lds R8,_Ddummy+2
	lds R9,_Ddummy+2+1
	lds R6,_Ddummy
	lds R7,_Ddummy+1
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brlt L8
	.dbline 39
	.dbline 40
; 	   Ddummy =0; //恢复计数初值
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _Ddummy+1,R21
	sts _Ddummy,R20
	sts _Ddummy+2+1,R23
	sts _Ddummy+2,R22
	.dbline 41
;        PORTB |=0X01;   //PB0脚置高电平
	sbi 0x18,0
	.dbline 42
; 	}  
L8:
	.dbline 43
;     TCNT0 = 0xF0; //reload counter value
	ldi R24,240
	out 0x32,R24
	.dbline -2
	.dbline 44
; }
L3:
	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 R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R9,y+
	ld R8,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e adc_init _adc_init fV
	.even
_adc_init::
	.dbline -1
	.dbline 49
; 
; //ADC initialisation
; // Conversion time: 6uS
; void adc_init(void)
; {
	.dbline 50
;  ADCSR = 0x00; //disable adc
	clr R2
	out 0x6,R2
	.dbline 51
;  ADMUX = 0x00; //select adc input 0
	out 0x7,R2
	.dbline 52
;  ACSR  = 0x00;
	out 0x8,R2
	.dbline 53
;  ADCSR = 0xA9;
	ldi R24,169
	out 0x6,R24
	.dbline -2
	.dbline 54
; }
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 28
	rjmp _adc_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC0控制)\Wave50%.c
	.dbfunc e adc_isr _adc_isr fV
	.even
_adc_isr::
	.dbline -1
	.dbline 58
; 
; #pragma interrupt_handler adc_isr:15
; void adc_isr(void)
; {
	.dbline -2
	.dbline 62
;  //conversion complete, read value (int) using...
;  // value=ADCL;            //Read 8 low bits first (important)
;  // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
; }
L11:
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 66
; 
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
	.dbline 68
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 69
;  port_init();
	rcall _port_init
	.dbline 70
;  timer0_init();
	rcall _timer0_init
	.dbline 71
;  adc_init();
	rcall _adc_init
	.dbline 73
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 74
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 75
;  TIMSK = 0x01; //timer interrupt sources
	ldi R24,1
	out 0x39,R24
	.dbline 76
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
	.dbline 78
;  //all peripherals are now initialised
; }
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 81
; 
; void main()
; {
	.dbline 82
;      init_devices(); 
	rcall _init_devices
	.dbline 83
; 	 Ddummy = 0;                     //临时变量,赋初值
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _Ddummy+1,R21
	sts _Ddummy,R20
	sts _Ddummy+2+1,R23
	sts _Ddummy+2,R22
	.dbline 84
; 	 Settings_PerDotGroupNum =10;    //每10个墨滴选一个进行打印
	ldi R24,10
	sts _Settings_PerDotGroupNum,R24
	.dbline 85
; 	 Settings_PrintPhase =10;	 
	sts _Settings_PrintPhase,R24
	.dbline -2
	.dbline 86
; } 
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC0控制)\Wave50%.c
_Settings_PrintPhase::
	.blkb 1
	.dbsym e Settings_PrintPhase _Settings_PrintPhase c
_Settings_PerDotGroupNum::
	.blkb 1
	.dbsym e Settings_PerDotGroupNum _Settings_PerDotGroupNum c
_Ddummy::
	.blkb 4
	.dbsym e Ddummy _Ddummy L

⌨️ 快捷键说明

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