Advertisement

常规IO仿真串口

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
常规IO仿真串口是一种用于模拟和测试设备间通信的技术,通过软件创建虚拟串行端口,便于开发与调试无需物理连接的硬件设备。 外部中断模拟串口实验测试表明:发送57600波特率可以正常工作,但接收的最大波特率为38400。 ```c #include Uart_EXT0.h #include MAIN.h #define FOCS 22114800ul bit Over; bit bRxflag; unsigned char IEN0_NOW, IEN1_NOW; //中断临时变量 unsigned char idata bRxstate = 0; //接收状态 unsigned char idata tmp_Len = 0; //缓存数组下标 unsigned char idata bRxlen; //接收字节数 unsigned char xdata EX_buf[64]; //接收存放区 //波特率设置为56000时,接收一字节所需时间为178.6us。此时会出现错误。 //波特率为38400时,接收一字节的时间是260.4us。即使在快速模式下也容易出现错误。 void Time0_Uart(unsigned int baud) { TMOD &= 0XF0; TMOD |= 0X02; //使用定时器0方式2 TH0 = 256 - (FOCS / 12) / baud; TL0 = TH0; IP0 |= 0x02; //设置为最高优先级 IP1 |= 0x02; TR0 = 1; ET0 = 1; EA = 1; } void Time0_isr() interrupt 1 { Over = 1; } // 发送数据,包括一个起始位、8个数据位和一个停止位。实验表明,在波特率为57600时发送不会出错。 void Uart_set(unsigned char dat) { unsigned char i; Over = 0; TL0 = TH0; T_uart = 0; // 起始位 while (Over == 0); for(i=0;i<8;++i){ // 发送数据位,先发送最低位 dat >>= 1; if(dat & 0x01) { T_uart = 1; } else { T_uart = 0; } while(Over == 0); } Over = 0; // 数据位清零了 T_uart = 1; while (Over == 0); // 停止位,此后如果没有数据则一直为高 } unsigned char get_Uart() { unsigned char I, get_dat=0; Over = 0; TL0 = TH0; while(Over==0); for(I = 7 ;I >= 1 ;--I) { // 接收8个数据位 if(Get_ex == 1) get_dat |= (unsigned char)(Get_ex << I); else get_dat &= ~(unsigned int)((~(unsigned char)0x80) >> (7-I)); while(Over==0); } return get_dat; } void EXuart_isr() interrupt 0 { unsigned char _chr; IEN0_NOW = IEN0; //进入接收1字节,关闭中断 IEN1_NOW = IEN1; IEN0 &= ~IE_EXINT_0; while(IEN0 & IE_EXINT_0); _chr=get_Uart(); switch(bRxstate) { case 0: if(_chr==0x55) { bRxstate=1; } else bRxstate=0; break; case 1: if(_chr==0xaa) {bRxstate =2;} else bRxstate = 0; break; case 2: // 取得数据长度 bRxlen=_chr; bRxstate=3; break; case 3: EX_buf[tmp_Len]=_chr; tmp_Len++; if(tmp_Len >= bRxlen) { bRxflag = 1; IEN0 |= IE_EXINT_0; } break; } } void main() { Time0_Uart(9600); EX_uart(); while (1){ if(bRxflag == 1) { for(i=0;i

全部评论 (0)

还没有任何评论哟~
客服
客服
  • IO仿
    优质
    常规IO仿真串口是一种用于模拟和测试设备间通信的技术,通过软件创建虚拟串行端口,便于开发与调试无需物理连接的硬件设备。 外部中断模拟串口实验测试表明:发送57600波特率可以正常工作,但接收的最大波特率为38400。 ```c #include Uart_EXT0.h #include MAIN.h #define FOCS 22114800ul bit Over; bit bRxflag; unsigned char IEN0_NOW, IEN1_NOW; //中断临时变量 unsigned char idata bRxstate = 0; //接收状态 unsigned char idata tmp_Len = 0; //缓存数组下标 unsigned char idata bRxlen; //接收字节数 unsigned char xdata EX_buf[64]; //接收存放区 //波特率设置为56000时,接收一字节所需时间为178.6us。此时会出现错误。 //波特率为38400时,接收一字节的时间是260.4us。即使在快速模式下也容易出现错误。 void Time0_Uart(unsigned int baud) { TMOD &= 0XF0; TMOD |= 0X02; //使用定时器0方式2 TH0 = 256 - (FOCS / 12) / baud; TL0 = TH0; IP0 |= 0x02; //设置为最高优先级 IP1 |= 0x02; TR0 = 1; ET0 = 1; EA = 1; } void Time0_isr() interrupt 1 { Over = 1; } // 发送数据,包括一个起始位、8个数据位和一个停止位。实验表明,在波特率为57600时发送不会出错。 void Uart_set(unsigned char dat) { unsigned char i; Over = 0; TL0 = TH0; T_uart = 0; // 起始位 while (Over == 0); for(i=0;i<8;++i){ // 发送数据位,先发送最低位 dat >>= 1; if(dat & 0x01) { T_uart = 1; } else { T_uart = 0; } while(Over == 0); } Over = 0; // 数据位清零了 T_uart = 1; while (Over == 0); // 停止位,此后如果没有数据则一直为高 } unsigned char get_Uart() { unsigned char I, get_dat=0; Over = 0; TL0 = TH0; while(Over==0); for(I = 7 ;I >= 1 ;--I) { // 接收8个数据位 if(Get_ex == 1) get_dat |= (unsigned char)(Get_ex << I); else get_dat &= ~(unsigned int)((~(unsigned char)0x80) >> (7-I)); while(Over==0); } return get_dat; } void EXuart_isr() interrupt 0 { unsigned char _chr; IEN0_NOW = IEN0; //进入接收1字节,关闭中断 IEN1_NOW = IEN1; IEN0 &= ~IE_EXINT_0; while(IEN0 & IE_EXINT_0); _chr=get_Uart(); switch(bRxstate) { case 0: if(_chr==0x55) { bRxstate=1; } else bRxstate=0; break; case 1: if(_chr==0xaa) {bRxstate =2;} else bRxstate = 0; break; case 2: // 取得数据长度 bRxlen=_chr; bRxstate=3; break; case 3: EX_buf[tmp_Len]=_chr; tmp_Len++; if(tmp_Len >= bRxlen) { bRxflag = 1; IEN0 |= IE_EXINT_0; } break; } } void main() { Time0_Uart(9600); EX_uart(); while (1){ if(bRxflag == 1) { for(i=0;i
  • STM32 标准IO 仿
    优质
    本项目介绍如何利用STM32的标准GPIO端口模拟实现串行通信功能,适用于资源受限或需额外串口的应用场景。 这两天一直在调试用普通IO口来承担串口的角色,并记录一些笔记。参考了许多网友的代码,在此表示感谢。 首先,最基础的串口数据格式由10位组成:一位开始位、八位数据位以及一个停止位。当然这里暂时不考虑带有各种校验的数据格式,毕竟要先学会走路才能跑起来嘛。其中,数据的时间长度是由波特率决定的,我实现了一个模拟串口功能,并支持到115200波特率,但偶尔会出现错位的情况,这需要进一步进行校验和调试。
  • 通过IO仿SPI通信
    优质
    本项目旨在利用通用输入输出(GPIO)引脚模拟SPI通信协议,以实现设备间的数据传输。该技术适用于缺乏硬件SPI支持的微控制器或进行嵌入式系统开发时的测试与验证阶段。 此函数对于许多低成本影片来说非常有用,可以用来模拟SPI。代码简洁而功能全面,并且稍作修改就可以适应其他模式的SPI模拟需求。
  • STM32 仿
    优质
    STM32仿真串口是一种在开发和调试过程中用于模拟物理串行通信接口的技术,通过USB或其他方式实现与计算机的连接,便于开发者进行数据传输测试。 STM32 模拟串口例程包括模拟串口发送与接收等功能。波特率为9600 1-8-N,使用外部中断对RXD的下降沿进行触发,并利用定时器4按照9600波特率定时数据接收。
  • Proteus仿
    优质
    《Proteus串口仿真》是一款用于电路设计与仿真软件Proteus中的高级功能模块,它能够真实地模拟微控制器和其它电子元件通过串行通信接口进行数据交换的过程。此工具对于开发、调试及验证基于串口的嵌入式系统项目具有不可替代的价值,极大地提高了硬件设计人员的工作效率。 Protues是一款强大的虚拟原型设计工具,特别适合于电子工程和计算机科学的学生以及专业人士进行硬件电路设计和仿真。在本实验中,我们将聚焦于protues串口仿真这一主题,探讨如何利用Protues来模拟串行通信接口,帮助我们理解和验证串口通信的工作原理。 串口通常指的是RS-232串行通信接口,是一种广泛应用于设备间的通信方式。它允许数据以串行的方式传输,常用于计算机与外设如打印机、调制解调器等之间的连接。在Protues中,我们可以创建一个虚拟环境,模拟实际的硬件设备,并通过串口进行数据交换。 我们需要了解Protues的基本操作。打开Protues软件后,新建一个项目,在元件库中选择需要的元器件,例如微控制器(如Arduino或51单片机)和其他需要串口通信的设备。将这些元件拖放到工作区并正确连接它们的引脚,比如TX(发送)到RX(接收)。 接着配置串口参数是关键步骤之一,在Protues中我们需要设置微控制器的串口波特率、数据位、停止位和校验位。这可以通过编程实现,例如在51单片机中使用SCON寄存器进行配置。确保仿真设备的串口参数与程序中的设定一致以保证正常通信。 然后导入或编写用于串口通信的代码。对于Arduino而言,在草图中使用Serial.begin()函数设置波特率,并通过Serial.print()或Serial.write()发送数据,用Serial.read()或Serial.available()接收数据;而对于51单片机,则可能需要利用中断服务程序处理串口数据的发送和接收。 在Protues环境中,我们可以通过模拟串口功能查看并发送数据。点击开始仿真后,在软件右侧的串口监视器中可以看到从虚拟设备发出的数据流或接收到的数据信息。这一特性使得无需实际硬件即可实时观察到串口通信过程,并大大提高了调试效率。 此外,Protues还支持与其他仿真工具如Keil、IAR等集成,实现软硬件协同开发。在项目实践中可以先通过Protues完成硬件验证工作,再结合联调确保软件与硬件的兼容性。 总结来说,protues串口仿真是一个强大的学习和测试手段,它不仅帮助我们理解串行通信的工作原理及调试代码,还能让我们在没有实际设备的情况下预览系统行为。利用 Protues可以构建各种串口通信场景如点对点通信、多设备网络等,这对于理论学习与解决实际问题具有极高的价值。
  • STM32F407仿.zip
    优质
    这个压缩文件包含用于STM32F407微控制器的仿真串口相关资源和示例代码,方便开发者进行调试和测试。 STM32F407ZE使用模拟串口发送和接收数据,并支持115200波特率。发送过程中采用软件延时方法,而接收数据则通过定时读取实现。
  • 通讯仿
    优质
    串口通讯仿真是一种模拟软件或硬件设备之间通过串行接口进行数据交换的技术,用于测试和验证通信协议及应用程序在实际运行环境中的兼容性和稳定性。 通过PROTUES仿真实现串口与虚拟串口之间的直接通讯,成功地完成了该功能的仿真。
  • 51仿.zip
    优质
    51串口仿真是一款针对8051单片机开发的串行通信调试工具,通过模拟实际硬件环境,帮助开发者测试和优化串口通讯程序。 51串口方式仿真.zip
  • PIC系列仿
    优质
    PIC系列仿真串口是一种用于模拟和测试目的的软件工具或硬件设备,它能够创建与微控制器通信的真实串行端口环境,特别适用于开发和调试基于PIC单片机的应用程序。 PIC模拟串口,波特率9600,发送接收测试已通过,支持IO口。
  • STM32软件仿
    优质
    STM32软件仿真串口是一种通过软件模拟硬件功能的技术,用于在没有物理串行通信接口的情况下进行调试和测试,特别适用于资源受限或需降低功耗的应用场景。 STM32软件串口是一种虚拟的通信接口,在硬件资源有限的情况下可以实现串行通信功能。它利用GPIO管脚模拟TXD和RXD信号进行数据传输,适用于不需要高速率的数据交换场景。通过配置定时器中断来完成位时序的精确控制,从而达到发送和接收数据的目的。 软件串口的优点在于灵活性高且占用资源少;缺点则是波特率受限于CPU速度,并不适合对实时性要求较高的应用场合。在实际项目开发中可以根据具体需求选择合适的通信方式。