我的AVR单片机的串口怎么不工作啦

2019-03-24 21:15发布

程序如下:
//包含所需头文件
#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/signal.h>




/*------宏定义------*/
#define uchar        unsigned char
#define uint        unsigned int
#define BIT(x)        (1<<(x))
#define NOP()        asm("nop")
#define WDR()         asm("wdr")

uchar dat ;

//端口初始化
void port_init(void)
{
        PORTA = 0x3C;
        DDRA  = 0x3C;
        PORTB = 0xFF;
        DDRB  = 0xFF;
        PORTC = 0x00;
        DDRC  = 0x00;
        PORTD = 0x03;
        DDRD  = 0x01;
}


//串口通信初始化
void usart_init(void)
{
        UCSRB = 0x00;//禁止中断
        UCSRA = 0x02;
        UCSRC = BIT(URSEL) | 0x06;
        UBRRL = 0x8F;
        UBRRH = 0x00;
        UCSRB = 0x98;
}


//串行接收结束中断服务程序
//#pragma interrupt_handler usart_rx_isr:12
//void usart_rx_isr(void)
SIGNAL(SIG_USART_RECV)
{
        dat = UDR ;
       
}

//
void Send()
{
        uchar k = 1 ;
        while(!UCSRA & (1 << UDRE));
        UDR = k  ;
}

void init_devices(void)
{
        cli(); //禁止所有中断
        MCUCR  = 0x00;
        MCUCSR = 0x80;//禁止JTAG
        GICR   = 0x00;
        port_init();
        usart_init();
        sei();//开全局中断
}
//主函数
int main(void)
{
        init_devices();
        //在这继续添加你的代码
        while(1)
        {
         NOP();
         NOP();
         NOP();
         NOP();
          NOP();
         Send();
        }
        return 0;
}
我都换了两片M16了
请高手指教一下?:'( :'( :Q 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。