当前位置:文档之家› IO口模拟串口三种方法

IO口模拟串口三种方法

IO口模拟串口三种方法
IO口模拟串口三种方法

KEIL中如何用虚拟串口调试串口程序

KEIL中如何用虚拟串口调试串口程序 发表于2008/5/7 15:30:22 以前没接触过串口,一直都以为串口很复杂。最近在做一个新项目,用单片机控制GSM模块。单片机和GSM模块接口就是串口。调试完后觉得串口其实很简单。“不过如此”。这可能是工程师做完一个项目后的共同心态吧。下面详细介绍下如何用虚拟串口调试串口发送接收程序。 需要用到三个软件:KEIL,VSPD XP5(virtual serial ports driver xp5.1虚拟串口软件),串口调试助手。 1、首先在KEIL里编译写好的程序。 2、打开VSPD,界面如下图所示: 左边栏最上面的是电脑自带的物理串口。点右边的add pair,可以添加成对的串口。一对串口已经虚拟互联了,如果添加的是COM3、COM4,用COM3发送数据,COM4就可以接收数据,反过来也可以。 3、接下来的一步很关键。把KEIL和虚拟出来的串口绑定。现在把COM3和KEIL 绑定。在KEIL中进入DEBUG模式。在最下面的COMMAND命令行,输入MODE COM3 4800,0,8,1(设置串口3的波特率、奇偶校验位、数据位、停止位,打开COM3串口,注意设置的波特率和程序里设置的波特率应该一样)ASSIGN COM3 SOUT(把单片机的串口和COM3绑定到一起。因为我用的单片机是AT892051,只有一个串口,所以用SIN,SOUT,如果单片机有几个串口,可以选择S0IN,S0OUT,S1IN,S1OUT。)

4、打开串口调试助手 可以看到虚拟出来的串口COM3、COM4,选择COM4,设置为波特率4800,无校验位、8位数据位,1位停止位(和COM3、程序里的设置一样)。打开COM4。 现在就可以开始调试串口发送接收程序了。可以通过KEIL发送数据,在串口调试助手中就可以显示出来。也可以通过串口调试助手发送数据,在KEIL中接收。这种方法的好处是不用硬件就可以调试。这是网上一篇文章介绍的方法,联系我实际的使用做了整理。有用的着的人就不用继续摸索了

串口转以太网核心模块.

串口联网服务器
卓岚串口服务器提供虚拟串口 ZLVirom 和 Socket 通信方式,支持跨 internet 和断网恢复。 包含有 RS232、RS485/422 的单口到 32 口串口服务器。性能稳定、价格公道,是串口设备 联网的最佳选择。
串口转以太网核心模块
卓岚的 ZLSN 模块是嵌入式设备联网的首选。卓岚具有自主的 TCP/IP 协议栈技术,是国家 版权注册软件,且具有超过 8 年的嵌入式联网经验。ZLSN 联网模块提供 TTL、RS232、 RS485/RS422 等多种接口。具备 DDNS、DNS、DHCP、UDP 组播、9 位数据自适应、串口类 AT 命令、100 个同时的 TCP 连接、网页下载和卓岚 HTML 控件、ModbusTCP 支持等高级功能。
串口转以太网模块
提供多种 RS232/RS485/RS422 串口转以太网模块,性能稳定可靠,使用便捷。
串口转 WIFI 模块
提供 TTL 电平、RS232、RS485 串口转 WIFI 串口服务器,WIFI 可以为 AP 或者 Station 模式, 可以连接到无线路由器,也可以让 wifi 手机连接。支持虚拟串口。

串口转 WIFI 模块
支持 4 个继电器 DO 输出、4 个 DI 输入、2 个 AI 输入。可支持 Modbus TCP 协议、Modbus RTU(RS485) 协议和网页控制 IO 方式。工业级温度范围,9~24V 宽电压输入。是进行远程设备控制、远程模拟量、 温度、数字量采集的理想选择。
Modbus 网关
实现 RS232/RS485 串口的 Modbus RTU 协议转化为 Modbus TCP 协议,实现老的 RTU 设备和 新的 Modbus TCP 软件的对接。
网页下载模块
可下载用户自定义的网页,通过卓岚 HTML 控件实现对设备的控制。立即实现用一种嵌入式 的 Web 服务器来进行数据监控和采集。
串口服务器
串口服务器能够使得您的串口设备立即联网。上海卓岚串口服务器可支持虚拟串口协议,使得您无需改变原有的 PC 软件, 提供串口和以太网口之间的透明数据转化功能,支持 DHCP 和 DNS。是全双工、不丢包串口服务器。
上海卓岚生产 RS232/485/422 三合一串口、RS232、RS485、RS485/422、RS232/485 等各种串口组合的全系列产品。另外 还有多串口、可二次开发的串口服务器。可满足全方位的应用。卓岚串口服务器广泛应用于门禁/考勤、医疗应用、远程监控、计 算机机房管理以及变电所管理。
RS232/RS485/RS422 转 TCP/IP 型串口服务器

单片机模拟串口

随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数据后进行处理、存储,再主动或被动上报给管理站。这种情况下下,采集会需要一个串口,上报又需要另一个串口,这就要求单片机具有双串口的功能,但我们知道一般的51系列只提供一个串口,那么另一个串口只能靠程序模拟。 本文所说的模拟串口,就是利用51的两个输入输出引脚如P1.0和P1.1,置1或0分别代表高低电平,也就是串口通信中所说的位,如起始位用低电平,则将其置0,停止位为高电平,则将其置1,各种数据位和校验位则根据情况置1或置0。至于串口通信的波特率,说到底只是每位电平持续的时间,波特率越高,持续的时间越短。如波特率为9600BPS,即每一位传送时间为1000ms/9600=0.104ms,即位与位之间的延时为为0.104毫秒。单片机的延时是通过执行若干条指令来达到目的的,因为每条指令为1-3个指令周期,可即是通过若干个指令周期来进行延时的,单片机常用11.0592M的的晶振,现在我要告诉你这个奇怪数字的来历。用此频率则每个指令周期的时间为(12/11.0592)us,那么波特率为9600BPS每位要间融多少个指令周期呢?指令周期s=(1000000/9600)/(12/11.0592)=96,刚好为一整数,如果为4800BPS则为96x2=192,如为19200BPS则为48,别的波特率就不算了,都刚好为整数个指令周期,妙吧。至于别的晶振频率大家自已去算吧。现在就以11.0592M的晶振为例,谈谈三种模拟串口的方法。 方法一:延时法 通过上述计算大家知道,串口的每位需延时0.104秒,中间可执行96个指令周期。 #define uchar unsigned char sbit P1_0 = 0x90; sbit P1_1 = 0x91; sbit P1_2 = 0x92; #define RXD P1_0 #define TXD P1_1 #define WRDYN 44 //写延时 #define RDDYN 43 //读延时 //往串口写一个字节 void WByte(uchar input) { uchar i=8; TXD=(bit)0; //发送启始 位 Delay2cp(39); //发送8位数据位 while(i--) { TXD=(bit)(input&0x01); //先传低位 Delay2cp(36); input=input>>1; } //发送校验位(无)

基于PL2303的USB转串口制作(精)

基于PL2303的USB转串口制作 串口模块USB转TTL模块DVD升级路由/MODEN等刷机线STC单片机程序下载其它串行通迅领域. (东西虽小用途却很广泛 对于一些学校、工业、科研客户来说,电脑的串口非常重要,很多设备都采用串口和电脑端软件配接,很多电路模块可以非常直观方便地利用串口调试软件进行调试,很多仪器必须通过串口进行通讯和数据交换。 但是目前笔记本电脑因为空间的限制和其他方面考虑的原因都没有串口,甚至一些台式电脑也取消了串口配置,这让我们迫切需要串口的客户非常苦恼。 USB转串口模块全称为USB to Serial port Module,它可以实现将USB接口虚拟成一个串口解决客户无串口的苦恼。现在市面上的USB转串品的设备可谓是琳琅满目,质量也是参差不齐。造成这种现象的根本原因就在于控制芯片的不同。现在USB转串口桥接芯片有很多,比如CP2102、FT232、PL2303等等。但并非每一种芯片都可以用作ISP下载。经过测试CP2102是不能下载的,而FT232可以下载,但其价格实在不菲。最为适中的就是台湾生产的PL2303,可以稳定下载,并可以支持多种操作系统。 PL2303HX采用28脚贴片SOIC封装,工作频率为12MHZ,符合USB 1.1通信协议,可以直接将USB信号转换成串口信号,波特率从75~1228800,有22种波特率可以选择,并支持5、6、7、8、16共5种数据比特位,是一款相当不错的USB转串口芯片。 PL2303模块可以方便地利用杜邦免焊接连接线接入电路,只要插接3根线,一根串口入、一根串口出、一根地线。 用途: 1、STC单片机程序下载 2、单片机/开发板串口通讯实验

用单片机普通I_O口模拟串口的一种方法

电子报/2005年/12月/18日/第011版 单片机应用 用单片机普通I/O口模拟串口的一种方法 南昌李春玲 MCS-51系列单片机片内有一个串行I/O端口,通过引脚RXD (P3.0)和TXD(P3.1)与外设进行全双工的串行异步通信。串行端口有四种基本工作方式:方式0主要用于外接移位寄存器,以扩展单片机的I/O接口;方式1多用于双机之间或与外设的通信;方式2、方式3除有方式1的功能外,还可用作主从式多机通信,构成分布式多机系统。 在应用系统中,若需要多个串口,且各串口工作方式要求不同,如:通信波特率不一样,通常的方法是扩展一片可编程串行接口芯片,如8251或8250,但这样增加了硬件开销,且需要占用较多的I/O资源。本文介绍一种用单片机普通I/O口模拟串口的方法。 以A、B两个单片机之间的串行通信为例,电路如图1所示。使用了P1口中的3条普通I/O口,其中P1.0为串行发送端(模拟TXD),P1.1为串行接收端(模拟RXD),P1.2作为对方单片机的中断申请信号INTO的输入线(模拟内部串行口中断源RI/TI)。 串行通信信息帧的发送与接收由软件编程实现。工作过程如下(以A机发送、B机接收为例): 1.A机从P1.2口输出中断申请信号。 2.A机通过P1.0口发送一帧模拟信息。串行通信采用异步传送格式:包括1位起始位(低电平)、7或8位数据编码、1位奇偶校验位(可不要)、1位停止位(高电平)。串行通信中,如果数据传送的波特率为1200bps,则每位信息维持时间为0.833ms。 程序段TTXD完成上述发送功能。信息帧为10位(1位起始位、8位数据编码、无奇偶校验位、1位停止位)。 3.B机接收到INTO的中断申请信号后,自动进入中断服务程序,同步进行模拟异步接收。当P1.1口从高变低时,说明一帧开始,然后依次接收8位数据编码,采样数据在每一位的中间进行,故接收与发送要错开半位,最后检测到高电平后,跳出中断。一次中断完成一帧信息的接收,获得一个字节的数据。 INTO的中断服务程序段RRXD完成上述接收功能。 程序清单如下: TTXD:MOV A,#DATA;发送字节送A CLR P1.2;送中断申请信号 SETB P1.0 LCALL DELAY417

网口转串口--485转网口模块

网口转串口-485 转网口模块
ZLSN 系列嵌入式设备联网模块是串口到 TCP/IP 的嵌入式协议转化模块, 提供串口到 TCP/IP 网络的双向以太网透明传输。 卓岚 ZLS
系列嵌入式设备联网模块是业界第一款全双工、 不间断、 低成本嵌入式设备联网模块, 即在高达 115200bsp 的速率下串口到 TCP/I 可实现单片机联网和设备网络化升级,广泛应用于安防、工业自动化、银行系统、楼宇自控、智能交通等领域。 串口转以太网模块——TTL 电平带 RJ45 联网模块
和 TCP/IP 到串口同时进行工作,收发数据可以不间断地进行,且不丢失一个字节。具有功能强大、价格经济、技术资料全面特点
型号:ZLSN3000 名称:TTL 电平带 RJ45 联网模块 用法:只需通过排线将 RXD、TXD 和用户电路板 MCU(例如 51 单片机)串口连接, 即可使用。 选型:使用 ZLSN2000 之前,可先用 ZLSN3000 测试模块性能,用户无需制板即可与 模块连接,方便快捷。适合已有串口设备立即联网升级。
型号:ZLSN3002 名称:TTL 电平带 RJ45 联网模块 用法:只需通过排线将 RXD、TXD 和用户电路板 MCU(例如 51 单片机)串口连接, 即可使用。 选型:与 ZLSN3000 相比,ZLSN3001 速度更快,但是电流从 40mA 变为 100mA。另外 厚度厚 3mm。
串口转以太网模块——RS232 联网模块
型号:ZLSN2100 名称:RS232 联网模块 用法:可 9V~24V 电源,实现 DB9 接口(公头)RS232 到以太网的转化。 选型:需要 RS232 转以太网的普通用户请选择 ZLSN2100。

串行口的模拟仿真

10.4.6 串行口的模拟仿真 利用模拟仿真,可以模拟单片机同机发送和接收程序。 例10-7串口采用查询方式,把从片内RAM的30H单元开始的8个数据串行发送到片内RAM的40H开始的单元。 程序清单: ORG 0000H MOV SCON,#90H ;串口工作方式2,允许接收 MOV PCON,#00H ;SMOD=0 M0V R0,#30H ;源字符串首地址 MOV R1,#40H ;接收字符串首地址 MOV R2,#08H ;字符串长度 LOOP:MOV A,@R0 ;取数据 MOV SBUF,A ;发送 JNB TI,$ ;等待发送完一帧字符 CLR TI ;清发送标志位 INC R0 ;修改地址 JNB RI,$ ;等待接收完一帧字符 CLR RI ;清接收标志位 MOV A.SBUF ;接收字符 M0V @R1,A ;存数据 INC R1 DJNZ R2,LOOP ;传送8个数据 END 模拟仿真步骤如下: ①启动Medwin仿真软件,在编辑窗口中输入例10-7中的程序,单击“产生代码并装入”快捷键,编译/连接程序,打开菜单“外围部件→串行口”,把串口状态窗口调入屏幕,如图10-23 所示。

图10-23 串口模式 ②打开菜单“查看→数据区Data”,调入数据区窗口,单击列数,选择存储器排列为8列,从30H单元开始,输入8个数据。 ③打开菜单“窗口→纵向平铺窗口”,使寄存器窗口、数据窗口、程序窗口纵向平铺。 ④按F8键单步运行程序,则程序运行在JNB TI,$处,等待一帧字符发送结束。可人工设定发送结束标志,即在图10-23的中断标志复选框TI前画“√”,再按F8键,程序继续运行。 ⑤程序运行在JNB RI,$处,等待接收一帧字符结束。可人工设定接收结束标志,即在图10-23的中断标志复选框RI前画“√”,再按F8键,程序继续运行,则一帧字符装入40H开始单元。 ⑥重复上述步骤,直至全部数据传送完。

单片机IO口模拟串口程序(发送+接收)

前一阵一直在做单片机的程序, 由于串口不够,需要用10 口来模拟出一个串口。 经过若干曲 折并参考了一些现有的资料,基本上完成了。现在将完整的测试程序,以及其中一些需要总 结的部分 贴出来。 程序硬件平台:11.0592M 晶振,STC 单片机(兼容51) /*************************************************************** * 在单片机上模拟了一个串口,使用 P2.1作为发送端 * 把单片机中存放的数据通过 P2.1作为串口 TXD 发送出去 ***************************************************************/ #in elude #i nclude #in clude typedef unsigned char uchar; int i; uchar code in fo[]= { 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5 5 }; // SCON: serail mode 1,8-bit UART // T0工作在方式1,十六位定时 // SMOD=1; 0xFE; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率为 2400bps fosc=11.0592MHz TL0 = 0x7F; II 2400bps fosc=11.0592MHz II TH0 = 0xFD; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率 为 2400bps fosc=18.432MHz II TL0 = 0x7F; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率为 2400bps fosc=18.432MHz } void WaitTF0( void ) { sbit n ewTXD = P2A 1; 〃模拟串口的发送端设为 P2.1 void Uartlnit() { SCON = 0x50; TMOD |= 0x21; PCON |= 0x80; TH0 定时器0初始值,延时417us ,目的是令模拟串口的波特率为

IO模拟串口通信

单片机IO口模拟串口实现数据通信 1设计任务与要求 本设计为单片机IO口模拟串口实现数据通信,它可以用单片机的IO口实现单片机RX和TX的功能。具体要求如下: ●用单片机的P3.4和P3.5分别模拟RX和TX的串行通信功能,能够接收 和发送数据。 ●通过PC机的键盘输入字符,并传送给单片机,由单片机接收后,发达给 PC机,由PC机加以显示。 ●单片机接收由键盘输入的数据后,如果是数字,则由数码管显示,并由 LED灯表示其ASCII码,如果是其他字符,则由仅由LED灯显示其ASCII 码。 2总体方案设计 2.1串行通信的方式设计 本设计要求用单片机的IO口来模拟串口的串行通信,因此有必要先简要介绍一下单片机的IO和通信的基本原理与串行口P3.0和P3.1。 2.1.1并行I/O口 MCS-51单片机共有4个双向的8位并行I/O端口(Port),分别记作P0-P3,共有32根口线,各口的每一位均由锁存器、输出驱动器和输入缓冲器所组成。实际上P0-P3已被归入特殊功能寄存器之列。这四个口除了按字节寻址以外,还可以按位寻址。由于它们在结构上有一些差异,故各口的性质和功能有一些差异。 P0口是双向8位三态I/O口,此口为地址总线(低8位)及数据总线分时复用口,可驱动8个LS型TTL负载。P1口是8位准双向I/O口,可驱动4个LS 型负载。P2口是8位准双向I/O口,与地址总线(高8位)复用,可驱动4个LS型TTL负载。P3口是8位准双向I/O口,是双功能复用口,可驱动4个LS 型TTL负载。P1口、P2口、P3口各I/O口线片内均有固定的上拉电阻,当这3个准双向I/O口做输入口使用时,要向该口先写“1”,另外准双向I/O口无高阻的“浮空”状态,故称为双向三态I/O 口。

STC单片机虚拟串口发送程序(超简单)

STC单片机(STC12C5A32S)虚拟串口发送程序 //虚拟串口发送子函数 void Uart(uint8 a) { ACC=a; //TXD3是已经定义的任意的发送端口 TR1=1; TXD3=0; //发送起始位 while(TF1==0); TF1=0; //TF1必须清零,因为只有启用T1中断才会自动清零 TXD3=ACC0; //发送8个位也可以用移位来发送,ACC0-ACC7也必须先定义 while(TF1==0); //表示ACC的8个位,如果用移位发送,就不用这样定义。 TF1=0; TXD3=ACC1; while(TF1==0); TF1=0; TXD3=ACC2; while(TF1==0); TF1=0; TXD3=ACC3; while(TF1==0); TF1=0; TXD3=ACC4; while(TF1==0); TF1=0; TXD3=ACC5; while(TF1==0); TF1=0; TXD3=ACC6; while(TF1==0); TF1=0; TXD3=ACC7; while(TF1==0); TF1=0; TXD3=1; //发送停止位 while(TF1==0); TF1=0; TR1=0; } 该子函数使用T1定时器,T0也可以。采用8位自动重装,重装值为A0 Main() { TMOD = 0x21; //T0:模式1,16位定时器。T1:模式2,8位定时器,自动重装AUXR &= 0x3f; //定时器0和定时器1与普通8051定时器一样(不同的单片机设置可能

不同) TL1 = 0xa0; //虚拟串口波特率:9600 TH1 = 0xa0; ET0 = 1; ET1 = 0; //T1中断一定不要使用,要不接收会错误 TR0 = 1; TR1 = 0; Uart(0xaa); //0xaa是发送的数据,如果接收有误,在发送一个字节后可加点延时//延时 While(1); //具体程序此处省略 } 注:因本人实验的硬件不需要模拟串口来接收数据,故没给出虚拟串口接收程序。 以上程序已验证成功。

蓝牙转串口HC06模块

蓝牙转串口HC-06 无线模块 产品描述: 1、采用CSR主流蓝牙芯片,蓝牙协议标准 2、串口模块工作电压。 3、波特率为1200,2400,4800,9600,19200,38400,57600,115200用户可设置 4、核心模块尺寸大小为:28mm x 15 mm x 。 5、工作电流:40MA 6、休眠电流:小于1MA 7、用于GPS导航系统,水电煤气抄表系统,工业现场采控系统。 8、可以与蓝牙笔记本电脑、电脑加蓝牙适配器、PDA等设备进行无缝连接 【本模块分主机和从机,主机能和从机配对通信,从机与从机之间或主机与主机之间不能通信,从机能和电脑、手机等的蓝牙配对通信,购买时默认为从机,需要主机需要注明】 【主从区分方法:1,如果芯片上没有注明,则灯闪慢的是主,快的是从;2,2009年9月份开始,所有出厂主机都将在IC上打一个勾勾或贴有“主”字,没有勾勾或没有贴“主”字的就是从机。可以从蓝牙的地址上获得出厂日期】

一、出厂默认参数: 从机,波特率:9600,N,8,1。配对密码:1234;如要需要主机模式,请下单时注明。 二、AT命令集如下: 1、测试通讯 发送:AT(返回OK,一秒左右发一次) 返回:OK 2、改蓝牙串口通讯波特率 发送:AT+BAUD1 返回:OK1200 发送:AT+BAUD2 返回:OK2400 …… 2---------2400 3---------4800

4---------9600 5---------19200 6---------38400 7---------57600 8---------115200 9---------230400 A---------460800 B---------921600 C---------1382400 不建议用在超过115200的波特率,信号的干扰会使系统不稳定。 设置超过115200后用电脑无法使用,要用单片机编程于高于115200才能使用此波特率和重新发AT命令设低波特率 用AT命令设好波特率后,下次上电使用不需再设,可以掉电保存波特率。 3、改蓝牙名称 发送:AT+NAMEname 返回:OKname 参数name:所要设置的当前名称,即蓝牙被搜索到的名称。20个字符以内。 例:发送AT+NAMEbill_gates 返回OKname 这时蓝牙名称改为bill_gates 参数可以掉电保存,只需修改一次。PDA端刷新服务可以看到更改后的蓝牙名称。 4、改蓝牙配对密码 发送:AT+PINxxxx 返回:OKsetpin 参数xxxx:所要设置的配对密码,4个字节,此命令可用于从机或主机。从机则是适配器或手机弹出要求输入配对密码窗口时,则手工输入此参数就可以连接从

51单片机IO口模拟串口通讯C源程序

51单片机IO口模拟串口通讯C源程序 #include 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

51单片机模拟spi串行接口程序

51单片机模拟spi串行接口程序 51单片机模拟spi串行接口程序,在keilc51下编写 sbit CS=P3^5; sbit CLK= P1^5; sbit DataI=P1^7; sbit DataO=P1^6; #define SD_Disable() CS=1 //片选关 #define SD_Enable() CS=0 //片选开 unsigned char SPI_TransferByte(unsigned char val) { unsigned char BitCounter; for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0; DataI=0; // write if(val&0x80) DataI=1; val<<=1; CLK=1; if(DataO)val|=1; // read } CLK=0; return val; }sbit CLK= P1^5; sbit DataI=P1^7;

sbit DataO=P1^6; #define SD_Disable() CS=1 //片选关 #define SD_Enable() CS=0 //片选开 unsigned char SPI_TransferByte(unsigned char val) { unsigned char BitCounter; for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0; DataI=0; // write if(val&0x80) DataI=1; val<<=1; CLK=1; if(DataO)val|=1; // read } CLK=0; return val; } sbit CLK= P1^5; sbit DataI=P1^7; sbit DataO=P1^6; #define SD_Disable() CS=1 //片选关 #define SD_Enable() CS=0 //片选开

51单片机汇编模拟串口通信程序

51单片机汇编模拟串口通信程序 T2作为波特率控制UART_RXD 是硬中断0或1口,如果能进入中断,说明该线有一个起始位产生,进入中断后调 用下面的接收程序。退出硬中断之前还需要将硬中断标志重新复位。 UART_TXD是任何其它IO即可。 UART_SEND: PUSH IE PUSH DPH PUSH DPL PUSH PSW PUSH 00H PUSH ACC CLR EA SETB UART_TXD ;START BIT MOV R0,A CLR TR2 ;TR2置1,计数器2启动,时间计数启动。 MOV A,RCAP2L;计数器2重新装载值 MOV TL2,A ;置计数器2初值;T2需要重新装载 MOV A,DPH MOV A,RCAP2H MOV TH2,A MOV A,R0 SETB TR2 ;TR2置1,计数器 JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 CLR UART_TXD ;START BIT JNB TF2,$

CLR TF2 JNB TF2,$ CLR TF2 MOV R0,#08H UART_SEND_LOOP: RRC A MOV UART_TXD,C ;8 BIT JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 DJNZ R0,UART_SEND_LOOP SETB UART_TXD ;END BIT JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 POP ACC POP 00H POP PSW POP DPL POP DPH POP IE RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; UART_REC: PUSH IE PUSH DPH PUSH DPL CLR EA

用定时器 T0 或 T1 模拟串行口程序

/************************************************************************* 用定时器T0 或T1 模拟串行口程序。 最高波特率(12 clock): 本程序收、发波特率相同。 11.059MHz -- 最高波特率收: 9600, 最低波特率:300 30.000MHz -- 最高波特率收: 28800 最低波特率:300 40.000MHz -- 最高波特率收: 38400 最低波特率:300 ... 使用说明: 1. 本程序使用一个定时器和任意2 个I/O 口模拟一个串行口。 2. 1位起始位,8位数据位,1位停止位。发数据位时先发低位。 3. 支持半双工通讯。收、发波特率相同。 4. 应把定时器中断优先级设置为最高级。 5. 本程序每接收一个字节后就把它放到一个队列缓冲区中(也可使用环行缓冲区), 待缓冲区满后,将缓冲区中的内容原样发回。这是为了测试多字节连续收发的 能力和简化程序。实际应用中应防止缓冲区溢出。 6. 由接收转换到发送时要先调用soft_send_enable (); 由发送转换到接收时要先调用 soft_receive_enable ()。 7. 发送最后一个字节后如果要立刻转为接收,必须等待最后一个字节后发送完毕 w hile ( rs_f_TI == 0) ; // 等待最后一个字节发送完毕 ************************************************************************** 编程说明: ---------------- 发送: 由接收转换到发送时要先调用soft_send_enable (), 它为发送做初始化的工作。 以后就可以调用rs_send_byte () 启动发送一个字节的过程。 发送口平时为高电平,rs_send_byte ()函数使发送口变为低电平开始发送起始位; 同时设置和启动定时器,为发送数据位在预定的时刻产生定时器中断。发送数据位和停止位都在定时器的中断服务程序中进行。 中断服务程序中处理4 种情况:发送数据位、发送停止位、发送完毕、处理错误。---------------- 接收: 由发送转换到接收时要先调用soft_receive_enable (), 它为接收做初始化的工 作。定时器以3 到4 倍波特率的频率产生中断(参见rs_TE ST0 的定义)检测P C 机发送的起始位。一旦检测到起始位,立刻把定时器产生中断的频率调整到与波特率相同,准备在下一个定时器中断中接收第1 个数据位。 中断服务程序中处理以下情况: 1. 收到的是P C 机发送的起始位: 调整定时器产生中断的频率与波特率相同。 2. 收到第8 位数据位: 存储接收到的字节。 3. 收到第1--7 位数据位: 存储到收、发移位暂存器。 4. 收到停止位: 调用soft_recei v e_enable(),检测PC 机发出的下一个起始位。 5. 处理出错的情况。 **************************************************************************/

利用VIRTUAL TERMINAL模拟单片机串口收发实验

利用VIRTUAL TERMINAL模拟单片机串口收发实验 程序 #include //包含头文件 //毫秒级延时函数 void delay(unsigned int x) { unsigned char i; while(x--) { for(i=0;i<120;i++); } } //字符发送函数 void putchar(unsigned char data1) { SBUF=data1; //将待发送的字符送入发送缓冲器 while(TI==0); //等待发送完成 TI=0; //发送中断标志请0 } //字符串发送函数 void putstring(unsigned char *dat) { while(*dat!='\0') //判断字符串是否发送完毕 { putchar(*dat); //发送单个字符 dat++; //字符地址加1,指向先下一个字符 delay(5); } } //主函数 void main(void) { unsigned char c=0; SCON=0x50; //串口方式1 ,允许接收 TMOD=0x20; //T1工作于方式2 PCON=0x00; //波特率不倍增 TL1=0xfd; //波特率设置 TH1=0xfd; //

EA=1; //开总中断 ES=1; //开串口接收中断 //TI = 0; TR1=1; //定时器开启 delay(200); putstring("abc\r\n"); //串口向终端发送字符串,结尾处回车换行putstring("----------------------\r\n"); delay(50); while(1) { } } // void revdata(void) interrupt 4 { unsigned char temp; if(RI==0) return; //如果没有接收中断标志,返回 ES=0; //关闭串口中断 RI=0; //清串行中断标志位 temp=SBUF; //接收缓冲器中的字符 putchar(temp); //将接收的字符发送出去 ES=1; //开启串口中断 }

串口转网口模块--网口转串口模块

串口转网口模块—网口转串口模块 本文介绍在串口转网口模块中如何使用各种TCP工作模式,根据不同的应用如何进行灵活选择TCP客户端、TCP服务器、UDP、UDP组播。然后介绍如何用zlvircom配置串口转TCP/IP并和SocketDlgTest程序通信。 1.TCP&UDP工作模式 TCP/IP是网际互联的基本协议,TCP/IP实际涉及网络协议的两层:网络层和传输层。IP属于网络层,而TCP属于传输层,实际上TCP/IP协议还有另外部分协议即UDP协议,UDP协议和TCP协议共同组成了TCP/IP协议的传输层。而TCP协议有具有客户端和服务端两种工作模式。在RS232/RS485联网模块应用中,主要在UDP、TCP客户端、TCP服务器3种模式之间进行选择。如图1所示。 1.1 TCP和UDP的区别和比较 图1.TCP&UDP各种工作模式演示 TCP(Transmission Control Protocol)是可靠连接协议。串口转网口模块,我们可以用打电话来类比TCP协议。使用TCP协议进行数据传输,首先需要建立连接;就如在通电话前需要先拨通电话一样。TCP是可靠传输的,即你传输的数据有误或者丢失,则会自动重新传输以保证数据正确;这正如打电话的时候,如果信号不好,收方会说:“听不清,请再说一遍。” UDP(User Datagram Protocol)是报文传输协议。我们可以用手机短信来类比UDP协议。使用UDP协议,你无需先征得对方的同意(无需先建立连接),可以随时发送。但是UDP协议是不可靠传输的,你发送出去的数据不能够保证正确地被对方收到; 所谓“正确接收”,它包括3方面的内容:1.丢失问题:数据丢失后可以重传。2.误码问题:数据内容错误能被检测并重新发送。3.顺序问题:UDP 无法保证数据的顺序,例如在发送长文字的短信的时候,有可能后半部分短信内容先收到,然后再收到前半部分短信内容。这给接收者较大的迷惑,TCP 协议没有这个问题。 UDP协议的也有自身优点。1.简单性、方便性,UDP协议非常类似串口通信,因为串口发送数据本身基于非连接(报文)的。此时在串口转以太网的时候,使用UDP协议符合原来的思维。2.UDP协议具有广播、组播功能,可以实现一对多通信。 表1. TCP与UDP的区别

proteus模拟串行口通信

Proteus仿真——51单片机串口转RS232口 单片机串口是单片机通信的基本途径,可以进行多单片机间的通信,也可以通过接口转换实现与计算机间的通信。其中与计算机通信可以通过计算机的串口(232口)或USB口实现。本文是本人做的一个小实验,内容是在Proteus ISIS中仿真51单片机串口转RS232口,实现单片机通过串行口与计算机通信。 单片机串行口有四种不同的工作方式: 方式0:移位寄存器输入/出方式,波特率固定为:f osc/12。 方式1:10位UART(通用异步接口电路),一帧数据包括1位起始位(0),8位数据位和1位停止位(1)。波特率可变,公式为: 其中X为定时器T1的初值,当然我们一般都是先确定波特率然后算初值的,所以我们更想知道X等于多少。把上面的式子变一下就可以得到初值X了: 方式2/3:这两种方式都是11位的UART,它们比方式1多了一个第9位数据。 他们不同的是:方式2波特率固定为f osc/32或f osc/64,由SMOD位决定。 方式3:波特率同方式1; 本例中采用方式1,波特率为9600(计算机默认值),根据波特率算出初值X=253(定时器T1工作方式2)。我们以9600的波特率向计算机循环发送00H;

proteus中的接口转换电路如下: 计算机端用串口调试软件接收; 不过我们要说明一下,为了实现串口的连接,我们要用计算机串口模拟软件模拟出两个232口,模拟出的这两个232口是设计为连接着的。

我们用Virtual Serial Port Driv er这个软件(到网上去搜,很容易找到)。安装好后打开,界面如下: 在上图里可以看出我的机器有一个物理口COM1,现在已经模拟出了两个口COM2和COM3,而且他们是一组是连接着的。我们在proteus中的compim默认是连到com1的,在我们这边改成com2,然后在串口调试软件中测试com3,如下两个图

MBus转串口模块(TH100)说明书

TH-MR100使用手册 TH-MR100概述 为了便于连接符合EN1434、EN13757等标准的总线设备,我公司研发了TH-MR100 设备,该设备支持符合欧盟标准的M-BUS 协议设备的转换。通过TH-MR100,M-BUS 电平转换为RS232电平,PC 机或其它设备可以通过串口直接访问M-BUS设备。TH-MR100实物图如下: 图1:TH-MR100实物图

?采用冗余设计方式,稳定工作范围宽 ?输出短路、过载保护,输入防反接设计,更安全可靠?供电:24VDC ?外壳:金属 ?工作温度:-10℃~70℃ ?存储温度:-40℃~125℃ ?工作湿度:5%~95%,无凝露 ?通信速率:300bps~9600bps,流控自适应 ?负载能力:5 ?指示灯:电源、过载短路、数据通信 ?外形尺寸(mm):105*53*30 ?电磁兼容:轻工业级标准 ?串口方式:RS232 ?支持所有进口热表解码;提供国产表解码支持 ?上位机软件免费提供

图2 TH-MR100外观图 图 3 TH-MR100模块简单控制接线图

RS232为DB9母头,可与PC直连通信,其线序为: 2:TXD(接PC或控制器的RXD) 3:RXD(接PC或控制器的TXD) 5:GND(接PC或控制器的GND) 使用情况: 1、刚上电时,Power灯亮,如不亮请检查电源是否正常,COM灯不亮,如常亮 则说明M+与M-之间短路。 2、在通讯过程中,COM灯不断闪烁,说明上位机在读设备的数据,读数完毕后, COM灯恢复熄灭。 3、如果模块过载,COM灯亮,此时需要断电一段时间,减小负载后,再给模块 重新上电才能正常通讯。 4、M-BUS 的传输距离可达1km-2km,与挂接仪表的波特率有关,波特率越低 传输距离越远,如果要传输2km,必须把波特率设置成300bps。M-BUS 标准要求,传输线阻必须小于90 欧姆,否则对模块的负载能力有影响。 5、信号M+和M-不能短路,短路后需要断电、重新上电后,模块才能恢复正 常工作状态。 6、TH-MR100能够承受长时间的M+/M-之间的短路,只要将短路故障排除,数 秒之内模块即可恢复正常工作。

相关主题
文本预览
相关文档 最新文档