找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 24013|回復: 28
收起左側

請問下大家有關51單片機串口通信控制LED燈亮滅的問題

  [復制鏈接]
ID:211920 發(fā)表于 2017-6-16 20:54 | 顯示全部樓層 |閱讀模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

void main()
{
    PCON = 0;
    SCON = 0x50;   //串口方式1, 8-n-1, 允許接收.
    TMOD = 0x20;
    TH1 = 0xfd;
    TL1 = 0xfd;
    TR1 = 1;
    ES = 1;
    EA = 1;
    while(1);
}

void servise() interrupt 4
{
    RI = 0;
    P1 = SBUF;
}


以上是燒錄單片機里的源碼,然后我用串口調(diào)試助手發(fā)送FE到單片機里,二進制是11111110。理論上來說會有一個燈亮的,可是單片機上都沒反應是什么鬼啊= =

評分

參與人數(shù) 1黑幣 +3 收起 理由
wangguanguaner + 3 贊一個!

查看全部評分

回復

使用道具 舉報

ID:111634 發(fā)表于 2017-6-17 08:19 | 顯示全部樓層
本帖最后由 zl2168 于 2017-6-17 09:54 編輯

實例42  74HC164串入并出控制8/16循環(huán)燈
Proteus仿真一下,確認有效。
實例42 74HC164串行輸出控制8-16循環(huán)燈.rar (53.19 KB, 下載次數(shù): 142)
74HC164串入并出控制8循環(huán)燈.jpg
164-2.jpg
以上摘自張志良編著《80C51單片機實用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學習51單片機原理,程序(雙解c和匯編)語句條條有注解,便于閱讀理解,便于自學。仿真電路和Hex文件能在清華出版社網(wǎng)站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購買。
回復

使用道具 舉報

ID:164602 發(fā)表于 2017-6-17 15:57 | 顯示全部樓層
串口通訊實驗,最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類型。類型不匹配,接收到也不能有控制的效果。
第二:波特率。波特率不對,就會讓發(fā)送、接收的數(shù)據(jù)發(fā)生偏差,從而不能達到控制效果。
第三:實驗用的模擬軟件。這個軟件好,實驗起來,事半功倍,不好,事倍功半。
分享我的例子程序——完整、詳細說明。
第一:我用的單個字符控制——數(shù)據(jù)類型清楚。
第二:波特率:4800,加倍。不知道你的單片機開發(fā)板或最小系統(tǒng)晶振是多少,用資料中的那個軟件《51波特率初值設定.exe》,查看誤差,誤差大了就不行。我的程序是針對我的板子的,晶振12M,要誤差小,最大波特率只能是4800。若是11.0592M的,波特率可以很大,但不要加倍。
第三:我用的串口通訊模擬軟件,是STC下載程序的串口通訊功能,設置有圖為證。
我的板子及串口相關資料都在,你可以根據(jù)自己的硬件,做出修改。

串口控制LED燈.rar

3.82 MB, 下載次數(shù): 529

評分

參與人數(shù) 1黑幣 +5 收起 理由
lysd + 5 贊一個!

查看全部評分

回復

使用道具 舉報

ID:192523 發(fā)表于 2017-6-17 17:35 | 顯示全部樓層
你這個程序本人看過了沒有問題,本人剛剛也用自己的單片機實驗了一下,也是可以亮的,所以你不行大概是波特率不對或者軟件問題
回復

使用道具 舉報

ID:111634 發(fā)表于 2017-6-17 20:32 | 顯示全部樓層
桂木桂馬 發(fā)表于 2017-6-17 17:35
你這個程序本人看過了沒有問題,本人剛剛也用自己的單片機實驗了一下,也是可以亮的,所以你不行大概是波特 ...

什么沒有問題?真是瞎指導!T1都未開中!程序怎么運行?
我給你介紹你一個正確的可演示觀看的參考案例
實例77  雙機串行通信方式1
Proteus仿真一下,確認有效。
實例77 雙機通信方式1.rar (40.4 KB, 下載次數(shù): 96)
串1.jpg
以上摘自張志良編著80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設計有詳細說明,程序語句條條有注解。仿真電路和Hex文件能在清華出版社網(wǎng)站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購買。










回復

使用道具 舉報

ID:212122 發(fā)表于 2017-6-17 20:52 | 顯示全部樓層
學習了這么久單片機還是不會
回復

使用道具 舉報

ID:279813 發(fā)表于 2018-1-25 23:11 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實驗,最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類型。類型不匹配,接收到也 ...

我用你的程序出現(xiàn)閃燈的情況。就是說輸入“12” led就閃一下。。我想讓led穩(wěn)定的亮著。然后給“13”或者別的什么LED在熄滅
回復

使用道具 舉報

ID:279813 發(fā)表于 2018-1-25 23:20 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實驗,最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類型。類型不匹配,接收到也 ...

從新測試了程序!原來你用的unsigned char="12" 來關燈,其他數(shù)字一概來開燈!哈哈
還真是有你的
回復

使用道具 舉報

ID:279813 發(fā)表于 2018-1-26 00:15 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實驗,最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類型。類型不匹配,接收到也 ...

不知道是程序的問題還是51的問題。連續(xù)發(fā)送12也會關燈或者開燈!
回復

使用道具 舉報

ID:279838 發(fā)表于 2018-1-26 08:35 | 顯示全部樓層
給上位機發(fā)送個數(shù)據(jù)試試 看看 能接受到什么
回復

使用道具 舉報

ID:279847 發(fā)表于 2018-1-26 17:03 | 顯示全部樓層
程序沒有問題的,固計是你的波特率或者是硬件存在問題,你再查查看
回復

使用道具 舉報

ID:279813 發(fā)表于 2018-1-26 18:04 | 顯示全部樓層
street 發(fā)表于 2018-1-26 08:35
給上位機發(fā)送個數(shù)據(jù)試試 看看 能接受到什么

返回的數(shù)據(jù)就是我發(fā)出的”12“
回復

使用道具 舉報

ID:279813 發(fā)表于 2018-1-27 12:36 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實驗,最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類型。類型不匹配,接收到也 ...

#include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit LED1=P2^0;

u8 receiveData;
u8 n[]="a";
u8 nn[]="b";
void UsartInit()//串口初始化函數(shù)
{
        SCON=0X50;//設置為工作方式1
        TMOD=0X20;//設置計數(shù)器工作方式2
        PCON=0X80;//波特率加倍
        TH1=0XF3;//計數(shù)器初始值設置,注意波特率是4800的
        TL1=0XF3;
        ES=1;//打開接收中斷
        EA=1;//打開總中斷
        TR1=1;//打開計數(shù)器
}

void main()
{
        UsartInit();//串口初始化
        while(1);
}

void Usart() interrupt 4//中斷函數(shù)
{
        unsigned char m;
        m=SBUF;
        if(m==n[0])
        {
                LED1=0;                                 //開燈
        }         
        if (m==nn[0])
        {
                LED1=1;                                 //關燈
        }
        receiveData=SBUF;//出去接收到的數(shù)據(jù)
        RI = 0;//清除接收中斷標志位
        SBUF=receiveData;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
        while(!TI);//等待發(fā)送數(shù)據(jù)完成
        TI=0;//清除發(fā)送完成標志位
}
按照程序的邏輯應該是發(fā)12開燈,發(fā)其他關燈才對。因為我在測試時發(fā)現(xiàn)發(fā)送11-19(數(shù)字12除外)給51都可以亮燈。發(fā)送12關燈。我很奇怪。為什么會這樣。程序我改成這樣了。問題解決了。發(fā)a開燈,發(fā)b關燈。發(fā)其他一概無反應!
回復

使用道具 舉報

ID:279813 發(fā)表于 2018-1-27 22:37 | 顯示全部樓層
naij 發(fā)表于 2018-1-27 12:36
#include

typedef unsigned char u8;

又出現(xiàn)了問題
我將改成
u8 n[]="aa";
u8 nn[]="bb";
結果發(fā)af、ah、類似與a+任意字母
都會亮燈或關燈!
原來判斷語句出現(xiàn)了問題。
if(m==n[0])
        {
                LED1=0;                                 //開燈
        }         
        if (m==nn[0])
        {
                LED1=1;                                 //關燈
        }

m=nn[0]是判斷語句只提取了nn數(shù)組的第一位!真是暈倒了
回復

使用道具 舉報

ID:292316 發(fā)表于 2018-3-15 15:19 來自手機 | 顯示全部樓層
請問樓主解決問題了么,如果解決了,能否給我看看
回復

使用道具 舉報

ID:292316 發(fā)表于 2018-3-15 15:21 來自手機 | 顯示全部樓層
naij 發(fā)表于 2018-1-27 22:37
又出現(xiàn)了問題
我將改成
u8 n[]="aa";

請問最后成功了么,想看看你的程序
回復

使用道具 舉報

ID:292316 發(fā)表于 2018-3-15 15:31 | 顯示全部樓層
請問一下51單片機串口通信控制LED燈亮滅。您這個還有程序和仿真圖么,我想了解一下,但自己還不會
回復

使用道具 舉報

ID:337714 發(fā)表于 2018-5-24 23:58 | 顯示全部樓層
naij 發(fā)表于 2018-1-27 12:36
#include

typedef unsigned char u8;

這個程序我燒錄后,能夠返回數(shù)值但是的燈沒有反應
回復

使用道具 舉報

ID:450649 發(fā)表于 2019-1-17 14:04 | 顯示全部樓層
naij 發(fā)表于 2018-1-26 00:15
不知道是程序的問題還是51的問題。連續(xù)發(fā)送12也會關燈或者開燈!

沒有啊,只會閃一下
回復

使用道具 舉報

ID:450649 發(fā)表于 2019-1-17 14:05 | 顯示全部樓層
naij 發(fā)表于 2018-1-25 23:20
從新測試了程序!原來你用的unsigned char="12" 來關燈,其他數(shù)字一概來開燈!哈哈
還真是有你的

別的數(shù)字都沒有作用啊
回復

使用道具 舉報

ID:450649 發(fā)表于 2019-1-17 14:12 | 顯示全部樓層
naij 發(fā)表于 2018-1-27 22:37
又出現(xiàn)了問題
我將改成
u8 n[]="aa";

你發(fā)送12,它是先執(zhí)行1,再執(zhí)行2,所以會閃一下再滅。其余都可以類推。
回復

使用道具 舉報

ID:408853 發(fā)表于 2019-1-17 15:19 | 顯示全部樓層
程序沒有問題,可能是單片機故障也有可能的,我的單片機有次就是,后來換一個就可以了
回復

使用道具 舉報

ID:188465 發(fā)表于 2019-1-17 15:45 | 顯示全部樓層
中斷函數(shù)需要申明
回復

使用道具 舉報

ID:729176 發(fā)表于 2020-5-22 16:56 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實驗,最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類型。類型不匹配,接收到也 ...

贊贊贊
回復

使用道具 舉報

ID:810242 發(fā)表于 2020-8-1 10:14 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實驗,最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類型。類型不匹配,接收到也 ...

謝謝
回復

使用道具 舉報

ID:880659 發(fā)表于 2021-1-26 15:55 | 顯示全部樓層
naij 發(fā)表于 2018-1-27 12:36
#include

typedef unsigned char u8;

1,2才是正確的
回復

使用道具 舉報

ID:619259 發(fā)表于 2021-1-31 20:50 | 顯示全部樓層
程序沒問題,測試成功
回復

使用道具 舉報

ID:839835 發(fā)表于 2021-3-3 14:25 | 顯示全部樓層
中斷配置錯了,應該是if(RI)等待接收完成,清零
回復

使用道具 舉報

ID:989663 發(fā)表于 2021-12-8 16:37 | 顯示全部樓層
程序沒問題,測試成功
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表