jindizhiwa 发表于 2023-5-4 13:26:23

STC8G1K08模拟串口

请教STC的工程师,STC8G1K08如果想用IO口模拟串口,哪些配置需要注意?从贵司的官网下载的STC15系列使用Timer2接合INT4模拟一个半双工串口例程,
改变头文件#include        <reg52.h>为
#include "STC8Gxxx.h",
改变IO口配置,
sbit P_RX3 = P1^6;        //定义模拟串口接收IO
sbit P_TX3 = P1^7;        //定义模拟串口发送IO
增加了IO口初始化P1M0 &= ~0xc0; P1M1 &= ~0xc0;
但是程序没收到数据,不知哪里配置有问题?
或者你们有STC8G系列模拟串口的例程?
附件是改过的程序,请指点






32G12K128 发表于 2023-5-5 10:07:37

STC8G1K08有直接的串口,不需要用复杂的软件模拟。


jindizhiwa 发表于 2023-5-8 10:05:46

我是用P1.6和P1.7做的例子,实际使用的是P3.4和P3.5。能辛苦STC的工程师给个P3.4和P3.5的IO口模拟串口的半双工例程吗?

32G12K128 发表于 2023-5-8 12:02:40

STC8G1K08有直接的串口,不需要用复杂的软件模拟。
目前只有这个范例(STC15的):

gjf 发表于 2023-5-29 08:24:18

有没有遇到上电会误发1~2字节的情况,如何避免误发数据?

32G12K128 发表于 2023-5-29 11:01:30

您可以用范例测试下!

梁工 发表于 2023-5-29 14:29:42

gjf 发表于 2023-5-29 08:24
有没有遇到上电会误发1~2字节的情况,如何避免误发数据?

串口发送时主动的,不发送就不会发,怎么会有误发?接口电路上电进入工作时可能会是低电平一下,对方可能会误收一两个字节,但那不是MCU发的,是你的硬件问题。MCU的串口,上电为高电平或高阻,都不会导致误发的。

梁工 发表于 2023-5-29 14:44:06

模拟串口方式通常如下:
1、定时器中断三倍采样接收、发送,一个定时器就可以做一个全双工串口,IO任意用,但是波特率不能太高,不建议超过19200(主频24MHz或以上,定时器中断优先级最高)。当波特率9600时,一个定时可以做4~8个模拟串口,非常可靠的,以前我做工控类串口卡,就是这样做的,一个硬件串口接上位机,3个硬件串口提供高速串口,4~8个模拟全双工串口提供1200~9600的波特率。
2、用一路PCA接收,一路PCA发送,可以做一个全双工串口,必须使用PCA输入、输出的IO,波特率可以达到115200(主频24MHz或以上,PCA中断优先级最高)。
3、用两路STC8H、STC32G的PWM做全双工串口,跟上述PCA做的一模一样。

STC-ISP的范例程序里STC15系列例子就有,已经是十年前写的例程了:


bobzone 发表于 2023-9-8 08:43:06

梁工 发表于 2023-5-29 14:44
模拟串口方式通常如下:
1、定时器中断三倍采样接收、发送,一个定时器就可以做一个全双工串口,IO任意用, ...

感谢梁工。我用PCA模拟了串口,波特率4800,光耦隔离,实测效果很好。

梁工 发表于 2023-9-8 10:20:23

bobzone 发表于 2023-9-8 08:43
感谢梁工。我用PCA模拟了串口,波特率4800,光耦隔离,实测效果很好。

如果用的是慢速光耦(比如PC817、EL357等等),注意速度,4800基本是上限,有加速电路则可以到115200.
页: [1] 2
查看完整版本: STC8G1K08模拟串口