请教STC8串口2发送的第一个数据错误问题
程序直接使用下载软件的例子稍微修改了下,但是发送的数据第一个居然不对。#include "reg51.h"
#include "intrins.h"
#define FOSC 11059200UL
#define BRT (65536 - FOSC / 115200 / 4)
sfr AUXR = 0x8e;
sfr T2H = 0xd6;
sfr T2L = 0xd7;
sfr S2CON = 0x9a;
sfr S2BUF = 0x9b;
sfr IE2 = 0xaf;
bit busy;
char wptr;
char rptr;
char buffer= {0x02,0x01,0x01,0x02,0xb8,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x34};
void Uart2Isr() interrupt 8
{
if (S2CON & 0x02)
{
S2CON &= ~0x02;
busy = 0;
}
if (S2CON & 0x01)
{
S2CON &= ~0x01;
buffer = S2BUF;
wptr &= 0x0f;
}
}
void Uart2Init()
{
S2CON = 0x10;
T2L = BRT;
T2H = BRT >> 8;
AUXR = 0x14;
wptr = 0x00;
rptr = 0x00;
busy = 0;
}
void Uart2Send(char dat)
{
while (busy);
busy = 1;
S2BUF = dat;
}
void Uart2SendStr(char *p)
{
while (*p)
{
Uart2Send(*p++);
}
}
void Delay8000ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 193;
j = 212;
k = 154;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
Uart2Init();
IE2 = 0x01;
EA = 1;
Delay8000ms();
//Uart2SendStr("Uart Test !\r\n");
rptr=0x10;
while (1)
{
if (rptr != wptr)
{
Uart2Send(buffer);
rptr &= 0x0f;
}
if(rptr==0x00)
{ Delay8000ms();
rptr=0x10;
}
}
}
串口接收到的是00 01 01 02 B8 0B 00 00 00 00 00 00 00 00 03 34,第一个应该是02,找不到哪里出的问题 本帖最后由 XTXB 于 2020-7-27 15:51 编辑
加这两行代码ok:
软件不好找原因能不能直接上示波器看下出错字节的波形,人肉看一下每个bit对不对, 可以直接下载STC-ISP里的范例程序,串口初始化后会发送一串字符串,没问题的。
第一个字节不对,也有可能是串口线的问题。 小李非刀 发表于 2020-7-27 22:08
可以直接下载STC-ISP里的范例程序,串口初始化后会发送一串字符串,没问题的。
第一个字节不对,也有可能是 ...
代码有BUG, char buffer[16].......Uart2Send(buffe[rptr++])...... rptr=0x10; 打赏!
庆祝论坛“打赏”功能实施, 现在开始发技术主题,可以获得打赏
https://www.amobbs.com/thread-5735948-1-1.html
页:
[1]