无线模块串口通讯

2019-03-24 19:04发布

新手求援助  不胜感激


#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "18b20.h"
#include "delay.h"
#include "i2c.h"


#define AddWr 0x90   //写数据地址
#define AddRd 0x91   //读数据地址
extern bit ack;
unsigned char ReadADC(unsigned char Chl);
unsigned int ReadTemperature(void);
bit WriteDAC(unsigned char dat);
sbit         SETB        =P1^6;  //低电平时亮
sbit        SETA        =P3^4;
sbit        AUX                =P3^2;      //状态
//===========================工作模式0===============================
void UTC1212_MODE0(void)
{
         SETA=0;SETB=0;
}

//--------------------------------------------------------------------------------------------------
// 函数名称: UART_init()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
//            串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------------------------

void Init_Timer0(void);//定时器初始化
void UART_Init(void)
{
    SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz
PCON=0X80;  
    TR1   = 1;                  // TR1:  timer 1 打开                        
    //EA    = 1;                  //打开总中断
    //ES    = 1;                  //打开串口中断
        TI =1;
}       
unsigned char ReadADC(unsigned char Chl)
{
   unsigned char Val;
   Start_I2c();               //启动总线
   SendByte(AddWr);             //发送器件地址
     if(ack==0)return(0);
   SendByte(0x40|Chl);            //发送器件子地址
     if(ack==0)return(0);
   Start_I2c();
   SendByte(AddWr+1);
      if(ack==0)return(0);
   Val=RcvByte();
   NoAck_I2c();                 //发送非应蝊?
   Stop_I2c();                  //结束总线
  return(Val);
}         
//--------------------------------------------------------------------------------------------------
// 函数名称: R_S_Byte()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
//            串口发送数据
//--------------------------------------------------------------------------------------------------
void R_S_Byte()
{       
unsigned char  data tx_buf1[2];
unsigned char  StartBit[2]={0x55,0xAA};
unsigned char SignBit=0x0B;
unsigned char i,j;
tx_buf1[0]=ReadTemperature();
tx_buf1[1]=ReadADC(0);
for(i=0;i<2;i++)
{
   SBUF=StartBit;     //发送起始位
  DelayMs(50);             //延时,以防止数据丢失
  }
   SBUF=SignBit;         //发送标志位
for(j=0;j<2;j++)
{
SBUF=tx_buf1[j];
DelayMs(50);
}
DelayMs(500);
     while( TI == 0 );                                //查询法
           TI = 0;
     
}
/*--v----------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{   
UART_Init();
UTC1212_MODE0();
while(1)
{
R_S_Byte();

}
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
新手求支援
1楼-- · 2019-03-25 01:27
主要看下这部分  谢谢了
void R_S_Byte()
{
unsigned char  data tx_buf1[2];
unsigned char  StartBit[2]={0x55,0xAA};
unsigned char SignBit=0x0B;
unsigned char i,j;
tx_buf1[0]=ReadTemperature();
tx_buf1[1]=ReadADC(0);
for(i=0;i<2;i++)
{
   SBUF=StartBit;     //发送起始位
  DelayMs(50);             //延时,以防止数据丢失
  }
   SBUF=SignBit;         //发送标志位
for(j=0;j<2;j++)
{
SBUF=tx_buf1[j];
DelayMs(50);
}
DelayMs(500);
     while( TI == 0 );    //查询法
    TI = 0;
     
}

一周热门 更多>