STC15系列单片程序移植到STC8A8K系列时串口不能通信的问题

本文记录了从STC15系列单片机移植到STC8A8K64S4系列时遇到的串口通信问题及解决过程。主要问题在于波特率设置和串口发送端口的输出模式配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STC15系列单片程序移植到STC8A8K系列时串口不能通信的问题:

产品升级改型,需要将原来使用的STC15系列单片机改为STC8A8K64S4系列,其中用到串口COM1,COM2,串口COM1作MODBUS口,兼调试口。刚开始想这也没有什么,应该直接转换就可以,改为STC8的头文件,然后直接下载,结果程序下载后,没有串口输出。立马去查STC8系列的说明,关于串口部分的STC官方的说明如下:

STC8A8K64S4A12-D版/STC8F8K64S4A12-D版芯片使用注意事项:
. 串口接收需要2个停止位(包括串口1, 串口2, 串口3, 串口4)
. 当串口1使用工作于模式2的定时器1作为串口的波特率发生器时,
SMOD(PCON.7)位必须置1,即必须波特率加倍串口1才可正常工作

恰巧我使用的时串口1,模式2,定时器1,根据说明赶紧把波特率计算程序改为波特率加倍串口1才可正常工作,修改如下:
PCON |= 0x80; //波特率加倍
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器
SCON = 0x50;
TMOD |=0x20; //T1工作2态
TH1=t1_cnt; //0xfd 基准为9600
TL1=t1_cnt;
TR1=1;
根据编译修改的程序,下载测试,串口依然没有输出,反复检查更改的部分,没有问题。困惑,单片机程序设计以来,这么成熟的程序还有问题,根据对STC单片机的了解,还有其他猫腻,于是再查PDF,或得信息:
关于此芯片的重要说明:
所有串口(包括串口1、串口2、串口3、串口4)的发送端口均需要
软件设置为强推挽输出模式或者外接3~5K的上拉电阻

更改P3.0,P3.1的配置:
P3M1 = 0x00; //0000 0000
P3M0 = 0x03; //0000 0011
根据编译修改的程序,下载测试,串口通信正常。以此为记。2021.3.19

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cjmsea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值