標(biāo)題: 請(qǐng)問(wèn)下大家有關(guān)51單片機(jī)串口通信控制LED燈亮滅的問(wèn)題 [打印本頁(yè)]

作者: 雪過(guò)留痕    時(shí)間: 2017-6-16 20:54
標(biāo)題: 請(qǐng)問(wèn)下大家有關(guān)51單片機(jī)串口通信控制LED燈亮滅的問(wèn)題
#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;
}


以上是燒錄單片機(jī)里的源碼,然后我用串口調(diào)試助手發(fā)送FE到單片機(jī)里,二進(jìn)制是11111110。理論上來(lái)說(shuō)會(huì)有一個(gè)燈亮的,可是單片機(jī)上都沒(méi)反應(yīng)是什么鬼啊= =

作者: zl2168    時(shí)間: 2017-6-17 08:19
本帖最后由 zl2168 于 2017-6-17 09:54 編輯

實(shí)例42  74HC164串入并出控制8/16循環(huán)燈
Proteus仿真一下,確認(rèn)有效。
實(shí)例42 74HC164串行輸出控制8-16循環(huán)燈.rar (53.19 KB, 下載次數(shù): 142)


以上摘自張志良編著《80C51單片機(jī)實(shí)用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學(xué)習(xí)51單片機(jī)原理,程序(雙解c和匯編)語(yǔ)句條條有注解,便于閱讀理解,便于自學(xué)。仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書(shū)上看了。到圖書(shū)館借,或到新華書(shū)店翻閱,或到網(wǎng)上書(shū)店打折購(gòu)買(mǎi)。

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

串口控制LED燈.rar

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


作者: 桂木桂馬    時(shí)間: 2017-6-17 17:35
你這個(gè)程序本人看過(guò)了沒(méi)有問(wèn)題,本人剛剛也用自己的單片機(jī)實(shí)驗(yàn)了一下,也是可以亮的,所以你不行大概是波特率不對(duì)或者軟件問(wèn)題
作者: zl2168    時(shí)間: 2017-6-17 20:32
桂木桂馬 發(fā)表于 2017-6-17 17:35
你這個(gè)程序本人看過(guò)了沒(méi)有問(wèn)題,本人剛剛也用自己的單片機(jī)實(shí)驗(yàn)了一下,也是可以亮的,所以你不行大概是波特 ...

什么沒(méi)有問(wèn)題?真是瞎指導(dǎo)!T1都未開(kāi)中!程序怎么運(yùn)行?
我給你介紹你一個(gè)正確的可演示觀看的參考案例
實(shí)例77  雙機(jī)串行通信方式1
Proteus仿真一下,確認(rèn)有效。
實(shí)例77 雙機(jī)通信方式1.rar (40.4 KB, 下載次數(shù): 96)

以上摘自張志良編著80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行。書(shū)中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,程序語(yǔ)句條條有注解。仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書(shū)上看了。到圖書(shū)館借,或到新華書(shū)店翻閱,或到網(wǎng)上書(shū)店打折購(gòu)買(mǎi)。











作者: dh13228566254    時(shí)間: 2017-6-17 20:52
學(xué)習(xí)了這么久單片機(jī)還是不會(huì)
作者: naij    時(shí)間: 2018-1-25 23:11
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實(shí)驗(yàn),最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類(lèi)型。類(lèi)型不匹配,接收到也 ...

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

作者: naij    時(shí)間: 2018-1-25 23:20
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實(shí)驗(yàn),最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類(lèi)型。類(lèi)型不匹配,接收到也 ...

從新測(cè)試了程序!原來(lái)你用的unsigned char="12" 來(lái)關(guān)燈,其他數(shù)字一概來(lái)開(kāi)燈!哈哈
還真是有你的

作者: naij    時(shí)間: 2018-1-26 00:15
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實(shí)驗(yàn),最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類(lèi)型。類(lèi)型不匹配,接收到也 ...

不知道是程序的問(wèn)題還是51的問(wèn)題。連續(xù)發(fā)送12也會(huì)關(guān)燈或者開(kāi)燈!
作者: street    時(shí)間: 2018-1-26 08:35
給上位機(jī)發(fā)送個(gè)數(shù)據(jù)試試 看看 能接受到什么
作者: Listen丶51    時(shí)間: 2018-1-26 17:03
程序沒(méi)有問(wèn)題的,固計(jì)是你的波特率或者是硬件存在問(wèn)題,你再查查看
作者: naij    時(shí)間: 2018-1-26 18:04
street 發(fā)表于 2018-1-26 08:35
給上位機(jī)發(fā)送個(gè)數(shù)據(jù)試試 看看 能接受到什么

返回的數(shù)據(jù)就是我發(fā)出的”12“
作者: naij    時(shí)間: 2018-1-27 12:36
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實(shí)驗(yàn),最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類(lèi)型。類(lèi)型不匹配,接收到也 ...

#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;//設(shè)置為工作方式1
        TMOD=0X20;//設(shè)置計(jì)數(shù)器工作方式2
        PCON=0X80;//波特率加倍
        TH1=0XF3;//計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
        TL1=0XF3;
        ES=1;//打開(kāi)接收中斷
        EA=1;//打開(kāi)總中斷
        TR1=1;//打開(kāi)計(jì)數(shù)器
}

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

void Usart() interrupt 4//中斷函數(shù)
{
        unsigned char m;
        m=SBUF;
        if(m==n[0])
        {
                LED1=0;                                 //開(kāi)燈
        }         
        if (m==nn[0])
        {
                LED1=1;                                 //關(guān)燈
        }
        receiveData=SBUF;//出去接收到的數(shù)據(jù)
        RI = 0;//清除接收中斷標(biāo)志位
        SBUF=receiveData;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
        while(!TI);//等待發(fā)送數(shù)據(jù)完成
        TI=0;//清除發(fā)送完成標(biāo)志位
}
按照程序的邏輯應(yīng)該是發(fā)12開(kāi)燈,發(fā)其他關(guān)燈才對(duì)。因?yàn)槲以跍y(cè)試時(shí)發(fā)現(xiàn)發(fā)送11-19(數(shù)字12除外)給51都可以亮燈。發(fā)送12關(guān)燈。我很奇怪。為什么會(huì)這樣。程序我改成這樣了。問(wèn)題解決了。發(fā)a開(kāi)燈,發(fā)b關(guān)燈。發(fā)其他一概無(wú)反應(yīng)!
作者: naij    時(shí)間: 2018-1-27 22:37
naij 發(fā)表于 2018-1-27 12:36
#include

typedef unsigned char u8;

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

m=nn[0]是判斷語(yǔ)句只提取了nn數(shù)組的第一位!真是暈倒了
作者: yjr000    時(shí)間: 2018-3-15 15:19
請(qǐng)問(wèn)樓主解決問(wèn)題了么,如果解決了,能否給我看看
作者: yjr000    時(shí)間: 2018-3-15 15:21
naij 發(fā)表于 2018-1-27 22:37
又出現(xiàn)了問(wèn)題
我將改成
u8 n[]="aa";

請(qǐng)問(wèn)最后成功了么,想看看你的程序
作者: yjr000    時(shí)間: 2018-3-15 15:31
請(qǐng)問(wèn)一下51單片機(jī)串口通信控制LED燈亮滅。您這個(gè)還有程序和仿真圖么,我想了解一下,但自己還不會(huì)
作者: Mr.Lee    時(shí)間: 2018-5-24 23:58
naij 發(fā)表于 2018-1-27 12:36
#include

typedef unsigned char u8;

這個(gè)程序我燒錄后,能夠返回?cái)?shù)值但是的燈沒(méi)有反應(yīng)
作者: e.冰凌    時(shí)間: 2019-1-17 14:04
naij 發(fā)表于 2018-1-26 00:15
不知道是程序的問(wèn)題還是51的問(wèn)題。連續(xù)發(fā)送12也會(huì)關(guān)燈或者開(kāi)燈!

沒(méi)有啊,只會(huì)閃一下
作者: e.冰凌    時(shí)間: 2019-1-17 14:05
naij 發(fā)表于 2018-1-25 23:20
從新測(cè)試了程序!原來(lái)你用的unsigned char="12" 來(lái)關(guān)燈,其他數(shù)字一概來(lái)開(kāi)燈!哈哈
還真是有你的

別的數(shù)字都沒(méi)有作用啊
作者: e.冰凌    時(shí)間: 2019-1-17 14:12
naij 發(fā)表于 2018-1-27 22:37
又出現(xiàn)了問(wèn)題
我將改成
u8 n[]="aa";

你發(fā)送12,它是先執(zhí)行1,再執(zhí)行2,所以會(huì)閃一下再滅。其余都可以類(lèi)推。
作者: wpdssl    時(shí)間: 2019-1-17 15:19
程序沒(méi)有問(wèn)題,可能是單片機(jī)故障也有可能的,我的單片機(jī)有次就是,后來(lái)?yè)Q一個(gè)就可以了
作者: zc123    時(shí)間: 2019-1-17 15:45
中斷函數(shù)需要申明
作者: 一一呀    時(shí)間: 2020-5-22 16:56
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實(shí)驗(yàn),最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類(lèi)型。類(lèi)型不匹配,接收到也 ...

贊贊贊
作者: 杰瑞便    時(shí)間: 2020-8-1 10:14
HC6800-ES-V2.0 發(fā)表于 2017-6-17 15:57
串口通訊實(shí)驗(yàn),最要緊的有三件事:
第一:串口通訊發(fā)送、接收的是什么樣的數(shù)據(jù)類(lèi)型。類(lèi)型不匹配,接收到也 ...

謝謝
作者: 小子不識(shí)字    時(shí)間: 2021-1-26 15:55
naij 發(fā)表于 2018-1-27 12:36
#include

typedef unsigned char u8;

1,2才是正確的

作者: cy009    時(shí)間: 2021-1-31 20:50
程序沒(méi)問(wèn)題,測(cè)試成功
作者: xunzhaod    時(shí)間: 2021-3-3 14:25
中斷配置錯(cuò)了,應(yīng)該是if(RI)等待接收完成,清零
作者: leiwawa    時(shí)間: 2021-12-8 16:37
程序沒(méi)問(wèn)題,測(cè)試成功




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