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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc12c5a單片機串口通信問題

[復制鏈接]
回帖獎勵 80 黑幣 回復本帖可獲得 20 黑幣獎勵! 每人限 3 次(中獎概率 80%)
跳轉到指定樓層
樓主
ID:505833 發表于 2020-5-26 09:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
該項目是基于stc12c5a 與tfmini通信以及bh1750通信。是在tfmini例程上改寫,寫得我有點懵了。之前好像還可以用串口2接受到tfmini傳來的數據。現在不行了,不知道怎么回事,求助大佬們,拜托!若需要完整程序測試也可以私我,感謝!!

#include <stdio.h>
#include "stc12c5a60s2.h"        //the file come from stc-sip V6.86
#include <BH1750.c>
#define FOSC 11059200L        //System frequency
unsigned char Sensor_Data[5]={0x00,0x00,0x00,0x00,0x00};

        
typedef struct {
        int distance;
        int strength;
        char receiveComplete;
}TFmini;

TFmini tfmini = {0, 0, 0};

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

to get the light value from bh1750.c
*******************************************************************************/
void conversion(uint temp_data)  //  êy?Y×a??3? ??£?ê?£?°ù£??§£?íò
{  
    Sensor_Data[0]=temp_data/10000+0x30 ;
    temp_data=temp_data%10000;   //è?óà????
          Sensor_Data[1]=temp_data/1000+0x30 ;
    temp_data=temp_data%1000;    //è?óà????
    Sensor_Data[2]=temp_data/100+0x30   ;
    temp_data=temp_data%100;     //è?óà????
    Sensor_Data[3]=temp_data/10+0x30    ;
    temp_data=temp_data%10;      //è?óà????
    Sensor_Data[4]=temp_data+0x30;         
}   

/******************************************************************************
TFmini 9 bytes output:
[0x59, 0x59, distanceL, distanceH, strengthL, strengthH, Mode, 0x00, checksum]
*****************************************************************************/
void getTFminiData(TFmini *tfmini) {
        static unsigned char i = 0 ;
        unsigned char j = 0;
        unsigned int b=0;
        unsigned int checksum = 0;
        static unsigned char rx[9];
        
        if(S2CON & 0x01) {        //uart2 receive interrupt flag
                S2CON &= ~(0x01);        //clear uart2 receive interrupt flag
                rx[ i] = S2BUF;        //uart2 buf
                if(rx[0] != 0x59) {
                        i = 0;
                } else if(i == 1 && rx[1] != 0x59) {
                        i = 0;
                } else if(i == 8) {
                        tfmini->receiveComplete = 1;
                        //printf("\r\n");
                        for(j = 0; j < 8; j++) {
                                checksum += rx[j];
                        }
                        if(rx[8] == (checksum % 256)) {
                                tfmini->distance = rx[2] + rx[3] * 256;
                                tfmini->strength = rx[4] + rx[5] * 256;
                                tfmini->receiveComplete = 1;
                        }
                        i = 0;
                } else {
                        i++;
                }
        }
}

/******************************************************************************
Timer2 as baudtare generator.
When FOSC = 11059200L, baudrate <= 345600(11059200/32)
*****************************************************************************/
void Uart_Init(unsigned long baudrate1, unsigned long baudrate2) {
        
        //Uart1 Init. Uart1 can select Timer1 or BRT as baudrate generator
        SCON = 0x50;            //8-bit variable UART
        //AUXR |= 0x01;                        //selectBRT as baudrate generator
        AUXR |= 0x40;                        //Set Timer1 1T Mode
        TMOD |= 0x20;                   //Set Timer1 as 8-bit auto reload mode
        TH1 = TL1 = -(FOSC/32/baudrate1); //Set auto-reload vaule
        TR1 = 1;                //Timer1 start run
        //ES = 1;
        
        //Uart2 Init. Uart2 can only select BRT as baudrate generator
        //AUXR &=0XF7;
        S2CON = 0x50;           //8-bit variable UART
        BRT = -(FOSC/32/baudrate2);  //Set auto-reload vaule of baudrate generator
        AUXR |= 0x14;            //Baudrate generator work in 1T mode
        IE2 = 0x01;             //Enable UART2 interrupt
               
        EA = 1;
        
        SBUF = '\n';        //It's needed to give SBUF a random character if printf is used.
}
/*------------------------------------------------
                   usart1·¢?íò???×??ú
------------------------------------------------*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
      TI = 0;
}
/*------------------------------------------------
                    ·¢?íò???×?·?′?
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 ±íê?×?·?′??áê?±ê??£?             //í¨1y?ì2aê?·?×?·?′????2
  {
  if(*s=='*')
  SendByte(0x22);
  else
  SendByte(*s);
  s++;
  }

}



void main() {
  unsigned int b;
        Uart_Init(9600, 115200);
        
        Init_BH1750();//initialize the bh1750
        
        printf("Hello, TFmini!\r\n");
        
        b=getlx();//set b the result of bh1750
        conversion(b);//get the light value store in Sensor_data
        
        while(1) {
  if(tfmini.receiveComplete == 1) {
  tfmini.receiveComplete = 0;
  printf("(%d, %d)\r\n", tfmini.distance, tfmini.strength);   
  SendStr(Sensor_Data);
  }
        }
        }

/*void Uart() interrupt 4 using 1 {        
        
}*/

void Uart2() interrupt 8 using 1 {
        getTFminiData(&tfmini);

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产91久久精品一区二区 | 一区二区三区在线免费观看 | 在线视频99 | 久久com| 91精品久久久久久久久99蜜臂 | 亚洲天堂成人在线视频 | 成人黄色电影在线播放 | 国产欧美一区二区精品久导航 | 欧美aⅴ片| 中文字幕 在线观看 | 国内精品久久久久久久影视简单 | 久久久久久国产 | 精品91av| 亚洲人成人一区二区在线观看 | 亚洲精品黄色 | 黄片毛片免费观看 | 色频 | 91久久久www播放日本观看 | 欧洲一区二区三区 | 成人国产免费观看 | 亚洲国产一区二区在线 | 国产成人精品一区二区三区 | 国产日韩欧美在线一区 | 国内久久精品 | 久久合久久| 国产亚洲一区二区三区在线观看 | 久久精品亚洲国产奇米99 | 亚洲午夜网 | 秋霞av国产精品一区 | 国产高清久久久 | 国产99久久精品一区二区永久免费 | 亚洲一区二区三区国产 | 国产偷录叫床高潮录音 | 久久久久久免费免费 | 福利片一区二区 | 看黄在线 | 久久精品一区二 | 欧美亚洲国产一区二区三区 | 国产精品69久久久久水密桃 | 日本免费一区二区三区四区 | 韩国电影久久 |