USRAT通信測試
嘗試了短接測試,錯誤率還比較小,通過rs232連接到電腦中的串口助手顯示的信息不準(zhǔn)確。
本文引用地址:http://m.butianyuan.cn/article/201611/316844.htm
#include
#include
#include "delay.h"
#define uchar unsigned char
#define BAUD 9600 //波特率采用9600bps
#define CRYSTAL 4000000//系統(tǒng)時鐘4MHz
//計算和定義波特率設(shè)置參數(shù)
#define BAUD_SETTING (unsigned int)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)
#define BAUD_H (unsigned char)(BAUD_SETTING>>8)
#define BAUD_L (unsigned char)(BAUD_SETTING)
// USART控制和狀態(tài)寄存器的標(biāo)志位定義
#define RXC 7 // UCSRA位定義
#define TXC 6
#define UDRE 5
#define FE 4
#define DOR 3
#define PE 2
#define U2X 1
#define MPCM 0
#define RXCIE 7 // UCSRB位定義
#define TXCIE 6
#define UDRIE 5
#define RXEN 4
#define TXEN 3
#define UCSZ2 2
#define RXB8 1
#define TXB8 0
#define URSEL 7 // UCSRC位定義
#define UMSEL 6
#define UPM1 5
#define UPM0 4
#define USBS 3
#define UCSZ1 2
#define UCSZ0 1
#define UCPOL 0
#define FRAMING_ERROR (1<
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
uchar status,data;
status=UCSRA;
data=UDR;
if((status&(FRAMING_ERROR|PARITY_ERROR|DATA_OVERRUN))==0)
PORTB = led7[data];
}
void USART_Transmit(uchar data)
{
while(!(UCSRA & DATA_REGISTER_EMPTY)); // 等待發(fā)送寄存器空
UDR=data; // 發(fā)送數(shù)據(jù)
}
void inti_port(void)
{
PORTB=0x00; // LED段碼輸出
DDRB=0xff;
PORTD=0x03; // TXD(PD1)輸出
DDRD=0x02; // RXD(PD0)輸入,上拉有效
}
void inti_usart(void)
{
UCSRA = 0x00; // USART初始化
UCSRB = (1<
UCSRC = (1<
UBRRH = BAUD_H; // 設(shè)置波特率
//UBRRL = BAUD_L;
SEI(); // 開中斷
}
void main(void)
{
uchar i=0;
inti_port();
inti_usart();
while(1)
{
USART_Transmit(i);
if (++i>=10)i=0;
delay_ms(500);
}
}
評論