pcx17 发表于 2011-1-20 18:26:26

请教atmega162串口问题

打算用atmega162做东西的,但是串口用些问题怎么也解决不了。我这个162用串口发数据可以,但是接收不了。熔丝位左改右改,还是那个问题,熟悉的朋友帮我看一下是哪里出了问题。下面是程序和熔丝位配置,熔丝位“1”为未编程

#include <iom162v.h>
#include <macros.h>
#defineuchar unsigned char
#defineuintunsigned int

#definemclk   8000000
#pragma interrupt_handler uart_rx:21

uchar rdata,flag=0;

void delay(uint ms)
{
      uint i,j;
        for(i=0;i<ms;i++)
           {
           for(j=0;j<1141;j++);
       }
}

void uart_init()
{
   UCSR0B = 0x00; //disable while setting baud rate
   UCSR0A = 0x00; //disable while setting baud rate
   UBRR0L=0x33; //set baud rate(8M/19200/8)-1
   UBRR0H = 0x00;
   UCSR0C = BIT(URSEL0) | 0x86;//URSEL0-UMSEL0-UPM01-UPM00-USBS0-UCSZ01-UCSZ00-UCPOL0
   UCSR0A = 0x02; //enable//RXC0-TXC0-UDRE0-FE0-DOR0-UPE0-U2X0-MPCM0
   UCSR0B = 0x98; //enable//RXCIE0-TXCIE0-UDRIE0-RXEN0-TXEN0-UCSZ02-RX80-TX80
   
   SREG=BIT(7);                      //全局中断开放
   DDRD|=0X02;                      //配置TX为输出(很重要)

}
void uart_sendB(uchar data)
{
   while(!(UCSR0A&(BIT(UDRE0)))) ;
   UDR0=data;
   while(!(UCSR0A&(BIT(TXC0))));
   UCSR0A|=BIT(TXC0);
}
void uart_rx()
{
    UCSR0B&=~BIT(RXCIE0);
        rdata=UDR0;
        flag=1;
        UCSR0B|=BIT(RXCIE0);
}
void main()
{

    uart_init();
       

        while(1)
        {
           if(flag)
           {             
                  uart_sendB(rdata);          
                  flag=0;
           }
       
        }
       
}

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_612518UJS2LM.jpg
熔丝位配置 (原文件名:162.jpg)

pcx17 发表于 2011-1-20 19:37:41

中断号写错了,是“20”。但还是接收不到正确的数据。

easier 发表于 2011-1-20 22:01:20

這句完全無用   ---> DDRD|=0X02;               //配置TX为输出(很重要)

双飞燕泡茶 发表于 2013-2-27 16:36:42

熔丝位第一个CLKDIV8不用配置吗?请教
页: [1]
查看完整版本: 请教atmega162串口问题