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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC12C5A做的一個串口通信實驗, 大神來指導(dǎo)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:237942 發(fā)表于 2018-2-23 09:27 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
******主程序
#include <string.h>
#include "Lcd12864.h"
#include "Lcd1602.h"
#include "PWM.h"
#include "config.h"
#include <ds18b20.h>
#include "ds1302.h"
#include "eeprom.h"
#include "uart.h"
#include "key.h"
#include "ad.h"
#include "Time.h"
#include "BH1750.h"
#include "PulseSensor.h"
#include "hcsr501.h"
#include "dht11.h"
extern bit Alarmflag;
bit flagstar = 0;
extern bit buzzerflag;
extern unsigned char set_temper;
extern unsigned char step;
extern struct sTime bufTime;  //日期時間緩沖區(qū)
extern bit irflag;   //紅外接收標(biāo)志,收到一幀正確數(shù)據(jù)后置1
extern unsigned char RH,RL,TH,TL;
extern unsigned char PulsePin;       // Pulse Sensor purple wire connected to analog pin 0(P1.0為傳感器輸入口)
void InitTimer0(void);
unsigned int cnt_i=0;
bit staMute = 0;  //靜音標(biāo)志位
extern unsigned char AlarmHour;  //鬧鐘時間的小時數(shù)
extern unsigned char AlarmMin;  //鬧鐘時間的分鐘數(shù)

unsigned int temper;
signed int rout; // PID Response (Output)
signed int rin; // PID Feedback (Input)
signed char counter=0;

unsigned char number=0;
unsigned char str[30];
extern unsigned char falgstep;

void InitTimer1(void)
{
    TMOD&= 0x0F;
TMOD|= 0x10;
    TH1 = 0xD4;
    TL1 = 0xCD;
    EA = 1;
    ET1 = 1;
    TR1 = 1;
}
void Sys_Init()        
{
InitTimer1();  //AD初始化
Uart2Init(0,1,220);//初始化串口,設(shè)置波特率9600
Uart1Init(0,1,220);//初始化串口,設(shè)置波特率9600
}
void main(void)            
{
EA=1;
Sys_Init();  //系統(tǒng)初始化
    while(1)
    {
  if(step==0)
  {
   UartAction();  
  }
    }
}
extern unsigned char i;
           
void InterruptTimer1() interrupt 3
{

    TH1 = 0xFC;
    TL1 = 0x66;
}
********uart.c
#include "config.h"
#include "uart.h"
#include "string.h"
#define Buf_Max 100  //緩存長度,這個長度的最大值要根據(jù)單片機型號和程序的實際情況來,我的這個100幾乎是實際情況的最大限度了
unsigned char Rec_Buf[Buf_Max];   //定義緩存數(shù)組

unsigned char Rec_BufU2[Buf_Max];   //定義緩存數(shù)組
unsigned char i=0;
unsigned char a=0; //定義緩存指針
unsigned char bufRxd[100];
unsigned char cntRxd = 0;
bit Uart1_flagFrame = 0;  //設(shè)置幀接收完成標(biāo)志
bit Uart2_flagFrame = 0;  //設(shè)置幀接收完成標(biāo)志
char Uart1Init(char smod,char brtx12,unsigned char reload)
{
SCON =  0X50;//8位可變波特率,無奇偶位(SM0=0,SM1=1),使能串口接收模塊(REN=1)
BRT = reload;//設(shè)置獨立波特率發(fā)生器波特率
if(smod == 1)
{
  PCON |= SMOD;   //SMOD = 1;//波特率倍速位
}
else if(smod == 0)
{
  PCON &= (~SMOD);   //SMOD = 0;//取消波特率倍速位
}
else
{
  return -1;
}
  
if(brtx12 == 1)
{
  AUXR |= BRTx12;//BRTx12 = 1;1T模式
}
else if(brtx12 == 0)
{
  AUXR &= (~BRTx12);//BRTx12 = 0;12T模式  
}
else
{
  return -2;
}

   AUXR |= S1BRS;//串口1設(shè)置為使用獨立波特率發(fā)生器         
AUXR |= BRTR;//開啟波特率發(fā)生器         
           
ES = 1;    //開串口中斷
EA = 1;    //開總中斷
return 0;
}
char Uart2Init(char s2smod,char brtx12,unsigned char reload)
{
S2CON = 0X50;//8位可變波特率,無奇偶位
BRT = reload;//設(shè)置獨立波特率發(fā)生器波特率
if(s2smod == 1)
{
  AUXR |= S2SMOD;   //S2SMOD = 1;//波特率倍速位
}
else if(s2smod == 0)
{
  AUXR &= (~S2SMOD);   //S2SMOD = 0;//取消波特率倍速位
}
else
{
  return -1;
}
  
if(brtx12 == 1)
{
  AUXR |= BRTx12;//BRTx12 = 1;1T模式
}
else if(brtx12 == 0)
{
  AUXR &= (~BRTx12);//BRTx12 = 0;12T模式  
}
else
{
  return -2;
}
  
AUXR |= BRTR;//開啟波特率發(fā)生器                    
IE2 |= ES2;// ES2 = 1;    //允許串口2中斷
EA = 1;    //開總中斷
return 0;
}
//void Uart1Send(char i)
//{
// TI = 0; //清空發(fā)送完中斷請求標(biāo)志位
// SBUF = i;  //將數(shù)據(jù)放入寄存器發(fā)送
// while(TI == 0);//等待發(fā)送完畢,發(fā)送完畢 TI == 1
// TI = 0; //清空發(fā)送完中斷請求標(biāo)志位
//}
//void Uart1Sends(char* at)
//{
//// while(*at != '\0') //判斷一串?dāng)?shù)據(jù)是否結(jié)束
// {
//  SBUF=*(at++); //發(fā)送數(shù)據(jù)
//  while(TI==0); //查詢發(fā)送是否結(jié)束
//  TI=0; //清除發(fā)送一標(biāo)志位
// }  
//}
void CLR_Buf(void)
{
  unsigned char k;
  for(k=0;k<Buf_Max;k++)    //將緩存內(nèi)容清零
{
   Rec_Buf[k] = 0;
}
  i = 0;                    //接收字符串的起始存儲位置
}
//void CLR_BufU2(void)
//{
//  unsigned char k;
//  for(k=0;k<Buf_Max;k++)    //將緩存內(nèi)容清零
// {
//   Rec_BufU2[k] = 0;
// }
//  a = 0;                    //接收字符串的起始存儲位置
//}
//bit Hand(unsigned char *b)
//{
//  if(strstr(Rec_Buf,b)!=NULL)
//  return 1;
//  else
//  return 0;
//}
//bit HandU2(unsigned char *b)
//{
//  if(strstr(Rec_BufU2,b)!=NULL)
//  return 1;
//  else
//  return 0;
//}
extern bit flagrxt;
void SerialUart1() interrupt 4
{
ES=0;
if(RI)  //如果是接送中斷,則進行處理
{
  RI = 0; //清除接收中斷標(biāo)志位
  Rec_Buf[i] = SBUF; //將接收到的字符串存到緩存中
  i++;  
}
    if (TI)  //字節(jié)發(fā)送完畢
    {
        TI = 0;   //清零發(fā)送中斷標(biāo)志位
    }
ES=1;
}
void Uart2Send(char i)
{
unsigned char temp = 0;

IE2 &= (~ES2);//關(guān)閉串口2中斷//ES2 = 0;
S2CON &= (~S2TI);//S2TI = 0;
S2BUF = i;//裝入數(shù)據(jù)
do
{
  temp = S2CON;
  temp = temp & 0x02;//temp = S2TI;
}while(temp == 0);//判斷是否發(fā)送完畢
S2CON &= (~S2TI);//S2TI = 0;
IE2 |= ES2;//ES2 = 1;
  
}
//void Uart2Sends(char* data_at)
//{
//
// unsigned char cnt=0;
//
// IE2 &= (~ES2);//關(guān)閉串口2中斷//ES2 = 0;
// S2CON &= (~S2TI);//S2TI = 0;
//
//   
// while(*(data_at+cnt)) //判斷一串?dāng)?shù)據(jù)是否結(jié)束
// {
//  S2BUF = *(data_at+cnt);//裝入數(shù)據(jù)
//  while((S2CON & S2TI) == 0);
//  S2CON &= (~S2TI);//S2TI = 0;
//  cnt++;
//
// }
//
// S2CON &= (~S2TI);//S2TI = 0;
// IE2 |= ES2;//ES2 = 1;  
//}
void InterruptUart2() interrupt 8
{
IE2 &= (~ES2);//關(guān)閉串口2中斷//ES2 = 0;
    if(S2CON & S2RI)
{
  S2CON &= (~S2RI);  //S2RI = 0;
  Rec_BufU2[a]=S2BUF;
  a++;               //緩存指針向后移動
  if(Rec_BufU2[a-2] == 0x0d && Rec_BufU2[a-1] == 0x0a && a >= 2)
  {   
   Uart2_flagFrame=1;        
  }
  if(a>100)          //如果緩存滿,將緩存指針指向緩存的首地址
  {
     a = 0;
  }
}
IE2 |= ES2;
if(S2CON & S2TI)
{
  S2CON &= (~S2TI);  //S2TI = 0;
}
}

***********time.c
#include "time.h"
#include <string.h>
#include<string.h>    //后面的一些函數(shù)要用到的頭文件,如strstr等
#include  <intrins.h>
#include "Lcd12864.h"
#include "Lcd1602.h"
//#include "PWM.h"
#include "config.h"
#include <ds18b20.h>
#include<stdio.h>
#include "eeprom.h"
#include "ds1302.h"
#include "uart.h"
#include "key.h"
#include "dht11.h"
#include "time.h"
#include "Infrared.h"
#include "Moto.h"
#include "BH1750.h"
#include "ad.h"
#include "hcsr501.h"
extern unsigned char str[];
extern bit flagstar;
unsigned char flagstep=0;
bit Alarmflag=0;
bit buzzerflag=0;
extern unsigned char i; //定義緩存指針
unsigned int AlarmHour = 26;  //鬧鐘時間的小時數(shù)
unsigned char AlarmMin  = 50;  //鬧鐘時間的分鐘數(shù)
unsigned char AlarmHour1 = 0x00;  //鬧鐘時間的小時數(shù)
unsigned char AlarmMin1  = 0x00;  //鬧鐘時間的分鐘數(shù)
struct sTime bufTime;  //日期時間緩沖區(qū)
extern signed char KeyCodeMap[4];
extern signed char KeySta[4];
extern bit Uart1_flagFrame ;
extern bit Uart2_flagFrame;
unsigned char step = 0;
extern unsigned char Rec_Buf[];   //定義緩存數(shù)組
extern unsigned char psec=0xAA;  //秒備份,初值A(chǔ)A確保首次讀取時間后會刷新顯示
unsigned char str_eeprom[12];
unsigned char toch = 0;
double ADNum=0;   
unsigned int Value,b; //定義兩個變量
bit res = 0;
int intT,intT1,intT2,intT3,decT;  //溫度值的整數(shù)和小數(shù)部分
int temp = 0;
extern unsigned char RH,RL,TH,TL;
unsigned char str_TX[20];

unsigned char falgstep = 1;
unsigned int j;
unsigned int tempvlue = 0;
unsigned int  dis_data=0;//BH1750定義
extern unsigned char BUF[8];
unsigned char lightflag=5;
extern signed char counter;

unsigned char str_TX[20];
extern unsigned int cnt_i;
void delay_Nms(unsigned int Ncount)   //誤差 -0.018084490741us
{
    unsigned char a,b;
while(Ncount--)
{
     for(b=18;b>0;b--)
         for(a=149;a>0;a--);
}
}
char strtx1[8]={0x23,0x01,0x04,0x00,0x00,0x00,0x01,0x23};
char strtx2[8]={0x23,0x01,0x04,0x00,0x00,0x00,0x02,0x23};
char strtx3[8]={0x23,0x01,0x04,0x00,0x00,0x00,0x03,0x23};
char strtx4[8]={0x23,0x01,0x04,0x00,0x00,0x00,0x04,0x23};
extern unsigned char i;
unsigned char cnttx=0;
bit flagrxt=0;
void UartAction()
{
if(i!=0)
{
  delay_Nms(5);  
}
if(i==4)
{
  if(Rec_Buf[0]==0x7E&&Rec_Buf[1]==0x41&&Rec_Buf[2]==0x03&&Rec_Buf[3]==0x0D)
  {
   for(cnttx=0;cnttx<8;cnttx++)
   {
    Uart2Send(strtx1[cnttx]);
   }
   led6=0;
   led7=1;      
  }

  else if(Rec_Buf[0]==0x7E&&Rec_Buf[1]==0x41&&Rec_Buf[2]==0x06&&Rec_Buf[3]==0x0D)
  {
   for(cnttx=0;cnttx<8;cnttx++)
   {
    Uart2Send(strtx2[cnttx]);
   }
   led6=0;
   led7=1;  
  }
  else if(Rec_Buf[0]==0x7E&&Rec_Buf[1]==0x41&&Rec_Buf[2]==0x09&&Rec_Buf[3]==0x0D)
  {
   for(cnttx=0;cnttx<8;cnttx++)
   {
    Uart2Send(strtx3[cnttx]);
   }
   led6=0;
   led7=1;  
  }
  else if(Rec_Buf[0]==0x7E&&Rec_Buf[1]==0x41&&Rec_Buf[2]==0x19&&Rec_Buf[3]==0x0D)
  {
   for(cnttx=0;cnttx<8;cnttx++)
   {
    Uart2Send(strtx4[cnttx]);
   }
   led6=0;
   led7=1;  
  }else
  {
   led6=1;
   led7=0;
   i=0;   
  }
   
  CLR_Buf();
  i=0;
}
else if((i>=1&&i<=3)||i>=5)
{
   led6=1;
   led7=0;
   i=0;
}  
}

*********time.h
#ifndef _TIME_H
#define _TIME_H

void Showstep();
void InputSetStep();
void NumberUpAcktion();
void NumberDownAcktion();
void KeyAction(unsigned char keycode);
void AlarmMonitor();
void ShowBcdByte(unsigned char x, unsigned char y, unsigned char bcd);
void RefreshTimeShow();
void view();
void HC05Action();
void refreshTempHun();
void Alarm();
void refreshTemp();
void refreshTemp1();
void refreshTemp2();
void refreshTemp3();
void refleshhum();
void refreshDs1302();
void eepromreadbyte();
void refreshalarm();
void UartAction();
void AlarmMonitor();
void led2sta(unsigned char sta);
void led2sta(unsigned char sta);
void refreshvoice();
void refreshtouch();
void reflrshuartshow();
#endif

電腦通過串口助手發(fā)送指令收不到指定的指令,  還請有經(jīng)驗的大牛們不吝賜教,謝謝!

1519348834(1).jpg (104.73 KB, 下載次數(shù): 71)

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美1区2区| 免费黄篇| 欧美成人精品一区二区男人看 | 久久国产免费看 | 亚洲美女一区二区三区 | 99亚洲国产精品 | 作爱视频免费看 | 日本黄色免费片 | 一道本不卡 | 懂色av蜜桃av | 人人人人干 | 午夜日韩视频 | 欧美一区二区三区四区视频 | 国产色婷婷精品综合在线播放 | 亚洲国产一区视频 | 日韩精品在线一区二区 | 亚洲精品一区av在线播放 | 午夜精品久久久久久久 | 小草久久久久久久久爱六 | 99热99| 精品一区二区三区在线观看 | 中文字幕一区二区三区日韩精品 | 国产精品永久久久久 | 久久久www成人免费精品 | 欧美在线一区二区三区 | 欧美黑人体内she精在线观看 | 国产成人综合久久 | 免费在线观看成人 | 国产91视频播放 | 精品国产一区一区二区三亚瑟 | 国产精品1| 久久99蜜桃综合影院免费观看 | 亚洲成av人影片在线观看 | 99色播| 99久久日韩精品免费热麻豆美女 | 美女高潮网站 | 久久久久国产一区二区三区四区 | 9久久| 亚洲精品在线观看网站 | 日韩免费视频一区二区 | 成人小视频在线观看 |