📄 m16pwm.s
字号:
.module M16PWM.c
.area text(rom, con, rel)
.dbfile F:\job\M16学习板\PWM(实验九)\M16PWM.c
.dbfunc e Timer0Init _Timer0Init fV
.even
_Timer0Init::
.dbline -1
.dbline 24
; /*******************************************************************
; 实验九
; 实验名称: PWM转换实验
; 实验目的: 学习AVR单片机的PWM功能
; 实验现象: 在PB3端口看到波形
; 环 境: ICCAVR6.31A
; 设 计 者: shinea8868
; 说 明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
; 作商业用途请保留本段文字
; 完成日期: 2007年4月10日
; *******************************************************************/
; #include <iom16v.h>
; #include <macros.h>
;
; #define OC0_OUT_EN DDRB |= 0b00001000
;
; /*-----------------------------------------------------------------
; 函数名称: void Timer0Init(void)
; 函数功能:
; 参 数:
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void Timer0Init(void)
; {
.dbline 25
; TCCR0 = (1<<WGM01)|(1<<WGM00)|(1<<COM01)|(1<<COM00)|(1<<CS00);
ldi R24,121
out 0x33,R24
.dbline 31
; /*
; WGM01=1; WGM00=1; --> fast PWM modle
; COM01=1; COM00=0; --> 比较匹配时set OC0 pin
; CS00=1; --> timer0 source 不经过任何分频,直接为Clk,使得PWM可以工作得足够快
; */
; TCNT0 = 0x00; //设置TC0计数寄存器初值
clr R2
out 0x32,R2
.dbline 32
; OCR0 = 0xe0; //输出比较寄存器初值,设置该值可用于调节占空比
ldi R24,224
out 0x3c,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 41
; }
; /*-----------------------------------------------------------------
; 函数名称:
; 函数功能:
; 参 数:
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void main(void)
; {
.dbline 42
; OC0_OUT_EN; //为允许PWM工作,需设置PB3为输出
sbi 0x17,3
.dbline 43
; Timer0Init();
xcall _Timer0Init
.dbline 44
; SEI();
sei
L3:
.dbline 45
L4:
.dbline 45
xjmp L3
X0:
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -