標題: 單片機串口通信出了點問題 求大神看一下 [打印本頁]

作者: 日本人孫笑川    時間: 2019-2-12 19:19
標題: 單片機串口通信出了點問題 求大神看一下
就是輸入1的時候蜂鳴器響 2的時候led流水燈 但是什么反應(yīng)都沒有 串口通信可以實現(xiàn) 但是不能時間額外的功能
#include "reg51.h"
#define led P0
typedef unsigned char u8;
typedef unsigned int u16;
sbit beep=P1^5;
u8 Data;
void delay(u16 i)
{
        while(i--);
}

void Communicate()
{
        TMOD=0x20;
        TH1=0xf3;TL1=0xf3;
        TR1=1;PCON=0x80;
  SCON=0x50;ES=1;EA=1;
}
void main()
{ u8 i;
        Communicate();
        while(1)
        {
         if(Data==1)
         {
                 beep=~beep;
                 delay(1000);
         }
         if(Data==2)
         {
                 led=0x80;
                 for(i=0;i<7;i++)
                 {
                         led=(led>>1);
                         delay(20000);
                 }
                 for(i=0;i<7;i++)
                 {
                         led=(led<<1);
                         delay(20000);
                 }
         }
        }
}
void tx() interrupt 4
{

        Data=SBUF;
        RI=0;
        SBUF=Data;
        while(TI==0);
        TI=0;
        
}

QQ瀏覽器截圖20190212191846.png (26.51 KB, 下載次數(shù): 53)

QQ瀏覽器截圖20190212191846.png

作者: yaoji123    時間: 2019-2-13 07:24

        RI=0;
        Data=SBUF;
        
        while(TI==0);
        TI=0;
作者: 笨笨兔    時間: 2019-2-13 08:14
這個未必是單片機串口通信出了問題。
void tx() interrupt 4
{
        Data=SBUF;
        RI=0;
        SBUF=Data;
        while(TI==0);
        TI=0;
}
中斷接收了數(shù)據(jù),然后發(fā)送出去;什么時候按照你的想法處理這個數(shù)據(jù)呢?
這個中斷處理也不是很好。
作者: xuyaqi    時間: 2019-2-13 08:44
查查波特率有無問題。
作者: HC6800-ES-V2.0    時間: 2019-2-13 09:23
你的程序什么問題也沒有(已經(jīng)用板子試驗通過了),是你在使用串口調(diào)試軟件時范了錯誤。
從你的程序上看:判斷是1、2——注意!注意!注意——重要的事兒說三遍,你判斷的數(shù)字1、2,不是字符1、2
而從你截圖中看到的,是發(fā)送字符1、2,當然沒反應(yīng)了。呵呵呵
要勾選HEX發(fā)送嘛!
作者: 1092648746    時間: 2019-2-13 09:45
試著用字符串比較函數(shù)strcmp替代if判斷?
作者: 295312346    時間: 2019-2-13 09:50
1.串口接收到數(shù)據(jù),然后根據(jù)數(shù)據(jù)內(nèi)容進行蜂鳴器或者LED顯示處理后,是否需要將Data變量進行清零?
2.我們這種前后臺系統(tǒng),在做延時的時候,不能直接調(diào)用DELAY這種函數(shù)的,這樣系統(tǒng)會死在這里很長時間的。如果此時有新的串口指令過來的話,你的MCU是無法進行處理的。
作者: 295312346    時間: 2019-2-13 09:54
笨笨兔 發(fā)表于 2019-2-13 08:14
這個未必是單片機串口通信出了問題。
void tx() interrupt 4
{

其實是將數(shù)據(jù)保存在了Data這個變量了,我估計樓主重新發(fā)出去的操作是看看有沒有正確接收,調(diào)試用的吧。
作者: 406443550    時間: 2019-2-14 11:11
SBUF =  Data; while(TI == 0); TI = 0;這些放到main()里面的while(1)最下面試試;中斷函數(shù)里面不能while(TI == 0);堵塞




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1