|
STC的单片机89C52RC
串口调试助手软件做为发送方,ASCII方式送出“888 777 666”格式的字符串(空格分割),问题是接收处理后分离出里面的一段数据用数码管显示只能是第一次发送的数据,我要是在调试助手里更改了数据再发(手动),显示的还是第一次的数据,而且闪烁,除非关电源再开还是重复如此,反正是只能第一次显示正确,大家帮帮忙!
代码如下:
#include
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define max 15
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar stringa[15]={0};//接收缓冲
uchar stringa1[15]={0};
uchar a[20];
uchar i=0;
uint record;
uint numaz;
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
if(RI && i < max)
{
RI = 0;
stringa[i++]=SBUF;
record = 1; //取数标志
}
}
/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
Com_Init(); //串口初始化
while(1)
{
if(record==1)
{
record = 0;
sprintf(stringa1,"%s",stringa);//将stringz附给stringa1,此时格式是888 777 666,不知道对不对
sscanf(stringa1,"%*s%s%s",a);//用sscanf函数分离出第一个数据段888,这个应该是字符串吗?不知道这样能不能用
numaz=atoi(stringa1); //将字符型的888转换为数值型
}
P0 = table[numaz/100]; //888的百位数
P2 = 0x05; //数码管位选,百位
Delay_1ms(1);
P0 = table[numaz%100/10]; //十位数
P2 = 0x06;
Delay_1ms(1);
P0 = table[numaz%100%10];
P2 = 0x07;
Delay_1ms(1);
}
}
不知道这代码合理吗?感觉在调试助手里第一次送出的时候显示正确的话,那应该在串口数据接收和数据处理转换环节应该是对的,哪里不知道出了岔子?
|
|