哪位大神帮忙解答???
我有个产品是用SH79F0819单片机控制,12864中文LCD显示,从其他单片机串口读取一个14位字符串,发送端单片机采用串口异步通信,波特率为9600,8位数据,1位起始位,1位停止位,无验证码,有个外置微动开关触发其发出一个字符串。
而我采用SH79F0819的EUART的方式一进行通信,T2为波特率发生器, 12.3MHz内部RC振荡频率,我的串口通信代码设置如下,仿真时只接到一位数据的触发,要发送14次才会完成14位字符串的读取,请大神们指点问题出在哪里,应怎么解决。
#include <sh79f0819.h>
#define uchar unsigned char
/*---------------延时子程序----------------*/
void Delay_US (uchar us)
{
while(--us);
}
void Delay_MS (uchar ms)
{
do {Delay_US(203);}
while(--ms);
}
void Delay_S (uchar s)
{
do {Delay_MS(200);Delay_MS(200);Delay_MS(200);Delay_MS(200);Delay_MS(200);}
while(--s);
}
//串口初始化
void UART_initial ()
{
T2CON=0x20; //设定定时器2为接收波特率发生器
T2MOD=0x00; //T2模式控制寄存器清零
RCAP2H=0xff;
RCAP2L=0xd8; //按波特率9600算出定时器2溢出设置值65496
PCON=0x00; //电源控制寄存器清零
TR2=1; //启动定时器2
SCON=0x50; //设置串口通信为方式1,并允许接收
RI=0;
}
int main(void){
uchar i=0;
uchar a[14];
Delay_MS(100);
UART_initial();
for (i=0;i<14;i++){
while(!RI);
RI=0;
a[i]=SBUF;
}
Display(a); //LCD显示
while(1);
}
|