久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 51串口 單片機上接收數據程序

51串口 單片機上接收數據程序

作者: 時間:2016-11-17 來源:網絡 收藏
#include

#include

本文引用地址:http://cqxgywz.com/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) //只要接收中斷標志位RI沒有被置“1” 當接收完畢時,中斷標志RI被置1
; //等待,直至接收完畢(RI=1)
RI=0; //為了接收下一幀數據,需將RI清0
dat=SBUF; //將接收緩沖器中的數據存于dat
return dat;
}

void main (void)
{
int i =0;
SCON = 0x50; //REN=1允許串行接受狀態,串口工作模式2
TMOD|= 0x20; //定時器1工作方式2
// PCON|= 0x80; //波特率提高一倍
//TH1 = 0xFD; //baud*2 /* reload value 19200、數據位8、停止位1。效驗位無(11.0592)
TH1 = 0xFD;// //baud /* 波特率9600、數據位8、停止位1。效驗位無 (11.0592M)
TL1 = 0xFD;
TR1 = 1; //開啟定時器1
//ES = 1; //開串口中斷 是否開串口中斷和開總中斷不影響。
//EA = 1; // 開總中斷
// IE = 0x0;
REN=1; //允許接收
while(1)
{
P1=Receive(); //將接收到的數據送P2口顯示
}

}

c51串口接收并發送數據程序
2007年11月02日 下午 10:00


#include
#defineBUFFERLEGTH 10
//-----------------------------------------------------------------
void UART_init();//串口初始化函數
void COM_send(void);//串口發送函數
char str[20]="hellorn";

//-------------------------------------------------------------------
void main(void)
{
unsigned char i;
UART_init();//初始化串口
for(i = 0;i < 10 ;i++)
{
COM_send();//首先發送一次數據作為測試用

};

while(1);
}


//-------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函數名稱: UART_init()串口初始化函數
// 函數功能: 在系統時鐘為11.059MHZ時,設定串口波特率為9600bit/s
//串口接收中斷允許,發送中斷禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{
//初始化串行口和波特率發生器
SCON =0x50;//選擇串口工作方式1,打開接收允許
TMOD =0x20;//定時器1工作在方式2,定時器0工作在方式1
TH1 =0xfA;//實現波特率9600(系統時鐘11.0592MHZ)
PCON = 0x80;
TR1 =1;//啟動定時器T1
ET1 =0;
ES=1;//允許串行口中斷
PS=1;//設計串行口中斷優先級
EA =1;//單片機中斷允許
}
//------------------------------------------------------------
void COM_send(void)
{
unsigned char point = 0;
for(point=0;point< 20;point++)//連續發送二十位數據//把緩存區的數據都發送到串口
{
SBUF=str[point];
while(!TI);
TI=0;
}
}
//--------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函數名稱: com_interrup()串口接收中斷處理函數
// 函數功能: 接收包括起始位S在內的十位數據到數據緩沖區
//--------------------------------------------------------------------------------------------------
void com_interrupt(void) interrupt 4 using 3
{
unsigned char RECEIVR_buffer;
if(RI)//處理接收中斷
{
RI=0;//清除中斷標志位
RECEIVR_buffer=SBUF;//接收串口數據

if (RECEIVR_buffer == s)
{
SCON =0x40;//接收不允許
COM_send();//發送數據
SCON =0x50;//接收允許
}
}




評論


技術專區

關閉