2 qq28628820 qq28628820 于 2016.05.10 15:10 提问

Atmel studio 6.0 编译之后PWM无输出,求大神指点

使用的是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

各种尝试没有结果,泪目...

1个回答

silehaixianghuirenj
silehaixianghuirenj   2016.10.08 01:29

#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<<P

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
AVR Studio 6设置技巧
好久没有写博客文章了。这段时间课题完成正在整理材料,回过头来重新认识了一下AVR。 孔子说过,温故而知新,可以为师也。的确,复习一下AVR单片机还是获得了很多乐趣! 下面就分享一下AVR Studio 6中的部分设置技巧! 1.字体和TAB键的设置。 由于AVR Studio 6采用Visual Studio 2010外壳,所以这部分的设置和VS完全相同。 选择tools->option
AtmelStudio6.0 下atmega88的调试和仿真
AtmelStudio6.0 下atmega88的调试和仿真   这几天一直在调试atmega88PA这款单片机,用的开发环境是AtmelStudio6.0,绕了不少弯路,网上关于这方面的资料也不多;在这里分享一下自己的调试过程,供大家一起学习。 1、双击快捷方式打开软件。 2、新建一个过程或者打开一个过程 这里选择打开一个工程文件 打开之后如图所示
ATmega128a AVR开发工具:atmel studio 6.0下Makefile编写
这个工具里没有avrdude,我用下面的makefile,产生不了总的hex文件,单独文件都能编译通过,谁做过的知道要怎么改? CC=avr-gcc CFLAGS=-Wall -Wextra -mmcu=atmega128a -O1 -save-temps -g AVRDUDE=avrdude -p atmega128a -c usbasp -e -U flash:w: OBJCOPY=a
Atmel studio注意事项
注意事项整理如下:    1)        MCU必须的头文件        Atmel Studio 6 (以下简称AS6)中统一用#include 。这点很重要,AS6把atmel 所有的单片机头文件全都集成在一起了,以后不必再去分具体的每种芯片的头文件了   2)        汇编嵌入       在AS6 中,你可以直接使用asm("xxx")格式.或者用小写的sei();这
AVR Studio中添加两个C文件遇到的问题
今天我按照51学习的方法,在keil软件中添加两个c文件,方便工程管理。但刚刚将文件添加完毕,编译时就傻眼了,各种各样的问题一并而出。 问题1、error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘XXX’,xxx 问题2、无法找到*.elf文件 通过网上搜寻后,
AVR/Atmel Studio延时函数没有被调用的问题
最近刚接触Atmel Studio,有很多东西不熟悉。弄了个范例程序,想自己改个跑马灯的程序,需要用到延时,可是延时一做成函数就有问题,根本没有延时的效果,把代码放到主函数里却没有问题。使用avr simulator软件仿真试试,发现延时函数根本没有被调用,可是函数明明声明得没有问题啊。         网上一查发现是GCC编译器优化导致的。这下我明白了,因为GCC编译器会误认为这是没有
samd20 21 配置pwm 改变频率 占空比
static void configure_tc(void) {     //! [setup_config]     struct tc_config config_tc;     //! [setup_config]     //! [setup_config_defaults]     tc_get_config_defaults(&config_tc);     config
Atmel Studio-SAM单片机开发 ---新建工程
Atmel Studio-SAM单片机开发
AVR仿真调试方法---AVR Studio与Proteus联合仿真调试
一.WinAVR生成相应文件    只需要安装WinAVR。会生成相应文件,下载到目标板中运行。也可以把生成的elf或cof文件引入到Proteus中进行软件与硬件的仿真,单可单步调试。 1.制作makefile文件 (1)运行mfile, 弹出窗口; (2)填入
AVR STUDIO与PROTEUS的联调
网上面很多介绍这两个软件联调的方式是先用AVR STUDIO生成COF或ELF文件,然后用PROTEUS打开,这样在PROTEUS中模拟运行的时候就可以看到源码和单步调试了。   在PROTEUS 7.4之后,PROTEUS有了一个叫PROTEUS VSM VIEWER的插入式模式,这个模块可以自动插入到AVR STUDIO中,与AVR STUDION集成一体,实现了在AVR STUDIO工作