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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2803|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

哪里出錯接收到都是亂碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:242160 發(fā)表于 2018-1-2 09:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
波特率好像應(yīng)該設(shè)置成38400的,怎么算?

#include "reg52.h"                         #include<intrins.h>                typedef unsigned int u16;         typedef unsigned char u8;sbit beep=P1^5;         sbit a=P2^0 ;        sbit LSA=P2^2;        sbit LSB=P2^3;sbit LSC=P2^4;//串口發(fā)送用到的變量u8 transmit[4];u8 count_fs=0;u8 code smgduan[10]={        0x3f,   //0        0x06,          //1        0x5b,        //2        0x4f,        //3        0x66,        //4        0x6d,          //5        0x7d,        //6        0x07,        //7        0x7f,        //8        0x6f,        //9} ;void delay(u16 i){        while(i--);                  //延時函數(shù),i=1時,大約延時10us} //串口初始化程序void UART_Init(){        TMOD=TMOD&0x0f|0x20; //設(shè)置定時器1,工作方式2        TH1=0XFd; //定時器1賦初值,0xf3代表串口波特率是2400        TL1=0XFd;        SM0=0;        //設(shè)定串口工作方式1        SM1=1;        REN=1; //允許串口接收        ES=1; //開串口中斷        EA=1; //開總中斷        TR1=1; //啟動定時器1}void main(){           u16 L0=0,L1=0,L2=0,L3=0,d,n=0,w=0;        UART_Init();        TMOD|=0X01;                //  01定時  04計數(shù)  選擇為定時器0模式,工作方式1,僅用TR0打開啟動。        TH0=0X3C;                //給定時器賦初值,定時1ms            TL0=0XB0;                                                                     TR0=1;                        //打開定時器         if(w==0)         {        if(a==1)                {                        delay(100);                if(a==1)                {               L0++;                 while(1)       {           if(L0==10)                {                        L0=0;                        L1++;                }                if(L1==10)                                                                          {                        L1=0;                        L2++;                }                if(L2==10)                {                        L2=0;                        L3++;                }                if(L3==10)                {                    L3=0;                        L0=0;L1=0;L2=0;                }                for(d=0;d<4;d++)                {                        switch(d)                                 {                                case(0):                                        LSA=0;LSB=0;LSC=0;P0=smgduan[L0]; break;//顯示第0位                                case(1):                                        LSA=1;LSB=0;LSC=0;P0=smgduan[L1]; break;//顯示第1位                                case(2):                                        LSA=0;LSB=1;LSC=0;P0=smgduan[L2]; break;//顯示第2位                                case(3):                                        LSA=1;LSB=1;LSC=0;P0=smgduan[L3]; break;//顯示第3位                        }                        delay(100);                         P0=0x00;           //消隱                }                                 //以下程序是將下位機的震動的次數(shù)通過串口傳給藍牙                //在這里,通訊協(xié)議為: L3 L2 L1 L0 一共4個字節(jié)                transmit[0]=L3;                transmit[1]=L2;                transmit[2]=L1;                transmit[3]=L0;                count_fs=0;                SBUF=transmit[count_fs];//在這里發(fā)送數(shù)組的第一個字節(jié)給串口                count_fs++;                if(a==1)                delay(1000);                if(a==1)                                                                                       L0++;                                if(TF0==1)        {            TF0=0;                        TH0=0X3C;              //重置定時常數(shù)                TL0=0XB0;                n++;                if(n>200)                {                  n=0;                  w=1;                }                if(w==1)                a=0;    }                        }        }                        }                }                  }//串口中斷服務(wù)程序void UART_Int() interrupt 4{        if(RI==1)        {                RI=0;                }        else   //產(chǎn)生發(fā)送中斷          TI=1        {                TI=0;                if(count_fs!=4)   //利用串口中斷發(fā)送數(shù)組中的第2個字節(jié)到第6個字節(jié)給串口                {                        SBUF=transmit[count_fs];                        count_fs++;                }        }}                               


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:269447 發(fā)表于 2018-1-2 15:16 | 只看該作者
你這程序格式能不能整理下,光看程序都能把人看暈
回復(fù)

使用道具 舉報

板凳
ID:242160 發(fā)表于 2018-1-3 08:11 | 只看該作者
xml9527 發(fā)表于 2018-1-2 15:16
你這程序格式能不能整理下,光看程序都能把人看暈

哦!大意了
回復(fù)

使用道具 舉報

地板
ID:242160 發(fā)表于 2018-1-3 08:12 | 只看該作者
原程序:
#include "reg52.h"                         
#include<intrins.h>               

typedef unsigned int u16;         
typedef unsigned char u8;

sbit beep=P1^5;         
sbit a=P2^0 ;       
sbit LSA=P2^2;       
sbit LSB=P2^3;
sbit LSC=P2^4;

//串口發(fā)送用到的變量
u8 transmit[4];
u8 count_fs=0;
u8 code smgduan[10]={
        0x3f,   //0
        0x06,          //1
        0x5b,        //2
        0x4f,        //3
        0x66,        //4
        0x6d,          //5
        0x7d,        //6
        0x07,        //7
        0x7f,        //8
        0x6f,        //9
} ;

void delay(u16 i)
{
        while(i--);                  //延時函數(shù),i=1時,大約延時10us
}



//串口初始化程序
void UART_Init()
{
        TMOD=TMOD&0x0f|0x20; //設(shè)置定時器1,工作方式2
        TH1=0XFd; //定時器1賦初值,0xf3代表串口波特率是2400
        TL1=0XFd;

        SM0=0;        //設(shè)定串口工作方式1
        SM1=1;
        REN=1; //允許串口接收

        ES=1; //開串口中斷
        EA=1; //開總中斷

        TR1=1; //啟動定時器1
}
void main()
{       
   u16 L0=0,L1=0,L2=0,L3=0,d,n=0,w=0;
        UART_Init();
        TMOD|=0X01;                //  01定時  04計數(shù)  選擇為定時器0模式,工作方式1,僅用TR0打開啟動。

        TH0=0X3C;                //給定時器賦初值,定時1ms   
        TL0=0XB0;                                                    
       
        TR0=1;                        //打開定時器

         if(w==0)
        {        if(a==1)
                {       
                delay(100);
                if(a==1)
                {
              L0++;
                 while(1)
       {
           if(L0==10)
                {
                        L0=0;
                        L1++;
                }
                if(L1==10)                                                          
                {
                        L1=0;
                        L2++;
                }
                if(L2==10)
                {
                        L2=0;
                        L3++;
                }
                if(L3==10)
                {
                    L3=0;
                        L0=0;L1=0;L2=0;
                }


                for(d=0;d<4;d++)
                {
                        switch(d)         
                        {
                                case(0):
                                        LSA=0;LSB=0;LSC=0;P0=smgduan[L0]; break;//顯示第0位
                                case(1):
                                        LSA=1;LSB=0;LSC=0;P0=smgduan[L1]; break;//顯示第1位
                                case(2):
                                        LSA=0;LSB=1;LSC=0;P0=smgduan[L2]; break;//顯示第2位
                                case(3):
                                        LSA=1;LSB=1;LSC=0;P0=smgduan[L3]; break;//顯示第3位
                        }
                        delay(100);
                        P0=0x00;           //消隱
                }
                       
         //以下程序是將下位機的震動的次數(shù)通過串口傳給藍牙
                //在這里,通訊協(xié)議為: L3 L2 L1 L0 一共4個字節(jié)
                transmit[0]=L3;
                transmit[1]=L2;
                transmit[2]=L1;
                transmit[3]=L0;
                count_fs=0;
                SBUF=transmit[count_fs];//在這里發(fā)送數(shù)組的第一個字節(jié)給串口
                count_fs++;

                if(a==1)
                delay(1000);
                if(a==1)                                                                       
                L0++;
       
       
                if(TF0==1)
        {
            TF0=0;       
                TH0=0X3C;              //重置定時常數(shù)
                TL0=0XB0;
                n++;
                if(n>200)
                {
                  n=0;
                  w=1;
                }
                if(w==1)
                a=0;
    }
               
        }
        }               
        }
                }  
                }
//串口中斷服務(wù)程序
void UART_Int() interrupt 4
{
        if(RI==1)
        {
                RI=0;
       
        }
        else   //產(chǎn)生發(fā)送中斷          TI=1
        {
                TI=0;
                if(count_fs!=4)   //利用串口中斷發(fā)送數(shù)組中的第2個字節(jié)到第6個字節(jié)給串口
                {
                        SBUF=transmit[count_fs];
                        count_fs++;
                }
        }
}                       
       
回復(fù)

使用道具 舉報

5#
ID:242160 發(fā)表于 2018-1-3 10:52 | 只看該作者
為什么只能接收一個字節(jié)
回復(fù)

使用道具 舉報

6#
ID:213173 發(fā)表于 2018-1-4 06:50 | 只看該作者
szxyp 發(fā)表于 2018-1-3 10:52
為什么只能接收一個字節(jié)

串口中斷接收數(shù)據(jù)串示例
void UARTInterrupt() interrupt 4
{
        static uchar num=0;        //靜態(tài)計數(shù)變量
        RI=0;                                //接收中斷請求標(biāo)志位清0
        rec_buf[num]=SBUF;        //接收到的數(shù)據(jù)串保存在緩存數(shù)組
        if(rec_buf[0]==0xAA)        //驗證數(shù)據(jù)頭(起始位)
        {
                num++;
                if(num>=7)                        //數(shù)據(jù)串幀數(shù)
                {
                        flag=1;                        //接收完成標(biāo)志置1
                        num=0;                        //計數(shù)變量清0
                }
        }
}
回復(fù)

使用道具 舉報

7#
ID:242160 發(fā)表于 2018-1-4 09:53 | 只看該作者
wulin 發(fā)表于 2018-1-4 06:50
串口中斷接收數(shù)據(jù)串示例
void UARTInterrupt() interrupt 4
{

不行啊
回復(fù)

使用道具 舉報

8#
ID:213173 發(fā)表于 2018-1-4 11:22 | 只看該作者

這中斷程序單獨使用當(dāng)然不行,需要有配套程序,這里只是提示一下思路。你的程序構(gòu)架有問題, main函數(shù)里亂哄哄,別人也不容易看明白。你需要把各個功能單獨寫一個函數(shù), main函數(shù)里只是調(diào)用這些功能函數(shù)。調(diào)試時出現(xiàn)問題也好查。修改時也不容易影響其它功能。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表