|
打算用atmega162做东西的,但是串口用些问题怎么也解决不了。我这个162用串口发数据可以,但是接收不了。熔丝位左改右改,还是那个问题,熟悉的朋友帮我看一下是哪里出了问题。下面是程序和熔丝位配置,熔丝位“1”为未编程
#include <iom162v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define mclk 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) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|