實(shí)驗(yàn)五 UART實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?br />
1. 了解單片機(jī)的UART的工作原理。
2. 掌握單片機(jī)的UART的應(yīng)用。
二、實(shí)驗(yàn)內(nèi)容
//1. 編寫程序,設(shè)置單片機(jī)UART的波特率為9600,用UART的接收中斷接收數(shù)據(jù),每接收10個(gè)數(shù)據(jù),再用UART的發(fā)送出去。
typedef unsigned char u8;
#include <stc15.h>
void UartInit(void); //9600bps@11.0592MHz
u8 uart=0;
u8 num=0;
u8 rxdbuf[10]={0};
void main()
{
UartInit();
EA=1;
while(1)
{
}
}
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR |= 0x40; //定時(shí)器1時(shí)鐘為Fosc,即1T
AUXR &= 0xFE; //串口1選擇定時(shí)器1為波特率發(fā)生器
TMOD &= 0x0F; //設(shè)定定時(shí)器1為16位自動(dòng)重裝方式
TL1 = 0xE0; //設(shè)定定時(shí)初值
TH1 = 0xFE; //設(shè)定定時(shí)初值
ET1 = 0; //禁止定時(shí)器1中斷
ES = 1; //使能串口中斷
TR1 = 1; //啟動(dòng)定時(shí)器1
}
void Uart2() interrupt 4
{
if(RI==1) //接收中斷
{
RI=0; // 標(biāo)志位清零
rxdbuf[num]=SBUF; //將數(shù)據(jù)送到數(shù)據(jù)存儲(chǔ)器
num++;
if(num>=10)
{
num=0;
SBUF=rxdbuf[0]; // 傳輸十次回到第一次傳輸?shù)臄?shù)據(jù)
uart=1; // 成功接收的標(biāo)志位
}
}
if(TI==1) //發(fā)送中斷
{
TI=0; //標(biāo)志位清零
if(uart<10)
{
SBUF=rxdbuf[uart];//數(shù)據(jù)發(fā)送到 數(shù)據(jù)存儲(chǔ)器
uart++;
}
}
}
|