******************************************** //延時函數(shù):入口time 需延時的MS數(shù) //端口初始化 //TC1初始化 //器件初始化 MCUCR = 0x00; //主函數(shù) OCR1A=a;//匹配初值
*TC1的雙路PWM輸出實驗 *
* 實驗內(nèi)容:由TC1產(chǎn)生兩路獨立的PWM輸出*
* 芯 片:M16*
* 工作頻率:內(nèi)部1M*
* 編 譯 器:ICCAVR 6.31A*
* 輸 出:PD4輸出PWMB,PD5輸出PWMA*
* 產(chǎn)生的PWM頻率為1M/1024約1KHZ*
********************************************/
#include
#include
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;
}
void timer1_init(void)
{
TCCR1A = 0xA3;//兩路PWM,匹配清零
TCCR1B = 0x09; //快速PWM模式,10位,預分頻1
}
void init_devices(void)
{
port_init();//端口初始化
timer1_init();//TC1初始化
GICR = 0x00;
}
void main(void)
{
unsigned int a=511,b=511;
init_devices(); //器件初始化
OCR1B=b;
while(1)
{
a-=5;//兩個值向不同方向變化
b+=5;//PWMA寬度減小,PWMB寬度增加
if(a<=5)//上下限
{
a=1000;
b=5;
}
OCR1A=a;
OCR1B=b;
delay_ms(50);
}
}