#include #include
本文引用地址:http://m.butianyuan.cn/article/201611/315388.htm#define uchar unsigned char
#define uint unsigned int
//sbit BEEP = P1; // P1接8個LED
unsigned char Receive(void)
{
unsigned char dat;
while(RI==0) //只要接收中斷標(biāo)志位RI沒有被置“1” 當(dāng)接收完畢時,中斷標(biāo)志RI被置1
; //等待,直至接收完畢(RI=1)
RI=0; //為了接收下一幀數(shù)據(jù),需將RI清0
dat=SBUF; //將接收緩沖器中的數(shù)據(jù)存于dat
return dat;
}
void main (void)
{
int i =0;
SCON = 0x50; //REN=1允許串行接受狀態(tài),串口工作模式2
TMOD|= 0x20; //定時器1工作方式2
// PCON|= 0x80; //波特率提高一倍
//TH1 = 0xFD; //baud*2 /* reload value 19200、數(shù)據(jù)位8、停止位1。效驗位無(11.0592)
TH1 = 0xFD;// //baud /* 波特率9600、數(shù)據(jù)位8、停止位1。效驗位無 (11.0592M)
TL1 = 0xFD;
TR1 = 1; //開啟定時器1
//ES = 1; //開串口中斷 是否開串口中斷和開總中斷不影響。
//EA = 1; // 開總中斷
// IE = 0x0;
REN=1; //允許接收
while(1)
{
P1=Receive(); //將接收到的數(shù)據(jù)送P2口顯示
}
}
c51串口接收并發(fā)送數(shù)據(jù)程序
2007年11月02日 下午 10:00
#include #defineBUFFERLEGTH 10 //----------------------------------------------------------------- void UART_init();//串口初始化函數(shù) void COM_send(void);//串口發(fā)送函數(shù) char str[20]="hellorn"; //------------------------------------------------------------------- void main(void) { unsigned char i; UART_init();//初始化串口 for(i = 0;i < 10 ;i++) { COM_send();//首先發(fā)送一次數(shù)據(jù)作為測試用 }; while(1); } //------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // 函數(shù)名稱: UART_init()串口初始化函數(shù) // 函數(shù)功能: 在系統(tǒng)時鐘為11.059MHZ時,設(shè)定串口波特率為9600bit/s //串口接收中斷允許,發(fā)送中斷禁止 //-------------------------------------------------------------------------------------------------- void UART_init() { //初始化串行口和波特率發(fā)生器 SCON =0x50;//選擇串口工作方式1,打開接收允許 TMOD =0x20;//定時器1工作在方式2,定時器0工作在方式1 TH1 =0xfA;//實現(xiàn)波特率9600(系統(tǒng)時鐘11.0592MHZ) PCON = 0x80; TR1 =1;//啟動定時器T1 ET1 =0; ES=1;//允許串行口中斷 PS=1;//設(shè)計串行口中斷優(yōu)先級 EA =1;//單片機中斷允許 } //------------------------------------------------------------ void COM_send(void) { unsigned char point = 0; for(point=0;point< 20;point++)//連續(xù)發(fā)送二十位數(shù)據(jù)//把緩存區(qū)的數(shù)據(jù)都發(fā)送到串口 { SBUF=str[point]; while(!TI); TI=0; } } //-------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // 函數(shù)名稱: com_interrup()串口接收中斷處理函數(shù) // 函數(shù)功能: 接收包括起始位S在內(nèi)的十位數(shù)據(jù)到數(shù)據(jù)緩沖區(qū) //-------------------------------------------------------------------------------------------------- void com_interrupt(void) interrupt 4 using 3 { unsigned char RECEIVR_buffer; if(RI)//處理接收中斷 { RI=0;//清除中斷標(biāo)志位 RECEIVR_buffer=SBUF;//接收串口數(shù)據(jù)
if (RECEIVR_buffer == s) { SCON =0x40;//接收不允許 COM_send();//發(fā)送數(shù)據(jù) SCON =0x50;//接收允許 } }
|
評論