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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC12C單片機 雙串口通訊9600波特率完整實現程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:1063483 發表于 2023-2-19 15:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*-----------------------------------------------
  名稱:STC12C5A60S2雙串口通信(已經成功測試)
  編寫:WatsonBu
  日期:2022.01
  修改:無
  內容:9600波特率 雙串口收發
        接線:串口1 發送P3.1,接收P3.0
              串口2 發送P1.3,接收P1.2
------------------------------------------------*/

#include "stc12c5a60s2.h"
#include <stdio.h>
#include <stdarg.h>      
#include <intrins.h>
#include <string.h>
#define uint      unsigned int
#define uchar     unsigned char
#define S2RI 0x01   //串口2接收中斷中斷請求標志位
#define S2TI 0x02   //串口2發送中斷請求標志位
unsigned char flag1,flag2,temp2;
unsigned char uart2Receive[100];
unsigned char uart1Receive[100];
unsigned int point1=0,point2=0;
unsigned char i;
uchar RecDate[9]={0};  //串口接收 數據
uchar recnum2=0;       //串口接收長度
bit recfinish=0;       //串口接收完成
uchar flag=0;
sbit TEST_OK = P0^1;
sbit TEST_NG = P2^2;
sbit V5_off = P2^3;
/*------------------------------------------------
                   函數聲明
------------------------------------------------*/
void UART_1SendOneByte(unsigned char c);
void UART_2SendOneByte(unsigned char c);
void uart1SendStr(unsigned char *s);
void uart2SendStr(unsigned char *s);

void send_char_com(uchar ch)  //串口發送字節
        {
            SBUF=ch;
            while(TI==0);
            TI=0;
        }
/*------------------------------------------------
                    雙串口初始化
------------------------------------------------*/
void InitUART  (void)
{

    SCON  = 0x50;               // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝
    TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz  
    TR1   = 1;                  // TR1:  timer 1 打開                    
    EA   = 1;                   //打開總中斷
    ES    = 1;                  //打開串口中斷

    S2CON = 0x50;     
    BRT = 0xFD;                 
    AUXR = 0x10;   
    IE2 =0x01;      
}                           
void DelayMs(uint n)
{
        uchar i=112;

        while(n--)
                while(i--);
}
/*------------------------------------------------
                    主函數
------------------------------------------------*/
void main (void)
{

        InitUART();
        DelayMs(10);
        uart1SendStr("COMTOPC");//用于發送給上位機
              DelayMs(10);
              uart2SendStr(">>GetVal");//去讀取電流測試數據,“GetVal”  是電流測試板的請求協議。
              DelayMs(10);
  while(1)  
    {  
        if(flag1==1)  
     {
                                        flag1=0;
                                       
                                        {
                                        for(i=0;i<9;i++)
                                        send_char_com(RecDate[i]);
                                        recnum2=0;// 接收數據長度清零
                                        DelayMs(100);
                                        }
                                       
         {
                                        uchar i=0;
                                        uchar temp[9]={0};
                                        sprintf((char*)temp,"%8s",RecDate);
                                                      
                                if(strcmp(temp,">>TDTEST") == 0)//這是自己任意設定的約定字  "TDTEST",以下照此
                                         {
                                                 V5_off=0;
                                                 DelayMs(100);                              
                                         }
                                        else if(strcmp(temp,">>TDT=OK") == 0)
                                         {
                                                 TEST_NG=1;
                                                 DelayMs(10);
                                                 TEST_OK=0;
                                                 DelayMs(100);                              
                                         }
                                        else if(strcmp(temp,">>TDT=NG") == 0)
                                         {
                                                 TEST_OK=1;
                                                 DelayMs(10);
                                                 TEST_NG=0;
                                                 DelayMs(100);                              
                                         }
                                else
                                        {
                                          uart2SendStr(">>GetVal");
                                                DelayMs(5);
                                        }         

                                }
                                 
                                 {
                                         for(i=0;i<9;i++)   
                                         RecDate[i]=0;
                                 }

     }  
        //如果串口2接收到數據,將此數據由串口1發送
        if(flag2==1)  
        {  
            flag2=0;  
            UART_1SendOneByte(temp2);  
        }
    }  
}
/*------------------------------------------------
                    1發送字符串
------------------------------------------------*/
void uart1SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串結束標志,
                //通過檢測是否字符串末尾
  {
  UART_1SendOneByte(*s);
  s++;
  }
}
/*------------------------------------------------
                    2發送字符串
------------------------------------------------*/
void uart2SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串結束標志,
                //通過檢測是否字符串末尾
  {
  UART_2SendOneByte(*s);
  s++;
  }
}
void UART_1SendOneByte(unsigned char c)  
{  
    SBUF = c;  
    while(!TI);    //若TI=0,在此等待   
    TI = 0;   
}
/****************串口2發送一個字符****************/  
void UART_2SendOneByte(unsigned char c)  
{  
    S2BUF = c;  
    while(!(S2CON&S2TI));  //若S2TI=0,在此等待
    S2CON&=~S2TI;     //S2TI=0  
}  
/************串行口1中斷處理函數*************/  
void UART_1Interrupt(void) interrupt 4  
{  
    if(RI==1)  
    {  
      RI=0;                   //標志位清零
      flag1=1;                       
      if(recnum2<9)
            {
             RecDate[recnum2]=SBUF;
             recnum2++;
            }
                }                       
}  
/************串行口2中斷處理函數*************/  
void UART_2Interrupt(void) interrupt 8  
{  
    if(S2CON&S2RI)  
    {  
        S2CON&=~S2RI;  
        flag2=1;  
        temp2=S2BUF;  
    }   
}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九热视频这里只有精品 | 国产精品久久久久久影视 | 亚洲一区日韩 | 免费观看的av毛片的网站 | 中文字幕在线网 | 久久免费高清视频 | 亚洲最大的成人网 | 精品二区| 欧美日韩亚洲系列 | 久久久久国产 | 一区二区三区四区在线视频 | 日韩高清中文字幕 | 日韩aⅴ片 | 色婷婷国产精品综合在线观看 | 欧美精品在线视频 | 在线观看日韩 | 日韩一区二区三区在线视频 | 久久久久久久久国产精品 | 精久久 | 久久久91| 亚洲最大成人综合 | 岛国视频| 99成人 | 四虎av电影| 色综合网站 | 91一区| 伊人久久麻豆 | 亚洲一区二区精品 | 337p日韩| 久久亚洲一区二区 | 天堂久久天堂综合色 | 性做久久久久久免费观看欧美 | 人操人免费视频 | 色精品| 一级欧美视频 | 亚洲天堂成人在线视频 | 亚洲视频一区二区三区 | 欧美久久久久久久久中文字幕 | 免费看一级毛片 | 亚洲欧美日韩精品久久亚洲区 | 中文字幕视频在线 |