基于8250的多机通信设计
D1 | D2 | D3 | D4 | D5 | D6 | D7 | 1 | 停止位 |
若要求8250的奇偶位为0,只需执行
MOV DX,3FBH
MOV AL,3BH
OUT DX,AL
这三条语句,此时帧格式为:
起始位 | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | 0 | 停止位 |
显然,前者可作为多机通信中的地址帧,而后者作为数据帧。
4﹒ PC机非标准波特率的设置
8051单片机系统时钟绝大多数情况下都采用6MHz的石英晶体振荡器,其串行口的波特率是由其内部定时器TH1(8位)决定的,具体计算公式为:
Baud=(fosc﹡2SMOD)/(32﹡12﹡(256-TH1))=(15625﹡2SMOD)/(256-TH1)
式中SMOD可编程控制,TH1的不同值所确定的波特率不同。
如果用BASIC或直接调用ROM BIOS INT14(串行口中断),那么只能设置几种标准的波特率。在这种标准波特率下,8051很难实现,如4800的波特率,对使用6MHz晶振的单片机就无法实现。然而在实际应用中,不大可能只为满足标准波特率要求而选择晶振。另一方面,在保证可靠通信的前提下,总是希望通信速度尽可能的快。所以,可以通过直接对8250的除数锁存器编程,以取得非标准波特率。
假设多机通信波特率计算值为2400,由于单片机无法实现,因此可设计为1953,在单片机上令TH1=248且SMOD=0,而在PC机上令除数等于59,这样便可以实现多机通信。
5﹒ 对8250的编程
仅就8250而言,异步串行通信编程步骤如下:
step1:设定通信的规程,如波特率、奇偶校验方式、数据格式、数据字节长度等;
step2:读取通信线路(或MODEM)的状态,判断是否可以进行通信;
step3:送出(或接收)一个字节;
step4:重复step2和step3直到通信完毕。
当允许中断时,CPU送出(或接收)一个字节后,并不需要不断查询控制器的状态,而可转向执行其他任务。当有中断信号INT4发生并响应后,再按上述step2、step3第三步处理即可。
应用8250进行串行通信时,首先要对其初始化,即设置波特率、通信采用的数据格式、是否使用中断、是否自测试操作等。初始化后,则可采取程序查询方式或中断方式进行通信。
8250的初始化一般分三步:
step1:设置波特率(假设为1200)
MOV AL,80H
MOV DX,3FBH
OUT DX,,AL
MOV AL,60H
MOV DX,3FBH
OUT DX,AL
MOV AL,00H
MOV DX,3F9H
OUT DX,AL
step2:设置通信数据格式(假设7个数据位,1个停止位,偶校验)
MOV AL,1AH
MOV DX,3FBH
OUT DX,AL
step3:设置操作方式
MOV AL,03H
MOV DX,3FCH
OUT DX,AL;不允许中断输出
MOV DX,3FCH
MOV AL,OBH
OUT DX,AL;允许中断输出
MOV AL,13H
MOV DX,3FCH
OUT DX,AL;自测试工作方式
step4:设置中断允许寄存器
MOV AL,00H
MOV DX,3F9H
OUT DX,AL
6﹒ 本文的创新点
本文的创新点在于:第一,利用可编程异步串行通信接口芯片执行异步串行通信协议以实现通信;第二,通过直接对8250的除数锁存器编程的方法,以取得非标准波特率。
参考文献:
[1] 洪家平. WINDOWS环境下PC机与单片机的通信.北京:《微计算机信息》2005年第三期第70~73页
[2] 李朝青.PC机及单片机数据通信技术.北京:北京航空航天大学出版社,2002.12
[3] 姚志江等.一个8051MCU可综合VHDL模型的完整实现.北京:计算机应用,2000(20)
[4] 李广第.单片机基础.北京:北京航空航天大学出版社,2002.12
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)