新手求援助 不胜感激
#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();
}
}
此帖出自小平头技术问答
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;
}
一周热门 更多>