这个程序用atmel studio 7编译 不能正常运行,用ICCAVR却可以

krguang9087 2016-12-06 10:34:40
/*
* WhileAndtimer0Test.c
*
* Created: 2016/12/5 18:48:16
* Author : G
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#define baudrate 9600
unsigned char CmdArrive=0;
void Time0_Init(){
TCCR0|=_BV(CS02)|_BV(CS00); //1024分频
TCNT0=256-F_CPU/1024*0.001; //定时1ms
TIMSK|=0x01;
sei();
}
void USART_Init(){
UBRRL= (F_CPU/baudrate/16-1)%256; //设置波特率
UBRRH= (F_CPU/baudrate/16-1)/256;
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //接收中断使能,接收器与发送器使能
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //设置帧格式 : 8 个数据位 , 1 个停止位
}
void USART_Transmit( unsigned char data ){
while ( !( UCSRA & (1<<UDRE)) ); //等待发送缓冲器为空
UDR = data; //将数据放入缓冲器,发送数据
}
int main(void)
{
Time0_Init();
USART_Init();
while (1)
{
if(CmdArrive){ //括号内的CmdArrive改为1,可以发送0x1D,现在不能发送
CmdArrive=0;
USART_Transmit(0x1d);
}
}
}
ISR(TIMER0_OVF_vect){
TCNT0=256-F_CPU/1024*0.001; //重装定时1ms
CmdArrive=1;
//USART_Transmit(0x1c);
}

ISR(TIMER0_OVF_vect){
TCNT0=256-F_CPU/1024*0.001; //重装定时1ms
CmdArrive=1;
//USART_Transmit(0x1c);
}

这里的 //USART_Transmit(0x1c);如果不注释掉的话,也是可以发送的。所以定时器和串口发送是没问题的。

用atmel studio 7 怎么试都不行,换了ICCAVR 就可以了,太诡异了。不过真的不想用ICCAVR,这编译器太简陋了,啥功能都没有。
...全文
1289 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
galle 2018-01-13
  • 打赏
  • 举报
回复
用source insight或UE之类的编辑软件编程,IIC编译还是挺方便的!
ToReal_2015 2017-12-18
  • 打赏
  • 举报
回复
我也受够了ICCAVR 编程界面太不友好,不能跳转到子程序,不能折叠、、、 准备用atmel studio 7,先看看大家评论~
Haiguozhe 2016-12-06
  • 打赏
  • 举报
回复
串口通信,目前在studio 中编译通过,不出来功能
schlafenhamster 2016-12-06
  • 打赏
  • 举报
回复
可以比较 机器码

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧