mega48串口怎么都不对

2019-03-24 20:16发布

/*
* AVRGCC1.c
*
* Created: 2016/10/23 17:11:04
*  Author: xuyuntonge
*/
#include <avr/io.h>
#include <avr/pgmspace.h>
//#include <avr/interrupt.h>
#include <avr/signal.h>
#include <string.h>
#include <stdio.h>
#include <util/delay.h>


#define F_CPU 4000000UL   //初始化晶振频率

void USART_Init(unsigned char baud );
void USART_Transmit( unsigned char data );
unsigned char USART_Receive( void );
void USART_Init(unsigned char baud)
{
        unsigned int tmp;
        tmp= F_CPU/baud/16-1;
        UBRR0H = (unsigned char)(tmp>>8);
        UBRR0L = (unsigned char)tmp;
        UCSR0B = (1<<RXEN0)|(1<<TXEN0);
        UCSR0C = (1<<UMSEL00)|(3<<UCSZ00);
}
void USART_Transmit( unsigned char data )
{
        while ( !( UCSR0A & (1<<UDRE0)) );
        UDR0 = data;
}
unsigned char USART_Receive( void )
{
        while ( !(UCSR0A & (1<<RXC0)) );
        return UDR0;
}
int main(void)
{
                DDRD=0xff;
                USART_Init(9600);
            while (1)
                {
                        USART_Transmit(1);
                        _delay_ms(300);
                }
}

代码如上 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
xutong
1楼-- · 2019-03-25 02:51
串口调试助手的设置
xutong
2楼-- · 2019-03-25 06:23
void USART_Init(uint baud)
{
       
        unsigned int tmp;
        tmp= F_CPU/baud/16-1;
        UBRRH =(unsigned char)(tmp>>8);
        UBRRL = (unsigned char)tmp;
        UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);  //接收完成中断使能
        UCSRC = (1<<URSEL)|(3<<UCSZ0); //UCSRS=(3<<1)=0000 0110
        sei();
}
以前写过的MEGA16看看配置差不多也是可以用的,但是到了mega48稍微改了下就不能用了感觉很奇怪,
是不是哪里疏漏了,求解
xutong
3楼-- · 2019-03-25 08:34
那位兄台有开发板帮我试试也好,mega48 88 168好像是通用的
xutong
4楼-- · 2019-03-25 12:55
 精彩回答 2  元偷偷看……

一周热门 更多>