社区
单片机/工控
帖子详情
有人做过用通用io仿真串口吗?
hanbig
2004-08-13 09:33:24
我的片子上io多得是,可是串口不够了,想用这些io口配合软件仿真一个串口,
有人做过吗,或者有可行性吗?
...全文
117
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
仿真
很多常用的单片机protues
仿真
文件以及源代码,包括
串口
,液晶屏,以及小项目的
仿真
电路
STM8S001_FreeModbus.rar
基于stm8s001的Freemodbus从机通讯程序,定时器1和
串口
1为stm8使用到的外设。 STM8S001J3M3是STM推出的最小封装的8位单片机,虽然
IO
口只有8个,真正能用上的只有5个,如果要
仿真
,那只能有4个。对一些小应用就足以。FreeMODBUS是一个奥地利人写的Modbus协议。它是一个针对嵌入式应用的一个免费(自由)的
通用
MODBUS协议的移植。Modbus是一个工业制造环境中应用的一个
通用
协议。Modbus通信协议栈包括两层:Modbus应用层协议,该层定义了数据模式和功能;另外一层是网络层。
proteus中实现ARM处理器
仿真
-七段数码管和LCD1602显示
利用ARM处理器(NXPLPC21XX系列)在proteus中搭建电路
仿真
,实现七段数码管或者LCD1602显示,有完整的东西:proteus工程。keil源代码。电路截图。简要说明。
单片机与PC通信示例
51单片机与PC通过
串口
通信的示例,用PROTUES和虚拟
串口
仿真
!
pic66k22.zip_PIC18F66k22芯片_pic18f66k22_shallow82t_wwwsexoquehtef
基于PIC18F66K22单片机的项目程序,含有完整的
串口
通信、EEPROM功能、
IO
、定时起、PWM、USART等完整的配置,已经经过实际项目测试,完全用,无需再次配置PIC18F66K22的单片机
单片机/工控
27,517
社区成员
28,798
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章