真的好奇怪,定时发送一组8个数据,但串口助手结果是前两个数据均为第一个数据,后面数据都正常发送,这是怎么回事?要发送的是一组8个数据是:
uchar send[8]={0x01,0x03,0x00,0x00,0x00,0x01,0x84,0x0A};//发送一组八个数据
然而接收到的却是:0x01,0x01,0x00,0x00,0x00,0x01,0x84,0x0A,第一个数据发送了两遍,然后开始发送第三,四位数据...
这是发送部分的程序:
for(i=0;i<8;i++)
{
SBUF=send[ i];//发送数据
while(!TI);
TI=0;//清除数据传送标志
}
然后我改了一下
for(i=0;i<8;i++)
{
SBUF=send[ i];//发送数据
while(!TI);
TI=0;//清除数据传送标志
}
它应该显示第二,三位数据,也就是03 00 ,但结果却是03 03 ,这是为啥?
以下为完整程序:我用了ds1302时钟模块,second就是秒,已经设置好了
#include <stc12c5a.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <intrins.h>
#include"ds1302.h"
#define uchar unsigned char
#define uint unsigned int
uchar rec[9];//接收
uchar send[8]={0x01,0x03,0x00,0x00,0x00,0x01,0x84,0x0A};//发送一组8个数据
uchar num=0;
void init();// 初始化函数
void UART_1send();
void UART_1interrupt();
int flag2;//接收标志位
int i;
void delay(uint z)//延时函数1ms
{
uint x,y;
for(x=z;x>0;x--);
for(y=110;y>0;y--);
}
void init() //系统初始化
{
TMOD |=0X20;//定时器T1,方式2,波特率由PCON寄存器的SMOD决定
SCON=0x50; //REN RI TI,RI为0,TI为0
//串行口1方式1 SCON是串行口1的串行控制寄存器,REN为1,允许接收
PCON=0x00;//各工作方式波特率加倍
TH1=0xfD;//9600bps@11.0592
TL1=0xfD;
TR1=1; //定时器1中断打开
EA=1;//cpu总中断允许位,1为开放中断
ES=1;// 1允许串行口中断
}
void main()
{
flag2=0;
init();//初始化
while(1)
{
delay(1000);
UART_1send(); //串口发送
}
}
void UART_1send() //串口发送函数
{
uchar i;
delay(500);
if(flag2==0) //如果标志位flag2=0,则发送
{
for(i=0;i<8;i++)
{
SBUF=send[ i];//风向数据
while(!TI);
TI=0;//清除数据传送标志
}
flag2=1;
}
} |