標(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