打印
[国产单片机]

51单片机无线模块

[复制链接]
1720|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
新手求支援|  楼主 | 2012-7-30 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家帮忙看看这个程序哪里有问题 我用串口助手接收的是汉字 一些乱码

#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[i]; //发送起始位
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();

}
}

相关帖子

沙发
新手求支援|  楼主 | 2012-7-30 09:22 | 只看该作者
1# 新手求支援



主要看下 这一块  谢谢了~~
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;

}

使用特权

评论回复
板凳
老鱼探戈| | 2012-7-30 16:36 | 只看该作者
看波特率对不对。

使用特权

评论回复
地板
darlin520| | 2012-7-30 19:40 | 只看该作者
楼主波特率设置时TL1哪去了???

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

0

粉丝