使用的是atmega48芯片,程序如下:
#include
#include
#include
#define F_CPU 8000000UL
#include
#include
#define uchar unsigned char
#define uint unsigned int
//控制单个io口
省略
uint a;
//各端口初始化
void PORT_INIT(void)
{
DDRD=(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD6)|(1<<PD7); //PD2,PD3,PD4,PD7,PD6为输出端口
PORTD=0x00;
DDRC=(1<<PC3)|(1<<PC4)|(1<<PC5); // 将AD转换口设置成输入
PORTC=0x00; // 不带上拉电阻
DDRB=(1<<PB1)|(1<<PB2) |(1<<PB3)|(1<<PB4)|(1<<PB5); //PORTB口的PB0,PB1,PB2设为输出口,其它为输入口
PORTB=0x00;//不带上拉电阻
}
void USART0_INIT(void)
{
cli(); //关总中断;
UCSR0B=0x00; //关闭USART0,包括使能和中断
UCSR0A=0x00; //不使用倍速发送
UCSR0C=(1<<UCSZ01)|(1<<UCSZ00); //字符长度为8位,1位停止位,无校验位
UBRR0L=103; //波特率的计算,此为8M的数值,4M时为51;
UBRR0H=0;
UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0); //接收使能和发送使能,开接收中断使能
sei(); //开总中断
}
void time0_init()
{
TCCR0A=(1<<COM0A1)|(1<<WGM01)|(WGM00);//快速PWM模式
TCCR0B=(1<<CS00);//无分频,启动时钟
OCR0A=0x60;
LEDG0;
}
void time1_init()
{
TCCR1A=(1<<COM1B1)|(WGM10);
TCCR1B=(1<<WGM12)|(1<<CS10);//wu分频、8位快速PWM
OCR1B=0xd9;
LEDR0;
}
void time2_init()
{
TCCR2A=(1<<COM2B1)|(1<<WGM21)|(WGM20);
TCCR2B=(1<<CS20);
OCR2B=0x0b;
LEDY0;
}
int main(void)
{
uint ADD_AVE,MUX; //AD转换后得到的数据
uint i=0;
a=0;
PORT_INIT();
//USART0_INIT();
wdt_enable(WDTO_2S);
wdt_reset();
PWM0;LEDG1;LEDR1;LEDY1;wdt_reset();
_delay_ms(1000);wdt_reset();
_delay_ms(1000);wdt_reset();
_delay_ms(1000);wdt_reset();
while(1)
{
if (a==0)
{
a=1;
time0_init();
time1_init();
time2_init();
}
OCR2B=20;
wdt_reset();
}
}
之前也做了许多程序没有问题,不知道怎么了之后重新编译之后都不能输出pwm
各种尝试没有结果,泪目...