打印
[AVR单片机]

avr做串口使用printf的问题(带程序)

[复制链接]
6149|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hongji2010|  楼主 | 2010-4-21 15:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
希望各位各抒己见程序如下:出现问题如下:
Device 3% full.
Cannot find source file C:\icc\examples.avr\C\usart\iostudio.s
Done.
本人用的是iccavr编译软件,程序如下:
#include<iom16v.h>
#include<macros.h>
#include<stdio.h>
#define  uchar unsigned char
#define  uint  unsigned int
//#define  mclk 8000000
#pragma interrupt_handler uart_rx:12
uchar flag_uart,i,a,flag_on,flag_time;
void delay(uint ms)
{
    uint i,j;
for(i=0;i<ms;i++)
    {
    for(j=0;j<1141;j++);
       }
}

void uart_init(viod)
{
   uchar baud;
   UCSRB=0x00;
   UCSRA=0x00;      
   UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);  
                                                                                                         
   baud=8000000/16/19200-1 ;  
   UBRRL=baud;              
   UBRRH=baud>>8;     
   UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
                                                      
   SREG=BIT(7);                 
   DDRD|=0X02;              
}
void main()
{
   uart_init();
   
    while(1)
{
    if(flag_uart==1)
    {
     flag_uart=0;
     
     switch(flag_on)
     {
         case 0:puts("turn on");//printf("turn on");
             break;
      case 1:UDR='B';//printf("turn off");
                      break;
      case 2:UDR='C';//printf("error!\n");   
                break;
     }
     while(!(UCSRA&(BIT(TXC))));
          UCSRA|=BIT(TXC);
  
    }     
}   
}
void uart_rx()
{
    UCSRB&=~BIT(RXCIE);
a=UDR;
flag_uart=1;
if(a==1)
    flag_on=0;
else if(a==2)
    flag_on=1;
else
    flag_on=2;
UCSRB|=BIT(RXCIE);
}

相关帖子

沙发
hongji2010|  楼主 | 2010-4-21 15:52 | 只看该作者
补充一下问题就是在 case 0:puts("turn on");或者换成printf("turn on");或者类似这样的输出语句都会有问题。把C:\icc\libsrc.avr文件夹下的iostudio.s粘贴在工程目录下,提示错误就会消失,但做串口实验输入01没有显示,输入02或者03结果正确。本人觉得问题不是我所描述的那么复杂,希望有高手指点。也欢迎各位讨论。

使用特权

评论回复
板凳
hongji2010|  楼主 | 2010-4-24 15:32 | 只看该作者
自己顶一下,望高手指点

使用特权

评论回复
地板
ershisi| | 2010-4-24 22:41 | 只看该作者
爱莫能助···

使用特权

评论回复
5
08_calm| | 2012-12-11 10:09 | 只看该作者
rebuild就行了

使用特权

评论回复
6
qin552011373| | 2012-12-15 13:28 | 只看该作者
putc和printf不能直接使用的,要对这两个函数重定向,把函数输出流指向串口硬件输出,同样scanf也可以重定向用来接收,不过不推荐使用重定向,因为AVR的资源有限,而重定向是很耗存储空间的,关于函数怎么重定向,你可以百度一下,有问题再交流

使用特权

评论回复
7
zd420325| | 2013-1-14 22:28 | 只看该作者
puts,gets()不能直接调用,自己些一个,可参考系统工程自己带的文件函数!在根目录下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:努力成为出色的嵌入式工程师

11

主题

46

帖子

0

粉丝