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

📄 main.asm

📁 使用ATtiny26芯片实现的PWM输出代码
💻 ASM
字号:
;--------------------------------------------------------
; File: main.asm
;
; Description: Example of how to use the fast PWM of the
;		ATtiny26 to generate "sine-wave" signal.
;		The PWM output requires filtering to shape
;		the sine wave form.
;
; Revision:
;	1.0	Created			2002-??-?? Raapeland
;	1.1	Cosmetic changes	2003-03-19 Jllassen
; 	1.2 Main loop reviewed	2003-03-26 Mreintz
;   1.3 Changed frequencies 2003-06-30 Raapeland
;---------------------------------------------------------
.include "tn26def.inc"

;Interrupt vector table
rjmp init

.org OC1Aaddr							; Interrupt vector for timer1 output compare match A
rjmp OC1A_isr

;Main code
init:
	ldi r16, RAMEND						; Initiate Stack pointer
	out SP, r16

	ldi	r16, 0x10						; Load oscillator calibration byte
	out	EEAR, r16
	ldi	r16, (1<<EERE)
	out	EECR, r16
	in	r16, EEDR
	out	OSCCAL, r16	


	ldi r16, (1<<PB1)					; Set PB1 as output
	out DDRB, r16

	ldi r16, (1<<PLLE)					; Enable PLL
	out	PLLCSR, r16

waitPLL:
	in	r16, PLLCSR						; Wait for PLL to lock (approx. 100ms)
	sbrs r16, PLOCK					
	rjmp waitPLL 	

	in	r16, PLLCSR						; Set PLL as PWM clock source 
	ldi	r17, (1<<PCKE)
	or	r16, r17
	out	PLLCSR, r16
	
	ldi r16, (1<<COM1A0) | (1<<PWM1A)	; Set PWM mode: toggle OC1A on compare
	out TCCR1A, r16						; Enable PWM

	ldi r16, 0xFF						; Set PWM top value: OCR1C = 0xFF
	out OCR1C, r16

	ldi r16, (1<<CS11) | (1<<CS10) | (1<<CTC1)
	out TCCR1B, r16						; Enable Timer/Set PWM clock prescaler to PCK/4 (16MHz PWM clock)

	ldi r16, (1<<OCIE1A)				; Enable Timer1 OVF interrupt
	out TIMSK, r16

	clr r17
	clr r18

	sei									; Enable global interrupts

idle:
	ldi r16, (1<<SE)					; Enable sleep
	out MCUCR, r16
	sleep
	rjmp idle

OC1A_isr:
	ldi ZH, high(sine_table*2)			; Set up Z to point to the beginning of sine_table
	ldi ZL, low(sine_table*2)
	add ZL, r17							; Offset Z by r18:r17
	adc ZH, r18
	lpm									; Load sine_table[Z] into OCR1A
	out OCR1A, r0
	inc r17

	reti

sine_table:
.db 128,131,134,137,140,144,147,150,153,156,159,162,165,168,171,174
.db 177,179,182,185,188,191,193,196,199,201,204,206,209,211,213,216
.db 218,220,222,224,226,228,230,232,234,235,237,239,240,241,243,244
.db 245,246,248,249,250,250,251,252,253,253,254,254,254,254,254,254
.db 254,254,254,254,254,254,254,253,253,252,251,250,250,249,248,246
.db 245,244,243,241,240,239,237,235,234,232,230,228,226,224,222,220
.db 218,216,213,211,209,206,204,201,199,196,193,191,188,185,182,179
.db 177,174,171,168,165,162,159,156,153,150,147,144,140,137,134,131
.db 128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82
.db 79,77,74,71,68,65,63,60,57,55,52,50,47,45,43,40
.db 38,36,34,32,30,28,26,24,22,21,19,17,16,15,13,12
.db 11,10,8,7,6,6,5,4,3,3,2,2,2,1,1,1
.db 1,1,1,1,2,2,2,3,3,4,5,6,6,7,8,10
.db 11,12,13,15,16,17,19,21,22,24,26,28,30,32,34,36
.db 38,40,43,45,47,50,52,55,57,60,63,65,68,71,74,77
.db 79,82,85,88,91,94,97,100,103,106,109,112,116,119,122,125

⌨️ 快捷键说明

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