[STM8] 求模拟串口程序

[复制链接]
1394|16
 楼主| shashaa 发表于 2018-8-25 21:50 | 显示全部楼层 |阅读模式
求模拟串口程序:stm8,波特率9600,晶振32.768K
需要3个串口,只能模拟一个了,请大家帮忙
feiqi1 发表于 2018-8-25 21:55 | 显示全部楼层
我用I/O口模拟过串口,只做过发送,接收没做过。
androidbus 发表于 2018-8-25 21:56 | 显示全部楼层
可以用定时器控制每位的时间
litengg 发表于 2018-8-25 21:59 | 显示全部楼层
也可以用示波器调试每位的时间。
qiangweii 发表于 2018-8-25 22:00 | 显示全部楼层
void init_TimerA(void)

{

TACTL |= TASSEL1+MC1+TACLR; //SMCLK ,连续记数,请TAR

CCTL0 |= OUT; //默认比较输出为1

P1DIR |= TXD;

P1SEL |= RXD+TXD;

}
sourceInsight 发表于 2018-8-25 22:03 | 显示全部楼层
函数(模块)名称:init_TXD

功能:        初始化发送

输入参数: 无

输出参数: 无

函数返回值说明:无

使用的资源:

它说明: 无

*************************************************/

void init_TXD(unsigned int Byte)

{

Count_T = 11; //起始位,8位数据位,奇偶校验位,停止位

CCR0 = TAR + OneBit;

//-----------------------------------------------------

for(char i=0;i<8;i++)

{

if(Movebit & Byte)

{

ParityBit++;

}

Movebit <<= 1;

}

Movebit = 0x01;

if(ParityBit%2 == 0)

{

TxDate |=0x0200+Byte; //0010 xxxx xxxx

}

else

{

TxDate |=0x0300+Byte; //0011 xxxx xxxx

}

ParityBit = 0;

//--------------------------------------------------------


TxDate=TxDate<<1; //往左移1位,产生起始位


CCTL0 = OUTMOD0 + CCIE; //置位,比较中断允许

//while ( CCTL0 & CCIE ); //等待发送完毕

LPM0;


}
boy1990 发表于 2018-8-25 22:03 | 显示全部楼层
利用定时器的比较捕获功能来模拟串口是完全可以的
CallReceiver 发表于 2018-8-25 22:07 | 显示全部楼层
两个定时器就可以模拟另外两路了。
hfdy01 发表于 2018-8-25 22:07 | 显示全部楼层
模拟串口的可以通过定时器的模拟来实现的。
xia00 发表于 2018-8-25 22:10 | 显示全部楼层
需要定时器的捕获功能的,还有时钟源的处理很重要的。
bbapple 发表于 2018-8-25 22:11 | 显示全部楼层
你是要直接配置寄存器的呢
还是使用定时器模拟串口操作。
handleMessage 发表于 2018-8-25 22:14 | 显示全部楼层
IO 口模拟串口,是要根据时序来完成的
zhouhuanの 发表于 2018-8-25 22:14 | 显示全部楼层

串口的每位需延时0.104秒,中间可执行96个指令周期。
Listate 发表于 2018-8-25 22:16 | 显示全部楼层
用IO模拟SPI或者I2C都可以啊
Mozarts 发表于 2018-8-25 22:17 | 显示全部楼层
需要模拟出串口时序
Rangar 发表于 2018-8-29 17:14 | 显示全部楼层
IO模拟的话,要特别注意时序
renzheshengui 发表于 2018-9-4 10:18 | 显示全部楼层
同步的还是异步的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

1494

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部