標(biāo)題:
關(guān)于串口通信接收問題
[打印本頁]
作者:
xiangliang
時間:
2017-5-18 12:43
標(biāo)題:
關(guān)于串口通信接收問題
用的是無線模塊接受數(shù)據(jù),串口數(shù)據(jù)發(fā)送接收都沒問題,通過串口助手調(diào)試的,現(xiàn)在的問題是,我把其中一個無線模塊和單片機(jī)連在一起。另一個模塊和鍵盤連在一起。當(dāng)按鍵按下時,發(fā)送一個數(shù)據(jù),現(xiàn)在數(shù)據(jù)接收到了。但是怎么把數(shù)據(jù)從SBUF中讀出來,程序應(yīng)該怎么寫。下面是我寫的一段,實現(xiàn)的功能是當(dāng)接收到數(shù)據(jù)1時,小燈亮,數(shù)據(jù)2時第二個小燈亮。不知道哪里有問題接收程序
#include<reg51.h>
#define uchar unsigned char
sbit led1=P2^1;
sbit led2=P2^2;
uchar a;
void UsartConfiguration()
{ SCON=0X50; //設(shè)置為工作方式1
TMOD=0X20; //設(shè)置計數(shù)器工作方式2
PCON=0X80; //波特率加倍
TH1=0XFA; //計數(shù)器初始值設(shè)置,注意波特率是9600
TL1=0XFA;
TR1=1;
}
void main()
{
UsartConfiguration();
if(a==1)
{led1=0};
else if(a==2)
{led2=0};
while(1)
}
void ser() interrupt 4
{
RI=0;
a=SBUF;
}
作者:
zha
時間:
2017-5-18 19:01
if(RI==1) // 是否有數(shù)據(jù)到來
{
RI = 0; 需要手動置零
tmp = SBUF; 把數(shù)據(jù)給了tmp
ctrl(); 執(zhí)行要執(zhí)行的函數(shù)
}
void init() //串口初始化
{
ES=0; //關(guān)中斷
SCON = 0x50; // REN=1允許串行接受狀態(tài),串口工作模式1, //10位UART(1位起始位,8位數(shù)據(jù)位,1位停止位,無奇偶校驗),波特率可變
TMOD = 0x20; // 定時器1工作于方式2,8位自動重載模式, 用于產(chǎn)生波特率
TH1=TL1=0xFD; // 波特率9600 (本次測試采用晶振為11.0592)
PCON &= 0x7f; // 波特率不倍增
TR1 = 1; //定時器1開始工作,產(chǎn)生波特率
//發(fā)送標(biāo)志位置0
TI=0; //接收標(biāo)志位置0
RI=0;
//EA=0;
ES=1;
}
作者:
chunhai184
時間:
2017-5-19 08:52
定義全局變量,中斷里存,外面再處理。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1