- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机8051A串行通讯
8051A串行通讯
实验要求
利用8088/86CPU控制8251A可编程串行通讯控制器,实现两个实验台之间的串行通讯。其中一个实验台作为发送方。发送方读入按键值,并发送给接收方,接收方收集到数据后在LED上显示。
实验目的
掌握8088/86实验串行口通讯的方法。
了解实现串行通讯的硬件环境、数据格式的协议、数据的交换的协议。
学习串行口通讯程序编写方法。
实验电路
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 0xd001
extern unsigned char IN(unsigned int port);
extern void OUT(unsigned int port, unsigned char v);
unsigned char LEDBuf[LEDLen]; /* 显示缓冲 */
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 LEDLen; i++) {
OUT(OUTBIT,0); /* 关所有八段管 */
LED = LEDBuf[i];
OUT(OUTSEG,LED);
OUT(OUTBIT, Pos); /* 显示一位八段管 */
Delay(1);
Pos = 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
文档评论(0)