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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

STC12C5A做的一個(gè)串口通信實(shí)驗(yàn), 大神來指導(dǎo)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
******主程序
#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;  //日期時(shí)間緩沖區(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í)間的小時(shí)數(shù)
extern unsigned char AlarmMin;  //鬧鐘時(shí)間的分鐘數(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  //緩存長(zhǎng)度,這個(gè)長(zhǎng)度的最大值要根據(jù)單片機(jī)型號(hào)和程序的實(shí)際情況來,我的這個(gè)100幾乎是實(shí)際情況的最大限度了
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è)置獨(dú)立波特率發(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è)置為使用獨(dú)立波特率發(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è)置獨(dú)立波特率發(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ā)送完中斷請(qǐng)求標(biāo)志位
// SBUF = i;  //將數(shù)據(jù)放入寄存器發(fā)送
// while(TI == 0);//等待發(fā)送完畢,發(fā)送完畢 TI == 1
// TI = 0; //清空發(fā)送完中斷請(qǐng)求標(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;                    //接收字符串的起始存儲(chǔ)位置
}
//void CLR_BufU2(void)
//{
//  unsigned char k;
//  for(k=0;k<Buf_Max;k++)    //將緩存內(nèi)容清零
// {
//   Rec_BufU2[k] = 0;
// }
//  a = 0;                    //接收字符串的起始存儲(chǔ)位置
//}
//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)  //如果是接送中斷,則進(jìn)行處理
{
  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++;               //緩存指針向后移動(dòng)
  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í)間的小時(shí)數(shù)
unsigned char AlarmMin  = 50;  //鬧鐘時(shí)間的分鐘數(shù)
unsigned char AlarmHour1 = 0x00;  //鬧鐘時(shí)間的小時(shí)數(shù)
unsigned char AlarmMin1  = 0x00;  //鬧鐘時(shí)間的分鐘數(shù)
struct sTime bufTime;  //日期時(shí)間緩沖區(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確保首次讀取時(shí)間后會(huì)刷新顯示
unsigned char str_eeprom[12];
unsigned char toch = 0;
double ADNum=0;   
unsigned int Value,b; //定義兩個(gè)變量
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ā)送指令收不到指定的指令,  還請(qǐng)有經(jīng)驗(yàn)的大牛們不吝賜教,謝謝!

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

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人精品一区二区三区中文字幕 | 狠狠干2020| 可以免费看的毛片 | 国产高清在线精品一区二区三区 | 午夜激情视频 | 丁香婷婷在线视频 | 羞羞视频网站在线观看 | 狠狠色狠狠色综合日日92 | 最大av在线| 3p视频在线观看 | 国产欧美一区二区三区另类精品 | 夜夜骑首页 | 91麻豆精品国产91久久久更新资源速度超快 | 久久久久国产一区二区 | 九九热精品视频在线观看 | 国产区第一页 | 日韩在线第一 | 亚洲精品国产电影 | 91.xxx.高清在线 | 深夜福利亚洲 | 1级毛片 | 中文字幕成人在线 | 国产黄色免费网站 | 欧美日韩一 | 天天干亚洲 | 国产中文原创 | 污书屋| 成人精品一区二区 | 日韩色视频 | 青草久久免费视频 | 久久午夜剧场 | japan25hdxxxx日本 做a的各种视频 | 国产精品一区二区精品 | 色综合av | 一级毛片免费看 | 精品三级 | а天堂中文最新一区二区三区 | 婷婷色在线播放 | 在线免费观看日本视频 | 免费av播放| 玖操|