中级会员
- 积分
- 483
- 金钱
- 483
- 注册时间
- 2013-7-27
- 在线时间
- 4 小时
|
楼主 |
发表于 2014-10-11 11:32:59
|
显示全部楼层
回复【2楼】1201yuge:
---------------------------------
这个板子,无法下载了。我现在换了一个单片机型号,程序功能和上面,波特率和晶振也都对着,可是还是收不到数据,麻烦你再看一下。
#include<stdio.h>
#include<stc15f2k60s2.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar Rxindex;
uchar Rx_SBUF;
uchar xdata RecieveData[10];
bit bdata Re_Flag;
void Receive_data();
uchar uc_flag_1 = 0;
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR = 0x40; //定时器1时钟为Fosc,即1T
TMOD = 0x00; //设定定时器1为16位自动重装方式
TL1 = 0xE0; //设定定时初值
TH1 = 0xFE; //设定定时初值
TR1 = 1; //启动定时器1
ES = 1;
}
void send_dat(uchar dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
void main()
{
UartInit();
EA = 1;
while(1)
{
if(uc_flag_1) // 每收到一个字节
{
ES = 0; //关闭总中断
uc_flag_1 = 0; // 清除接收标志
send_dat(0x11);
ES = 1;// 开启总中断
}
if(Re_Flag ) // 正确接收到数据 发送0x88
{
ES = 0; //关闭总中断
Re_Flag = 0; // 清除接收标志
send_dat(0x88);
ES = 1;// 开启总中断
}
}
}
// 串口1中断服务程序 测试
void uart0() interrupt 4 using 1
{
if( RI== 1)
{
RI = 0;
Rx_SBUF = SBUF;
uc_flag_1 = 1;
Receive_data();
}
}
void Receive_data()
{
if(Rx_SBUF==0xAA) // 数据长度为8个字节
Rxindex=0;
RecieveData[Rxindex++]=Rx_SBUF;
if(Rxindex==8)
{
Rxindex =0x00;
// 自定义协议格式为:AA, xx,xx,xx, xx,xx,xx, 55
if((RecieveData[0]==0XAA) && (RecieveData[7]==0X55))
{
Re_Flag=1; // 数据头和数据尾均正确
}
}
} |
|