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

📄 main.s

📁 使用Attiny24的T0、T1两个定时器产生2路的PWM波,一路8位,一路10位
💻 S
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile F:\Programme\PWM\main.c
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 18
; /*--------------------------------------------------------
;    Atiny24-PWM:  此版本使用T0、T1共两路PWM,但目前两者还不能独立
;    PWM mode:  
;      TCCR0A:  COM0A1-COM0A0-COM0B1-COM0B0 - - WGM01-WGM00 
; 	 TCCR0B:  FOC0A-FOC0B - - WGM02-CS02-CS01-CS00
; 	 TCCR1A:  COM1A1-COM1A0-COM1B1-COM1B0 - - WGM11-WGM10
;      TCCR1B:  ICNC1-ICES1 - WGM13-WGM12-CS12-CS11-CS10                          
; ---------------------------------------------------------*/
; #include "iot24v.h"
; #include "macros.h"
; #include "selffile.h"
; 
; unsigned int OCR0_temp,OCR1_temp;
; /*----------------------------------------
;   主程序
; ----------------------------------------*/
; void  main(void)
; {
	.dbline 19
;     NOP();
	nop
	.dbline 20
;     CLI();
	cli
	.dbline 21
; 	WTCHDOG_init();
	xcall _WTCHDOG_init
	.dbline 22
; 	OCR0_temp=0;
	clr R2
	clr R3
	sts _OCR0_temp+1,R3
	sts _OCR0_temp,R2
	.dbline 23
; 	OCR1_temp=0;
	sts _OCR1_temp+1,R3
	sts _OCR1_temp,R2
	.dbline 25
; 	
;     MCU_init();
	xcall _MCU_init
	.dbline 26
; 	WDR();
	wdr
	.dbline 27
; 	SEI();
	sei
	xjmp L3
L2:
	.dbline 29
; 	while(1)
; 	{
	.dbline 30
; 	   Delay_nms(500);
	ldi R16,500
	ldi R17,1
	xcall _Delay_nms
	.dbline 31
; 	   OCR0_temp+=1;
	lds R24,_OCR0_temp
	lds R25,_OCR0_temp+1
	adiw R24,1
	sts _OCR0_temp+1,R25
	sts _OCR0_temp,R24
	.dbline 32
; 	   OCR1_temp+=0x10;
	lds R24,_OCR1_temp
	lds R25,_OCR1_temp+1
	adiw R24,16
	sts _OCR1_temp+1,R25
	sts _OCR1_temp,R24
	.dbline 33
; 	   if(OCR0_temp>0xff)
	ldi R24,255
	ldi R25,0
	lds R2,_OCR0_temp
	lds R3,_OCR0_temp+1
	cp R24,R2
	cpc R25,R3
	brsh L5
X0:
	.dbline 34
; 	      OCR0_temp=0;
	clr R2
	clr R3
	sts _OCR0_temp+1,R3
	sts _OCR0_temp,R2
L5:
	.dbline 35
; 	   if(OCR1_temp>0x3ff)
	ldi R24,1023
	ldi R25,3
	lds R2,_OCR1_temp
	lds R3,_OCR1_temp+1
	cp R24,R2
	cpc R25,R3
	brsh L7
X1:
	.dbline 36
; 	      OCR1_temp=0;
	clr R2
	clr R3
	sts _OCR1_temp+1,R3
	sts _OCR1_temp,R2
L7:
	.dbline 38
; 	
; 	   OCR0A=OCR0_temp;
	lds R2,_OCR0_temp
	lds R3,_OCR0_temp+1
	out 0x36,R2
	.dbline 39
; 	   OCR1A=OCR1_temp;
	lds R2,_OCR1_temp
	lds R3,_OCR1_temp+1
	out 0x2b,R3
	out 0x2a,R2
	.dbline 40
; 	   WDR();
	wdr
	.dbline 41
; 	}
L3:
	.dbline 28
	xjmp L2
X2:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 48
; }
; 
; /*----------------------------------------
;   系统初始化
; ----------------------------------------*/
; void  timer1_init(void)
; {
	.dbline 49
; 	TCNT1H=0x00;
	clr R2
	out 0x2d,R2
	.dbline 50
; 	TCNT1L=0x00;
	out 0x2c,R2
	.dbline 51
; 	OCR1AH=0x00;             //
	out 0x2b,R2
	.dbline 52
; 	OCR1AL=0xff;
	ldi R24,255
	out 0x2a,R24
	.dbline 53
; 	TIMSK1=0x00;
	out 0xc,R2
	.dbline 54
; 	TCCR1A=(1<<COM1A1)|(1<<WGM10)|(1<<WGM11);    //
	ldi R24,131
	out 0x2f,R24
	.dbline 55
; 	TCCR1B=(1<<CS10);
	ldi R24,1
	out 0x2e,R24
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 59
; }
; 
; void  timer0_init(void)
; {
	.dbline 60
;     TCCR0B=0x00;
	clr R2
	out 0x33,R2
	.dbline 61
; 	TCNT0=0x00;      //0xb0
	out 0x32,R2
	.dbline 62
; 	OCR0A=0x80;
	ldi R24,128
	out 0x36,R24
	.dbline 63
; 	TIMSK0=0x00;
	out 0x39,R2
	.dbline 64
; 	TCCR0A=(1<<COM0A1)|(1<<WGM00); 
	ldi R24,129
	out 0x30,R24
	.dbline 65
; 	TCCR0B=(1<<CS00);
	ldi R24,1
	out 0x33,R24
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e MCU_init _MCU_init fV
	.even
_MCU_init::
	.dbline -1
	.dbline 69
; }
; 
; void  MCU_init(void)
; {
	.dbline 70
;     DDRA=(1<<PA6)|(1<<PA5);
	ldi R24,96
	out 0x1a,R24
	.dbline 71
; 	DDRB=(1<<PB2);
	ldi R24,4
	out 0x17,R24
	.dbline 72
; 	MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 73
;     GIMSK = 0x00;
	out 0x3b,R2
	.dbline 74
;     timer0_init();
	xcall _timer0_init
	.dbline 75
; 	timer1_init();
	xcall _timer1_init
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e WTCHDOG_init _WTCHDOG_init fV
	.even
_WTCHDOG_init::
	.dbline -1
	.dbline 82
; }
; 
; /*----------------------------------------
;   看门狗设置
; ----------------------------------------*/
; void  WTCHDOG_init(void)     //WTCHDOG: use the least frequency,about 2S
; {
	.dbline 83
;     WDR();
	wdr
	.dbline 84
; 	WDTCSR=0x9f;
	ldi R24,159
	out 0x21,R24
	.dbline 85
; 	WDTCSR=0x0f;
	ldi R24,15
	out 0x21,R24
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\Programme\PWM\main.c
_OCR1_temp::
	.blkb 2
	.dbsym e OCR1_temp _OCR1_temp i
_OCR0_temp::
	.blkb 2
	.dbsym e OCR0_temp _OCR0_temp i
; }

⌨️ 快捷键说明

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