久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2779|回復: 7
打印 上一主題 下一主題
收起左側

51單片機串口通信問題,求解答

[復制鏈接]
跳轉到指定樓層
樓主
5黑幣
串口設置通信,輸入數字為什么燈就是不亮,是程序哪里有問題還是串口助手設置錯了  串口中斷中能使用while(TI==0)  替代while(!TI)   還有人說不能在串口中斷中使用while循環     我快被弄瘋了
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar i;
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;
sbit led6=P2^6;
sbit led7=P2^7;
void uart_init() //串口初始化函數
{
        TMOD=0x20;         //設置計數器工作方式2
        TH1=0xF3;         //計數器初始值設置,注意波特率是4800
        TL1=0xF3;
        PCON=0x80;         //波特率加倍
        TR1=1;                 //打開計數器
        SCON=0x50;         //設置為工作方式1
        ES=1;                 //打開接收中斷
        EA=1;                 //打開總中斷
}
void uart() interrupt 4
{
        uchar receiveData;
        i=SBUF;                  
                switch(i)
        {
                case '0':led0=0;break;
                case '1':led1=0;break;
                case '2':led2=0;break;
                case '3':led3=0;break;
                case '4':led4=0;break;
                case '5':led5=0;break;
                case '6':led6=0;break;
                case '7':led7=0;break;
                default:P2=0XFF;break;
        }
        receiveData=SBUF;        //出去接收到的數據
        RI=0;                            //清除接收中斷標志位
        SBUF=receiveData;   //將接收到的數據放入到發送寄存器
        while(!TI);                    //等待發送數據完成
        TI=0;                            //清除發送完成標志位
}
int main()
{
          uart_init();        //串口初始化
          while(1);
                  return 0;
}


串口.png (91.55 KB, 下載次數: 72)

串口.png

最佳答案

查看完整內容

從程序看沒有嚴重問題。分支判斷使用了字符數字0~7 case '0':led0=0;break;,串口助手要用文本模式發送數字0~7,接收端才能正確解析信息,如果用HEX模式發送數字就要去掉分支語句中的單引號。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2020-2-20 20:07 | 只看該作者
從程序看沒有嚴重問題。分支判斷使用了字符數字0~7 case '0':led0=0;break;,串口助手要用文本模式發送數字0~7,接收端才能正確解析信息,如果用HEX模式發送數字就要去掉分支語句中的單引號。
回復

使用道具 舉報

板凳
ID:94031 發表于 2020-2-20 22:07 | 只看該作者
根據串口助手截圖看來你的串口通信問題不大,燈不亮要用萬用表查led相關電路是否沒接對,或者不通。
回復

使用道具 舉報

地板
ID:687423 發表于 2020-2-21 09:22 | 只看該作者
樓主的程序沒有問題,我在開發板上試了一下,我的led可以亮,應該是樓主的led出了問題。
回復

使用道具 舉報

5#
ID:696029 發表于 2020-2-21 12:24 | 只看該作者
case '0':led0=0;break;
                case '1':led1=0;break;
                case '2':led2=0;break;
                case '3':led3=0;break;
                case '4':led4=0;break;
                case '5':led5=0;break;
                case '6':led6=0;break;
                case '7':led7=0;break;
                default:P2=0XFF;break;
這個地方是不是要改成led0=~led0;每次取一下反
回復

使用道具 舉報

6#
ID:685842 發表于 2020-2-21 14:13 | 只看該作者
wulin 發表于 2020-2-21 06:07
從程序看沒有嚴重問題。分支判斷使用了字符數字0~7 case '0':led0=0;break;,串口助手要用文本模式發送數字 ...

請教一下大佬  現在能接受和發送但是一直是亂碼  這個哪里錯了嗎
晶振是12MHZ   
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar  temp=85;
sbit  LED1=P2^0;
void   Delay1ms(unsigned int  T)
{
        unsigned  int  x;
        for(;T>0;T--)
        {
                for(x=110;x>0;x--);       
        }
}
void uart_init() //串口初始化函數
{
        TMOD=0x20;         //設置計數器工作方式2
        TH1=0xF3;         //計數器初始值設置,注意波特率是4800
        TL1=0xf3;
        PCON=0x80;         //波特率加倍
        TR1=1;                 //打開計數器
        SCON=0x50;         //設置為工作方式1
        ES=1;                 //打開接收中斷
        EA=1;                 //打開總中斷
}
void  SentData(uchar temp)
{
        SBUF=temp;

        while(TI==0);
        if(TI==1)
        {
                LED1=~LED1;       
        }
        TI=0;
}
int main()
{
        uart_init();
        while(1)
        {
                SentData(temp);
                Delay1ms(250);
                Delay1ms(250);       
        }
        return 0;
}   C:\Users\Administrator\Desktop\串口發送問題.png
回復

使用道具 舉報

7#
ID:685842 發表于 2020-2-21 14:31 | 只看該作者
。。jj 發表于 2020-2-21 09:22
樓主的程序沒有問題,我在開發板上試了一下,我的led可以亮,應該是樓主的led出了問題。

燈可以亮  好像接受出現了問題    發送1的時候燈led6,led7都亮了   但返回的數據一直亂碼
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar i;
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;
sbit led6=P2^6;
sbit led7=P2^7;
void uart_init() //串口初始化函數
{
        TMOD=0x20;         //設置計數器工作方式2
        TH1=0xF3;         //計數器初始值設置,注意波特率是4800
        TL1=0xF3;
        PCON=0x80;         //波特率加倍
        TR1=1;                 //打開計數器
        SCON=0x50;         //設置為工作方式1
        ES=1;                 //打開接收中斷
        EA=1;                 //打開總中斷
}
void  uart() interrupt 4
{
        uchar receiveData;
        i=SBUF;
                  
                switch(i)
        {
                case '0':led0=0;break;
                case '1':led1=0;break;
                case '2':led2=0;break;
                case '3':led3=0;break;
                case '4':led4=0;break;
                case '5':led5=0;break;
//                case '6':led6=0;break;
//                case '7':led7=0;break;
                default:P2=0XFF;break;
        }
        receiveData=SBUF;        //出去接收到的數據
                if(RI==1)
                {
                        led6=0;
                }
        RI=0;                            //清除接收中斷標志位
        SBUF=receiveData;   //將接收到的數據放入到發送寄存器
        while(!TI);                    //等待發送數據完成
                if(TI==1)
                {
                        led7=0;
                }
        TI=0;                            //清除發送完成標志位
}
int main()
{
          uart_init();        //串口初始化
          while(1);
          return 0;
}
回復

使用道具 舉報

8#
ID:685842 發表于 2020-2-21 15:14 | 只看該作者
。。jj 發表于 2020-2-21 09:22
樓主的程序沒有問題,我在開發板上試了一下,我的led可以亮,應該是樓主的led出了問題。

問題找出來了   買板子的時候商家說晶振是12MHZ的   但板子晶振是11.0592  波特率一直不對
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品久久久久久国产越南 | 日韩激情在线 | 中文字幕av在线一二三区 | 亚洲视频精品 | 久久精品国产一区老色匹 | 欧美一级片在线观看 | 天天天操天天天干 | 欧美亚洲另类丝袜综合网动图 | 99久热 | www.亚洲精品 | 久久最新精品视频 | 日韩三区在线 | 亚洲成人免费电影 | 国产美女自拍视频 | 精品国产乱码久久久久久蜜柚 | 午夜精品一区二区三区在线观看 | 黄色一级大片视频 | 免费久久久 | 亚洲欧美激情国产综合久久久 | 久久精品国产99国产精品 | 亚洲精品在线观看网站 | 精品视频一区二区三区在线观看 | 亚洲一区电影 | 狠狠的干狠狠的操 | 美女爽到呻吟久久久久 | 精品综合网 | 超碰在线人人 | 91中文| 91伦理片| 色婷婷综合久久久中字幕精品久久 | 亚洲精品一区二区三区四区高清 | 97精品超碰一区二区三区 | 成人免费视频在线观看 | 国产亚洲一区二区三区在线观看 | 噜噜噜噜狠狠狠7777视频 | 成人中文字幕av | 99re热这里只有精品视频 | 成人国产网站 | 精品国产乱码久久久久久丨区2区 | 精品国产一区二区三区久久 | av喷水|