这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » mega16芯片printf函数问题

共6条 1/1 1 跳转至

mega16芯片printf函数问题

工程师
2024-01-05 19:10:19     打赏

求求求!!!
我使用mega16芯片通过重写putchar函数来实现printf函数,proteus仿真与虚拟串口仿真都可以读到数据,但与单片机链接无法读取数据,已排除硬件电路问题,因为我用之前单个字符发送的程序,可以正常读取。

/ 串口发送部分void USART_Init(void){
UCSRB=0x00;       //禁止发送器和接收器,禁止串口中断
UCSRA=0b00100000; //各标志位清零,双机通信模式,无加速波特率
UBRRH = 0x00;                                                      
UBRRL = 0x4D;                      // 设置波特率(12MHz 9600)
UCSRB = 0x98;                      // 使能串口发送
UCSRC = 0b10000110;       //异步模式,无奇偶校验,1位停止位,8位数据位
//fdevopen(putchar, NULL);
}void USART_Send(char dat)
{while (!(UCSRA & (1 << UDRE)));// 等待发送缓冲器为空
delay(1);UDR = dat; // 将数据写入发送缓冲区}
// 重写putchar以实现printf
int putchar(char c)
{
USART_Send(c);
return c;
}





关键词: mega16     printf     函数    

助工
2024-01-05 19:10:54     打赏
2楼

a){  while(!(UCSRA&(1<<udre))); 等待发送缓冲区为空    UDR=dat; //将数据写入发送缓冲区
}int putchar(int c){
    while(!(UCSRA&(1<<udre))); 等待发送缓冲区为空    UDR=c; //将字符写入发送缓冲区
    return 0;
}void printf(const char *str){
    while(*str){
        putchar(*str++);
    }
}int main(void){
   USART_Init(); //初始化串口
   printf("Hello World!n"); //发送字符串
   return 0;


院士
2024-01-06 08:32:04     打赏
3楼

现在这个芯片还能买到吗?


专家
2024-01-06 10:53:26     打赏
4楼

仔细找一下什么问题


专家
2024-01-07 18:29:20     打赏
5楼

感谢分享


专家
2024-01-07 19:29:29     打赏
6楼

感谢分享


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]