欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2482|回復: 7
收起左側

單片機串口通信led燈顯示程序問題

[復制鏈接]
ID:672615 發表于 2020-3-3 15:38 | 顯示全部樓層 |閱讀模式
為什么P2接收了SBUF傳過來的數據之后,單片機上led顯示的情況和數據不一樣

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint num;

void init()
{
        REN=1;
        SM0=0;
        SM1=1;//工作方式一
        TMOD=0X20;
        TH1=0XFD;
        TL1=0XFD; //9600的波特率,
        TR1=1;
        EA=1;
        ES=1;
}

void main()
{
        init();

        while(1)
        {
                P2=num;            //led燈顯示
        }
}

void time() interrupt 4
{        
        num=SBUF;
        RI=0;                   //進入中斷就說么已經接收到數據了        
        SBUF=num;  //發送數據
        while(!TI);
        TI=0;

}

回復

使用道具 舉報

ID:235200 發表于 2020-3-3 19:20 | 顯示全部樓層
接收的數據是什么?led燈顯示的數據是什么?接收的數據存入num,num又由P2口輸出,這一過程絕對是接收的數據與P2口輸出的數據一致,在P2=num;這一條語句加上一個條件試試,只有當接收到數據就送一次數據到P2口,不要無限次送數據到P2口
回復

使用道具 舉報

ID:213173 發表于 2020-3-3 21:44 | 顯示全部樓層
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num;

void init()
{
        REN=1;
        SM0=0;
        SM1=1;//工作方式一
        TMOD=0X20;
        TH1=0XFD;
        TL1=0XFD; //9600的波特率,
        TR1=1;
        EA=1;
        ES=1;
}

void main()
{
        init();
        while(1)
        {
             
        }
}

void time() interrupt 4
{        
        num=SBUF;
        RI=0;                   //進入中斷就說么已經接收到數據了        
        SBUF=num;  //發送數據
        while(!TI);
        TI=0;
        P2=num;            //led燈顯示 0x00~0xff
}
回復

使用道具 舉報

ID:672615 發表于 2020-3-4 14:38 | 顯示全部樓層
csmyldl 發表于 2020-3-3 19:20
接收的數據是什么?led燈顯示的數據是什么?接收的數據存入num,num又由P2口輸出,這一過程絕對是接收的數據與P ...

我電腦輸入一個00的話,我希望SBUF接收到,傳給num,讓led=0x00
回復

使用道具 舉報

ID:672615 發表于 2020-3-4 14:40 | 顯示全部樓層
wulin 發表于 2020-3-3 21:44
#include
#define uchar unsigned char
#define uint unsigned int

試了,不行不管我發送什么數據,LED接受數據之后,只會亮那幾個燈,不會變化
回復

使用道具 舉報

ID:687694 發表于 2020-3-4 16:21 | 顯示全部樓層
在C語言中,數據類型是很嚴格。你定義num為整型int 為雙字節。串口發送,接收數據一般只有8字節,P端口賦值為8字節。這可以編譯通過,但并不能讓你滿意,期間編譯器進行了數據類型自動轉換。這個實驗我也做過,在串口發送十六進制 00 估計能達到你的目的。
回復

使用道具 舉報

ID:496117 發表于 2020-3-4 18:51 | 顯示全部樓層
我前幾天剛好遇到過類似的問題,是沒有使用寄存器禁止優化的聲明導致的,uint num;改為volatile uint num;
回復

使用道具 舉報

ID:213173 發表于 2020-3-4 19:08 | 顯示全部樓層
撒打算(⊙o⊙)哦 發表于 2020-3-4 14:40
試了,不行不管我發送什么數據,LED接受數據之后,只會亮那幾個燈,不會變化

如果返回的數據是正確的就不是串口問題,檢查P2外圍電路。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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