📄 1602_main._c
字号:
/********************************************
* TC1产生16位双路PWM *
* 实验内容:由TC1产生两路独立的16位PWM输出 *
* 实验环境:本站M16学习板 *
* 日 期:2007年08月16日 *
* 作 者:tonghe *
* 版 本:V1.0 *
* 修改日期:2007年08月16日 *
* 芯 片:M16 *
* 工作频率:内部8M *
* 编 译 器:ICCAVR 6.31A *
* 输 出:PD4输出PWMB,PD5输出PWMA *
* 产生的PWM频率为8M/65536约122HZ *
********************************************/
#include <iom16v.h>
#include <macros.h>
//延时函数:入口time 需延时的MS数
void delay_ms(unsigned int time)
{
unsigned char c;
for(;time;time--)
{
for(c=220;c;c--)
{
;
}
}
}
//端口初始化
void port_init(void)
{
PORTA = 0xFF;
DDRA = 0x00;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x30;
}
//TC1初始化
void timer1_init(void)
{
TCCR1A = 0xA2; //两路PWM,匹配清零
TCCR1B = 0x19; //快速PWM模式,位数可调,预分频1
ICR1 = 0xFFFF;
//计数上限值,此数为16位PWM,此值的多少决定PWM的位数,改变值可以改变时钟的输入频率
//在1M时钟下,OCR1A,OCR1B=1M/65536=15HZ。改为7FFF时,为30HZ,ICR1变小,OCR1A,B成比例变大
}
//器件初始化
void init_devices(void)
{
port_init(); //端口初始化
timer1_init(); //TC1初始化
MCUCR = 0x00;
GICR = 0x00;
}
//主函数
void main(void)
{
//相位修正PWM模式,OCO的频率=fclk/(512*N),fclk为输入时钟频率,本例使用内部1M时钟
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -