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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

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

查看數: 3009 | 評論數: 7 | 收藏 2
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2020-2-20 20:07

正文摘要:

串口設置通信,輸入數字為什么燈就是不亮,是程序哪里有問題還是串口助手設置錯了  串口中斷中能使用while(TI==0)  替代while(!TI)   還有人說不能在串口中斷中使用while循環  & ...

回復

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

問題找出來了   買板子的時候商家說晶振是12MHZ的   但板子晶振是11.0592  波特率一直不對
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;
}
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
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;每次取一下反
ID:687423 發表于 2020-2-21 09:22
樓主的程序沒有問題,我在開發板上試了一下,我的led可以亮,應該是樓主的led出了問題。
ID:94031 發表于 2020-2-20 22:07
根據串口助手截圖看來你的串口通信問題不大,燈不亮要用萬用表查led相關電路是否沒接對,或者不通。
ID:213173 發表于 2020-2-20 20:07
從程序看沒有嚴重問題。分支判斷使用了字符數字0~7 case '0':led0=0;break;,串口助手要用文本模式發送數字0~7,接收端才能正確解析信息,如果用HEX模式發送數字就要去掉分支語句中的單引號。

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

Powered by 單片機教程網

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