社区
单片机/工控
帖子详情
有人做过用通用io仿真串口吗?
hanbig
2004-08-13 09:33:24
我的片子上io多得是,可是串口不够了,想用这些io口配合软件仿真一个串口,
有人做过吗,或者有可行性吗?
...全文
109
7
打赏
收藏
有人做过用通用io仿真串口吗?
我的片子上io多得是,可是串口不够了,想用这些io口配合软件仿真一个串口, 有人做过吗,或者有可行性吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hanbig
2004-08-13
打赏
举报
回复
能具体说说吗,我考虑其中主要有几个问题,一个是定时,是不是可以用软件定时,
还是必须要用硬件定时,另外,控制信号是不是可以不要,只要tx和rx。
wpf810
2004-08-13
打赏
举报
回复
如果你的程序处理事情不是很多的话,是可以用IO都模拟串口!如果输出TXD,就比较简单!读就相对难点RXD。
hanbig
2004-08-13
打赏
举报
回复
扩展这个成本有多少
romyks
2004-08-13
打赏
举报
回复
用扩展吧,ST15C554。
hanbig
2004-08-13
打赏
举报
回复
多谢各位,我拿这段代码研究研究,顺便问一下,怎么结贴,呵呵
keard
2004-08-13
打赏
举报
回复
原理上差不多如楼上所说
做过,就是波特率很难上得很高
uxeir
2004-08-13
打赏
举报
回复
51 IO口模拟串口通讯C源程序(给美丽心情)(wxkc51bbs)
#include <reg51.h>
sbit BT_SND =P1^0;
sbit BT_REC =P1^1;
/**********************************************
IO 口模拟232通讯程序
使用两种方式的C程序 占用定时器0
**********************************************/
#define MODE_QUICK
#define F_TM F0
#define TIMER0_ENABLE TL0=TH0; TR0=1;
#define TIMER0_DISABLE TR0=0;
sbit ACC0= ACC^0;
sbit ACC1= ACC^1;
sbit ACC2= ACC^2;
sbit ACC3= ACC^3;
sbit ACC4= ACC^4;
sbit ACC5= ACC^5;
sbit ACC6= ACC^6;
sbit ACC7= ACC^7;
void IntTimer0() interrupt 1
{
F_TM=1;
}
//发送一个字符
void PSendChar(unsigned char inch)
{
#ifdef MODE_QUICK
ACC=inch;
F_TM=0;
BT_SND=0; //start bit
TIMER0_ENABLE; //启动
while(!F_TM);
BT_SND=ACC0; //先送出低位
F_TM=0;
while(!F_TM);
BT_SND=ACC1;
F_TM=0;
while(!F_TM);
BT_SND=ACC2;
F_TM=0;
while(!F_TM);
BT_SND=ACC3;
F_TM=0;
while(!F_TM);
BT_SND=ACC4;
F_TM=0;
while(!F_TM);
BT_SND=ACC5;
F_TM=0;
while(!F_TM);
BT_SND=ACC6;
F_TM=0;
while(!F_TM);
BT_SND=ACC7;
F_TM=0;
while(!F_TM);
BT_SND=1;
F_TM=0;
while(!F_TM);
TIMER0_DISABLE; //停止timer
#else
unsigned char ii;
ii=0;
F_TM=0;
BT_SND=0; //start bit
TIMER0_ENABLE; //启动
while(!F_TM);
while(ii<8)
{
if(inch&1)
{
BT_SND=1;
}
else
{
BT_SND=0;
}
F_TM=0;
while(!F_TM);
ii++;
inch>>=1;
}
BT_SND=1;
F_TM=0;
while(!F_TM);
#endif
TIMER0_DISABLE; //停止timer
}
//接收一个字符
unsigned char PGetChar()
{
#ifdef MODE_QUICK
TIMER0_ENABLE;
F_TM=0;
while(!F_TM); //等过起始位
ACC0=BT_REC;
TL0=TH0;
F_TM=0;
while(!F_TM);
ACC1=BT_REC;
F_TM=0;
while(!F_TM);
ACC2=BT_REC;
F_TM=0;
while(!F_TM);
ACC3=BT_REC;
F_TM=0;
while(!F_TM);
ACC4=BT_REC;
F_TM=0;
while(!F_TM);
ACC5=BT_REC;
F_TM=0;
while(!F_TM);
ACC6=BT_REC;
F_TM=0;
while(!F_TM);
ACC7=BT_REC;
F_TM=0;
while(!F_TM)
{
if(BT_REC)
{
break;
}
}
TIMER0_DISABLE; //停止timer
return ACC;
#else
unsigned char rch,ii;
TIMER0_ENABLE;
F_TM=0;
ii=0;
rch=0;
while(!F_TM); //等过起始位
while(ii<8)
{
rch>>=1;
if(BT_REC)
{
rch|=0x80;
}
ii++;
F_TM=0;
while(!F_TM);
}
F_TM=0;
while(!F_TM)
{
if(BT_REC)
{
break;
}
}
TIMER0_DISABLE; //停止timer
return rch;
#endif
}
//检查是不是有起始位
bit StartBitOn()
{
return (BT_REC==0);
}
void main()
{
unsigned char gch;
TMOD=0x22; /*定时器1为工作模式2(8位自动重装),0为模式2(8位
自动重装) */
PCON=00;
TR0=0; //在发送或接收才开始使用
TF0=0;
TH0=(256-96); //9600bps 就是 1000000/9600=104.167微秒 执行的
timer是
//
104.167*11.0592/12= 96
TL0=TH0;
ET0=1;
EA=1;
PSendChar(0x55);
PSendChar(0xaa);
PSendChar(0x00);
PSendChar(0xff);
while(1)
{
if(StartBitOn())
{
gch=PGetChar();
PSendChar(gch);
}
}
}
单片机protues
仿真
串口
通信是单片机与外界通信的重要方式,如UART(
通用
异步收发传输器)。在Protues中,可以设置
串口
参数(波特率、数据位、停止位、校验位),并连接虚拟终端,查看发送和接收的数据,用于调试
串口
程序。 4. **...
STM8S001_FreeModbus.rar
STM8S001J3M3是STM推出的最小封装的8位单片机,虽然
IO
口只有8个,真正能用上的只有5个,如果要
仿真
,那只能有4个。对一些小应用就足以。FreeMODBUS是一个奥地利人写的Modbus协议。它是一个针对嵌入式应用的一个免费...
proteus中实现ARM处理器
仿真
-七段数码管和LCD1602显示
它的接口丰富,支持GP
IO
(
通用
输入/输出)、UART(
通用
异步接收发送器)、SPI(串行外围接口)和I2C(集成电路间通信)等,非常适合用于驱动七段数码管和LCD1602。 **七段数码管显示** 七段数码管是一种常见的字符...
单片机与PC通信示例
在PC端,由于现代计算机很少有物理的RS-232
串口
,我们通常会使用虚拟
串口
技术。虚拟
串口
驱动可以将USB、蓝牙或其他接口模拟为传统的串行端口,使得软件可以像操作物理
串口
一样与这些设备通信。例如,通过安装特定的...
pic66k22.zip_PIC18F66k22芯片_pic18f66k22_shallow82t_wwwsexoquehtef
1. **
串口
通信**:PIC18F66K22内置了多个串行接口,包括SPI、I2C和USART。这些接口可以方便地实现设备间的通信,例如连接传感器、显示器或者无线模块。 2. **EEPROM功能**:芯片内置的EEPROM允许在断电后保存关键...
单片机/工控
27,510
社区成员
28,796
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章