8251和8086串口通信输入和输出Proteus仿真

本文详细介绍了基于8251芯片的串口通信模块设计,包括异步串行通信方式的选择,虚拟串口软件的使用,以及通过设置方式字、命令字和状态字来初始化和控制8251芯片的过程。文章还提供了具体的编程实例,展示了如何通过检测RxRDY和TxRDY位来判断数据的接收和发送状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

串口通信模块的设计主要利用的芯片是8251和COMPIN管脚,8251芯片的作用是进行串口通信,COMPIN的作用是模拟串口产生信号,这里还用到了虚拟串口,虚拟串口需要下载一个软件名字叫Virtual Serial Port Driver,如果没有串口助手的话还需要下载串口助手,这里我使用的串口助手是stc-isp这两个软件网上可以下载。本文中使用的是异步串行通信方式。
软件

部分电路图
1.方式字
异步方式:

S2,S1EP,PENL2,L1B2,B1
00无效X0无奇偶校验位00 字符长度为5位01 异步方式 x01
01 1个停止位01奇校验01 字符长度为6位10 异步方式 x16
10 1.5个停止位11偶校验10 字符长度为6位11 异步方式x64
11 字符长度为8位

最后一行与频率的设置有关为波特率系数:
收发时钟频率 = 收发波特率 × 波特率系数
2.命令字:

EHIRRTSERSBRKRxEDTRTxEN
1 启动搜索字符1 内部复位,使8251A回到方式选择格式1使RTS!引脚输出低电平1使错误标志PE,OE,FE均复位1使TxD线变低,发送空白字符,0正常工作1运行接收0禁止接收1 使DTR!引脚输出低电平1允许发送0禁止发送

看起来很复杂使用的时候只需要设置成0001 0101即可,即正常工作,使错误标志复位,允许发送和接收。
3.状态字

DSRSYNDET/BRKDETFEOEPETxERxRDYTxRDY
数据装置准备好同引脚含义帧错误(只用于异步方式)溢出错误奇偶错误同引脚含义同引脚含义发送器准备好时为1

主要需要使用到的是RxRDY和TxRDY位,输入的时候需要检测RxRDY位是否为高电平如果是表示接受了数据,否则没有。输入的时候还可以对FE和OE进行判断接收到的数据是否正确。
同理输出的时候要检测TxRDY位是否为高电平如果是表示准备好了否则是没有准备好,准备好后才能输出。

对于8251进行编程
1.向控制口连续写入3个全0和再写入40h的目的是为了用软件使8251可靠地复位。
2.先写入方式字4Eh,表示使用一个停止位,无校验,字符长度为8,使用异步方式,波特率系数设置为16。
3.写入命令字15h,表示允许接收和发送数据,并且清除错误标志。
4.最后写入状态字,将RsRDY接收准备完成位清零,TxRDY发送准备完成位置1。
初始化完成之后通过8251输入数据时要读入状态字,判断状态字的第二位即RxRDY为是否为高电平,如果为高电平说明接收数据已经准备好可以输出了,否则继续检测。输出数据和输入输入类似。输入时要检测状态字的最低位即TxRDY位是否为1若为1表示已经准备好了,否则表示没有准备好。输入的时钟信号的设置要根据收发波特率和波特率系数决定。书上给出了公式:
收发时钟频率 = 收发波特率 × 波特率系数
收发波特率为1200,波特率系数为16,收发时钟频率TxC和RxC要设置为19.2KHz,时钟信号CLK的频率书上的介绍是对于异步方式,CLK的频率应该比TxC和RxC大4.5倍,因此CLK的频率至少为86.4KHz。波特率系数设置为1的时候不能正常接收,所以最后设置成16。

这里仿真了一个比较简单的,检测输入的为’a’或‘b’点亮响应的数码管,并将‘a’返回给串口助手。
效果输入’a’:
蓝线数据表示发送数据
蓝线数据表示外界向8251发送的数据,红线表示8251接收的数据。
在这里插入图片描述
在这里插入图片描述
这里串口要设置的和虚拟串口中的相同,因为我虚拟串口中使用的COM2和COM3所以这里也这样使用,反过来使用是一样的。波特率可以选择其他的,这里我选择的1200,要注意对应就行了,还有时钟频率要根据公式设置。
仿真电路图

DATAS SEGMENT
    ;此处输入数据段代码 
    IOYO equ 0C400h;对应的端口地址
    MY8255_A equ IOYO+00H*4
    MY8255_B equ IOYO+01H*4
    MY8255_C equ IOYO+02H*4
    MY8255_MODE equ IOYO+03H*4 
    MY8251_com equ 0C460h;控制字口
    MY8251_data equ 0C440h;数据口,相比控制字口C/D为0
    buf1 db 'Receive_a'
    length_buf1 equ $-buf1
    buf2 db 'Receive_b'
    length_buf2 equ $-buf2
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
Init:
	mov dx,MY8255_mode;设置8255为输出方式
	mov al,80h
	out dx,al
	
	mov al,00h
	mov cx,03h
	mov dx,MY8251_com
	;写入三个全0和复位控制字的目的是使8251可靠地复位
Out_0:
	out dx,al;先向控制口写入三个0
	call Revtime
	loop out_0;8251A的控制端口写三个0
	mov al,40h;向控制口写入复位字,使D6位等于0
	out dx,al
	call Revtime
	;写入方式字
	mov al,01001110B;01表示一个停止位,00表示无检验,11表示字符长度为810表示异步方式*16
	out dx,al
	call Revtime
	;写入命令字
	mov al,00010101B;允许接收发送数据,清除错误标志
	out dx,al
	call Revtime
	;写入状态字
	mov dx,MY8251_com
	mov al,00010101B;
	out dx,al;清除出错标志,允许发送
Repeating:
	;call send
	call receive
	jmp repeating
Receive proc near
Wait_receive:
	mov dx,MY8251_com
	in al,dx
	test al,02h
	jz wait_receive
	test al,30h;出错转向出错处理,帧错误和溢出错误
	jnz error
	mov dx,MY8251_data
	in al,dx
	mov dx,MY8255_A
	out dx,al
	cmp al,'a'
    je light_a
	cmp al,'b'
	je light_b
	jmp wait_receive
light_a:
	mov dx,MY8255_A
	mov al,01h
	out dx,al
	lea di,buf1
	mov cx,length_buf1
	call send
	jmp wait_receive
light_b:
	mov dx,MY8255_A
	mov al,02h
	out dx,al
	lea di,buf2
	mov cx,length_buf2
	call send
	jmp wait_receive
Error:
	mov dx,MY8255_B
	mov al,0ffh
	out dx,al
	mov dx,MY8251_com
	mov al,00010101B;
	out dx,al;清除出错标志,允许发送
	jmp wait_receive
	ret
receive endp

Send proc near
	;写入状态字
	mov dx,MY8251_com
	mov al,00010101B;
	out dx,al;清除出错标志,允许发送
Wait_send:
	mov dx,MY8251_com
	in al,dx
	test al,01h;最后一位TxRDY是否为1,为1准备好,否则没有准备好
	call Revtime
	jz wait_send
	
	mov dx,MY8251_data;发送数据时不用延时
	mov al,[di]
	out dx,al
	inc di
	loop Wait_send
	ret
send endp

Revtime proc near
	push cx
	mov cx,02h
D0:	
	loop d0
	pop cx
	ret
revtime endp

    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

这里仿真有两个坑:
第一个是不能将波特率系数设置为1,否则接收检测会一直出错至少设置成16。
第二个是如果同时要输入和输出不能虚拟机中自带的Virtual Box检测,不然不能正常通信,单独输入或输出信号时可以使用。
只有单独输出信号的时候连接成:
反接
注意是反接的。

单独输入信号的时候连接成:
正接
是正接的。
顺序一定要接对,要么就不接不然的话没有不能正常进行输入和输出的通信。

本系统是一款基于STC89C52的GSM智能家居报警系统,能够实现烟雾报警、温度报警、防盗报警,并采用GSM发送警报信息。 1.GSM手机模块TC35 1.1 TC35特点 TC35是Siemeils公司推出的新-代无线通信GSM模块。自带RS232通讯接口,可以方便地与PC机、单片机连机通讯。可以快速、安全、可靠地实现系统方案中的数据、语音传输、短消息服务(Short Message Service)传真。TC35模块的工作电压为3.3—5.5V,可以工作在900MHz1800MHz两个频段,所在频段功耗分别为2w(900M)1w(1800M)。 模块有AT命令集接口,支持文本PDU模式的短消息、第三组的二类传真、以及2.4k,4.8k,9.6k的非透明模式。此外,该模块还具有电话簿功能、多方通话,漫游检测功能,常用工作模式有省电模式、IDLE、TALK等模式。通过独特的40引脚的ZIF连接器,实现电源连接、指令、数据、语音信号、及控制信号的双向传输。通过ZIF连接器及50Ω天线连接器,可分别连接SIM卡支架天线。 TC35模块主要由GSM基带处理器、GSM射频模块、供电模块(ASIC)、闪存、ZIF连接器、天线接口六部分组成。作为TC35的核心,基带处理器主要处理GSM终端内的语音、数据信号,并涵盖了蜂窝射频设备中的所有的模拟数字功能。在不需要额外硬件电路的前提下,可支持FR、HREFR语音信道编码。 1.2使用方法 1)TC35的连机方法 任何一个TC35模块首次使用时,必须要测试其工作是否正常,由于其自带RS232接口,所以我们可以用PC机的串口调试软件进行调试。 a)启动串口调试软件 串口调试软件有许多,可以使用任意一款软件,也可以使用WINDOWS自带的“超级终端"。设置波特率19.2k,这是TC35的默认波特率,首次连机可以从2400~57.6k不断测试,直到TC35有应答。 b)发送“AT” AT 回车 c)改变波特率“AT+IPS=XXXX" TC35的默认波特率是19.2k,实际使用时,可以改成9600或38.4K,方法如下: AT+IPR=9600 回车 d)短信模式的设置 (GSM模块的短信模式有2种。第1种是:TEXT模式;第2种是:PDU模式。PDU模式可以采用unicode编码发送英文、汉字。但合成PDU码比较复杂,而TEXT模式只能发送英文,但无须编码。实际使用可以采用TEXT模式。 设置如下: AT+CMFG=1 回车 e)短信模式简介 SMS是由Etsi所制定的一个规范(GSM 03.40GSM 03.38)。当使用7-bits编码的时候它可以发送最多160个字符;8-bit编码(最多140个字符)。通常无法直接通过手机显示;通常被用来作为数据消息,例如:smart messaging中的图片铃声OTA WAP设置。16-bit信息(最多70个字符)被用来显示Unicode(UCS2)文本信息,可以被大多数的手机所显示。一个以class 0开头的16-bit的文本信息将在某些手机上作为Flash SMS显示(闪烁的SMS警告SMS)。 有两种方式来发送接收SMS信息:使用文本模式或者使用PDU(protocol description unit)模式。文本模式(可能某些手机不支持)实际上也是一种PDU编码的一种表现形式。在显示SMS信息,可能使用不同的字符集不同的编码方式。 f)短信读取方法 AT+CMGR=X回车 如果有短信息,TC35回应: AT+CMGR=1 +CMGR:"REC UNREAD","13307496548",,"04/08/17,22:24:32+02 testOK OK 短信息分析: “test OK"就是短信息内容。 短信息的存储容量与Ic卡有关,序号从1-N。 REC UNREAD":代表短信息未读过。 REC READ" :已读过。 13307496548" :接收的手机号码。 04/08/17,22:24:32+02":短信息发送的时间。 无短信息,TC35回应: AT+CMGR=3 +CMGR:0,,0 g)短信的删除方法 AT+CMGD=1回车 h)短信的发送方法 短信息的发送分成两步: i.发送接收的手机号码,等待应答:“>" AT+CMGS="13307496548"回车(目的地址) TC35回应: AT+CMGS="13307496548" > ii.输入短信息的内容(只能是英文):Test 回车 2)单片机控制TC35的方法 上面介绍了用PC机控制TC35的方法,我们只需设计一个TTL转RS232电平电路,连接到MCU的UART口,另一端直接连接到TC35,并将PC机输出的控制命令转化成单片机输出的指令即可。 2.烟雾报警
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值