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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc8單片機串口2和傳感器收發指令,讓串口2收到的數據在串口助手顯示

[復制鏈接]
跳轉到指定樓層
樓主
希望大佬幫我看看哪里的問題,232通信協議,波特率都一樣,串口2和傳感器通信的協議如圖,實在寫不出來,沒基礎都自學的,拜托了

/**************************************************************************************

接線說明:         1:STC8A單片機-->USB轉TTL&電源模塊
                    P10-->UTXD       
                           P11-->URXD
                  
                  
注意事項: USB連接線給開發板通電下載程序,STC下載軟件中內部IRC時鐘選擇11.0592MHZ                                                                                                                                                                  
***************************************************************************************/


#include "STC8.H"
#include "intrins.h"


#define MAIN_Fosc                11059200L        //定義主時鐘
#define  uint32   unsigned long
#define  uint16   unsigned int  
#define  uint8    unsigned char
#define  uchar    unsigned char  



/*************        本地變量聲明        **************/
#define  TRUE    1
#define  FALSE   0

#define Buf_Max 50
#define S2_S 0x01       
#define S2RI 0x01
#define S2TI 0x02

volatile uint8 Flag=FALSE;

uint8 xdata Rec_Buf[Buf_Max];
uint8 i = 0;
                 


bit busy;

uchar table2[3]={0x04,0x04,0x04};          //串口2循環發送指令
uchar rec2[14];                         //接收數組
uchar rec1[14];



/**************************************
功能描述:延時函數
入口參數:uint16 x ,該值為1時,延時1ms
返回值:無
***************************************/
void delay_ms(uint16 x)
{  
        uint16 j,i;   
        for(j=0;j<x;j++)   
        {   
                for(i=0;i<1100;i++);   
        }  
}



/***************************************************************************
* 描  述 : 串口2初始化函數
* 入  參 : 無
* 返回值 : 無
備注:波特率9600bps   晶振11.0592MHz
**************************************************************************/
void Uart2_Init(void)
{       
        S2CON = 0x50;                //8位數據,可變波特率,啟動串行接收器       
        AUXR |= 0x04;                //定時器2時鐘為Fosc,即1T
        T2L = 0xE0;                    //設定定時初值
        T2H = 0xFE;         //設定定時初值
        AUXR |= 0x10;       //啟動定時器2
        IE2 |= 0x01;        // 串口2中斷打開
        EA = 1;             // 總中斷打開
}




/***************************************************************************
* 描  述 : 串口1初始化函數
* 入  參 : 無
* 返回值 : 無
備注:波特率9600bps   晶振11.0592MHz
**************************************************************************/
void Uart1_Init(void)
{               
        PCON &= 0x3f;                //波特率不倍速,串行口工作方式由SM0、SM1決定
        SCON = 0x50;                //8位數據,可變波特率,啟動串行接收器
        AUXR |= 0x40;                //定時器1時鐘為Fosc,即1T
        AUXR &= 0xfe;                //串口1選擇定時器1為波特率發生器
        TMOD &= 0x0f;                //清除定時器1模式位
        TMOD |= 0x20;                //設定定時器1為8位自動重裝方式
        TL1 = 0xDC;                    //設定定時初值
        TH1 = 0xDC;                    //設定定時器重裝值
        ET1 = 0;                    //禁止定時器1中斷
        TR1 = 1;                    //啟動定時器1
        ES = 1;             // 串口1中斷打開
        EA = 1;             // 總中斷打開
}


/***************************************************************************
* 描  述 : 串口2發送數據函數
* 入  參 : uint8 數據
* 返回值 : 無
**************************************************************************/
void SendDataByUart2()
{
    S2BUF =table2[3] ;            //寫數據到UART數據寄存器
        while(!(S2CON&S2TI));        //在停止位沒有發送時,S2TI為0即一直等待
    S2CON&=~S2TI;                //清除S2CON寄存器對應S2TI位(該位必須軟件清零)
}

/**************************************************************************************
* 描  述 : USART2接收到數據后串口發送出去
* 入  參 : 無
* 返回值 : 無
**************************************************************************************/
void USART2_Tx_Puts(void)
{
          if(Flag)      //有新數據通過串口被接收到
        {
                IE2 &= 0xFE;                                              // 串口2中斷關閉       
            rec1[14]=rec2[14];                       
                IE2 |= 0x01;                           // 串口2中斷打開                                                                                                       
                Flag=FALSE;                            //清除接收標識符
          }
}

/***************************************************************************
* 描  述 : 串口1發送數據函數
* 入  參 : uint8 數據
* 返回值 : 無
**************************************************************************/
void SendDataByUart1(void)
{
    rec1[14]=S2BUF ;                 //寫數據到UART數據寄存器
        while(TI == 0);             //在停止位沒有發送時,TI為0即一直等待
        TI = 0;                     //清除TI位(該位必須軟件清零)
}


/**************************************************************************************
* 描  述 : USART1接收到數據后串口發送出去
* 入  參 : 無
* 返回值 : 無
**************************************************************************************/
void USART1_Tx_Puts(void)
{
          if(Flag)                //有新數據通過串口被接收到
        {       
                ES = 0;                                             //串口1中斷關閉                  
            SendDataByUart1();                 //發送字符                                                
                ES = 1;                                  //串口1中斷打開                       
                Flag=FALSE;                       //清除接收標識符
          }
}


/***************************************************************************
* 描  述 : 串口2中斷服務函數
* 入  參 : 無
* 返回值 : 無
**************************************************************************/
void Uart2() interrupt 8 using 1
{
        IE2 &= 0xFE;                                        // 串口2中斷關閉
        Flag=TRUE;                       //接收到數據,接收標識符有效
        if (S2CON & S2RI)                //串行接收到停止位的中間時刻時,該位置1
          {
              S2CON &= ~S2RI;              //清除S2CON寄存器對應S2RI位(該位必須軟件清零)
                rec2[14] = S2BUF;      
           }
          if (S2CON & S2TI)                //在停止位開始發送時,該位置1
           {
              S2CON &= ~S2TI;                                //清除S2CON寄存器對應S2TI位(該位必須軟件清零)
           }
        IE2 |= 0x01;                    // 串口2中斷打開       
}


/***********************
功能描述:主函數
入口參數:無
返回值:無
************************/
int main()
{
          P1M1 &= 0xFE;        P1M0 &= 0xFE;                          //設置P1.0為準雙向口
        P1M1 &= 0xFD;        P1M0 |= 0x02;                          //設置P1.1為推挽輸出
        P3M1 &= 0xFE;        P3M0 &= 0xFE;                          //設置P3.0為準雙向口
        P3M1 &= 0xFD;        P3M0 |= 0x02;                          //設置P3.1為推挽輸出

        Uart2_Init();
        Uart1_Init();

        while(1);
       
}



///***************************************************************************
// * 描  述 : 串口1中斷服務函數
// * 入  參 : 無
// * 返回值 : 無
// **************************************************************************/
//void Uart1() interrupt 4 using 1
//{
//        ES = 0;                            // 串口1中斷關閉
//        Flag=TRUE;                  //接收到數據,接收標識符有效
//        if (RI)                     //串行接收到停止位的中間時刻時,該位置1
//          {
//              RI = 0;                 //清除RI位 (該位必須軟件清零)
//    SBUF=S2BUF;      
//           }
//           if (TI)                    //在停止位開始發送時,該位置1
//           {
//              TI = 0;                 //清除TI位(該位必須軟件清零)
//           }
//        ES =  1;                   // 串口1中斷打開
//}


1574921904.png (150.68 KB, 下載次數: 46)

1574921904.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:600627 發表于 2021-7-30 18:51 | 只看該作者
兄弟,你這個調通了沒有,我也搞一天了,串口2 就是不能發送數據
回復

使用道具 舉報

板凳
ID:94031 發表于 2021-7-30 20:40 | 只看該作者
要和外部設備通信,stc單片機最好用外部晶振,內部IRC時鐘波特率不準,無法正常通信。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 电影91久久久 | 国产精品视频一区二区三 | 欧美亚洲另类在线 | 成人欧美一区二区三区在线观看 | 美女黄网 | 欧美高清免费 | www.亚洲免费 | av手机免费在线观看 | 国产精品一区二区福利视频 | 国产精品毛片一区二区三区 | 久久成人在线视频 | 中文字幕精品视频 | 国产免费又黄又爽又刺激蜜月al | 国产japanhdxxxx麻豆 | 国产精品99久久久久久动医院 | 羞羞视频网站 | 亚洲欧美一区二区三区情侣bbw | 影音先锋成人资源 | 国产精品久久久亚洲 | 97av| 国产伦精品一区二区三区高清 | 国产精品久久精品 | 二区高清| 一区二区三区免费在线观看 | 一区二区在线不卡 | 一道本不卡视频 | 一级大片网站 | 天堂色 | 波多野结衣精品在线 | 国产日韩久久 | 免费不卡一区 | 91精品国产综合久久久动漫日韩 | www.狠狠干 | 亚洲精品欧美 | av影音资源 | 91精品一区| 成年人网站免费视频 | 精品国产三级 | 国产精品久久久久久二区 | 日本人和亚洲人zjzjhd | 精品久久香蕉国产线看观看亚洲 |