单片机8051A串行通讯.doc_第1页
单片机8051A串行通讯.doc_第2页
单片机8051A串行通讯.doc_第3页
单片机8051A串行通讯.doc_第4页
单片机8051A串行通讯.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8051A串行通讯一、 实验要求利用8088/86CPU控制8251A可编程串行通讯控制器,实现两个实验台之间的串行通讯。其中一个实验台作为发送方。发送方读入按键值,并发送给接收方,接收方收集到数据后在LED上显示。二、 实验目的1、 掌握8088/86实验串行口通讯的方法。2、 了解实现串行通讯的硬件环境、数据格式的协议、数据的交换的协议。3、 学习串行口通讯程序编写方法。三、 实验电路1、显示电路如图1所示图1:显示电路2、键盘电路如图2所示图2:键盘电路3、实验连接方法如图3所示图3:实验的连接图及方法四、实验说明1、8088/86CPU通过外接的8251可编程串行控制器实现串口通信。通过8251的控制口写入其工作方式或读入当前状态,通过数据口发送或接受串行口数据。本实验是通过查询方式和输入输出串行数据。2、通讯双方的RXD、TXD信号本应经过电平转换后再进行交叉相连,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。也可以将本机的TXD接到RXD,这样按下的键就会在本机的LED上显示。3、若想与标准的RS232设备通信,就要做电平转换,输出时将TTL电平换成RS232电平,输入时要将RS2332电平换成TTL电平。可以将仿真板上的RXD、TXD信号接到实验板上的“用户串行楼接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。4、将分频器的Fin接到4MHz脉冲发生器,就可以得到1MHz和250KHz脉冲。五、实验框图主程序六、实验程序如下所示#define LEDLen 6#define IN_KEY 0x8001#define OUTBIT 0x8002#define OUTSEG 0x8004#define CS8251D 0xd000#define CS8251C 0xd001extern unsigned char IN(unsigned int port);extern void OUT(unsigned int port, unsigned char v);unsigned char LEDBufLEDLen; /* 显示缓冲 */unsigned char const LEDMAP = /* 八段管显示码 */ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71;unsigned char const KeyTable = /* 键码定义 */ 0x16, 0x15, 0x14, 0xff, 0x13, 0x12, 0x11, 0x10, 0x0d, 0x0c, 0x0b, 0x0a, 0x0e, 0x03, 0x06, 0x09, 0x0f, 0x02, 0x05, 0x08, 0x00, 0x01, 0x04, 0x07;void Delay(unsigned char CNT) unsigned char i; while (CNT- !=0) for (i=100; i !=0; i-);void DisplayLED() unsigned char i, j, k; unsigned char Pos; unsigned char LED; Pos = 0x20; /* 从左边开始显示 */ for (i = 0; i = 1; /* 显示下一位 */ unsigned char TestKey() OUT(OUTBIT, 0); /* 输出线置为0 */ return (IN(IN_KEY) & 0x0f); /* 读入键状态 (高四位不用) */unsigned char GetKey() unsigned char Pos; unsigned char i; unsigned char j; unsigned char k; i = 6; Pos = 0x20; /* 找出键所在列 */ do OUT(OUTBIT, Pos); Pos = 1; k = IN(IN_KEY) & 0x0f; while (-i != 0) & (k = 0); /* 键值 = 列 X 4 + 行 */ if (k != 0) i *= 4; if (k & 2) i += 1; else if (k & 4) i += 2; else if (k & 8) i += 3; OUT(OUTBIT, 0); do Delay(10); while (TestKey(); /* 等键释放 */ return(KeyTablei); /* 取出键码 */ else return(0xff);void IInit() OUT(CS8251C,0x4f); /* 1停止位,无校验,8数据位 */ OUT(CS8251C,0x15); /* 清错误标志,允许接收发送 */void Send(unsigned char TBuf) unsigned ss; OUT(CS8251C,0x15); /* 清错误标志,允许接收发送 */ while( !(IN(CS8251C) & 0x1); /* 发送缓冲是否为空 */ OUT(CS8251D,TBuf); /* 送出数据库 */unsigned char Receive() while( !(IN(CS8251C) & 0x2); /* 是否已收到数据 */ return (IN(CS8251D); /* 读入数据 */void main() unsigned char RCVBUF; IInit(); LEDBuf0 = 0xff; LEDBuf1 = 0xff; LEDBuf2 = 0xff; LEDBuf3 = 0xff; LEDBuf4 = 0x00; LEDBuf5 = 0x00; while (1) DisplayLED(); /* 显示 */ if(!(IN(CS8251C) & 0x2) /* 是否收到数据 */ if (TestKey() /* 如果有键按下 */ Send(GetKey(); /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论