求助STC8a8k64d4串口3的发送接收字节怎么做?按照例程写的不能接受不能发送。。。。
#include"STC8A8K64D4.H"#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define FOSC 11059200UL
#define BRT (65536 - FOSC / 115200 / 4)
sbit LED1=P2^0;
sbit LED2=P2^1;
bit busy;
char wptr;
char rptr;
char buffer;
void Uart3Send(char dat)
{
while (busy);
busy = 1;
S3BUF = dat;
}
void Uart3SendStr(char *p)
{
while (*p)
{
Uart3Send(*p++);
}
}
void Uart3Isr() interrupt 17
{
if (S3CON & 0x02)
{
S3CON &= ~0x02;
busy = 0;
}
if (S3CON & 0x01)
{
S3CON &= ~0x01;
buffer = S3BUF;
wptr &= 0x0f;
}
}
void main()
{
P0M0=0x00;
P0M1=0x00;
P2M0=0x00;
P2M1=0x00;
P3M0=0x00;
P3M1=0x00;
S3CON = 0x10;
T2L = BRT;
T2H = BRT >> 8;
AUXR = 0x14;
IE2 = 0x08;
EA = 1;
wptr = 0x00;
rptr = 0x00;
busy = 0;
while(1)
{
if(rptr != wptr) // 将接收到的数据发送出去
{
Uart3SendStr(buffer);
rptr &= 0x0f;
}
}
}
串口程序,从官方正确的开始,不要从错误的开始,
另外有仿真器 STC-USB Link1D 来高效调试发现你的错误
求STC8系列4个串口同时通信的程序,Modbus 演示程序 - 串行口,DMA支持的4组串口 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
用仿真器 STC-USB Link1D 来高效调试发现你的错误
不要盲人摸象,靠猜==那是高手
用 STC-USB Link1D 仿真STC8系列MCU - 编译器/仿真器/ISP下载/做自己的ISP/ID号加密/程序加密后传输 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
我用你的代码测试,通过串口3(P00,P01)是可以正常收发数据的。
建议参考例程的方法将主循环里的发送指令改成:Uart3Send(buffer);
不然按照你现在的方法,收到数据后会不断的进行发送,因为你的 rptr 没有进行处理。
如果你的环境还是无法进行收发的话,建议检查硬件电路,包括串口工具是否可以正常使用。
乘风飞扬 发表于 2023-6-1 13:30
我用你的代码测试,通过串口3(P00,P01)是可以正常收发数据的。
建议参考例程的方法将主循环里的发送指令 ...
果然可以了 谢谢
页:
[1]