博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
串行通信实验
阅读量:7293 次
发布时间:2019-06-30

本文共 1640 字,大约阅读时间需要 5 分钟。

一、   实验题目

甲乙两个单片机进行串行通信。采用12MHZ时钟频率晶振频率和方式1进行通信。甲机上有4*4键盘、一个七段数码管,乙机上有两个七段数码管;甲机发出按键显示内容,乙机接收后在数码管上交替显示。

二、  实验目的

理解单片机串行口实现通信的各种工作方式

掌握单片机串行通信程序设计、调试方法

三、  实验设备

DELL台式机 + proteus版本6 + keilC51版本7

四、  实验电路图(可打印)

 

 

五、  程序流程图

 

 

六、  程序源码(可打印)

甲机:

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar dspcode[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void dlms()

{

uchar i;

for(i=125;i>0;i--);

}

uchar kbscan()

{

uchar sccode,recode,ret;

P1=0xf0;

if((P1&0xf0)!=0xf0)

{

dlms();

if((P1&0xf0)!=0xf0)

{

sccode=0xfe;

while((sccode&0x10)!=0)

{

P1=sccode;

if((P1&0xf0)!=0xf0)

{

recode=P1&0xf0;

sccode=sccode&0x0f;

switch(sccode)

{

case 0x0e: ret=0;break;

case 0x0d: ret=4;break;

case 0x0b: ret=8;break;

case 0x07: ret=12;break;

}

switch(recode)

{

case 0xe0: ret=ret+1;break;

case 0xd0: ret=ret+2;break;

case 0xb0: ret=ret+3;break;

case 0x70: ret=ret+4;break;

}

return ret;

}

else

sccode=(sccode<<1)|0x01;

}

}

}

return 0;

}

void main()

{

uchar c;

while(1)

{

P1=0xf0;

if((P1&0xf0)!=0xf0)

{

c=kbscan();

if(c!=0)

{

P0=~dspcode[c-1];

TMOD=0x20;

TH1=0xe6;

TL1=0xe6;

TR1=1;

SCON=0x40;

SBUF=c;

while(!TI);

TI=0;

TR1=0;

P1=0xf0;

while((P1&0xf0)!=0xf0);

}

}

}

}

乙机

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar c1=0,c2=0;

uchar i=0;

uchar dspcode[17]={0x00,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void interrupt4() interrupt 4

{

RI=0;

c2=c1;

c1=SBUF;

}

void main()

{

EA=1;

ES=1;

TMOD=0x20;

TH1=0xe6;

TL1=0xe6;

TR1=1;

SCON=0x50;

while(1)

{

P0=~dspcode[c1];

P2=~dspcode[c2];

}

}

 

转载于:https://www.cnblogs.com/johanxu/p/5066390.html

你可能感兴趣的文章
Ansible批量部署zabbix-agent
查看>>
使用PowerShell对比两个服务器系统进程和软件清单
查看>>
线程池的概述和使用学习笔记
查看>>
oracle基础之日志系列
查看>>
【NetApp】移动磁盘柜到一个新的控制器
查看>>
实在太伟大了,感谢楼主共享深度爬取和广度爬取
查看>>
crontab调用python时出现ImportError: No module named XXX的问题
查看>>
方正智睿NoSQL数据库总体介绍
查看>>
CentOS6.9安装Redis4.0.0
查看>>
Android 监听事件
查看>>
基于CentOS6.5环境之下的LNMP之编译安装mysql5.6.27
查看>>
《系统运维全面解析:技术、管理与实践》纠错汇总
查看>>
Object类对线程的支持----等待与唤醒
查看>>
硬盘串口和并口的区别
查看>>
java multithreading server example
查看>>
自动分发神器搭建kickstart
查看>>
我的友情链接
查看>>
mysql主从复制,半同步,主主复制架构的实现
查看>>
keepalived通过vrr_script实现高可用性案例分析
查看>>
寓言四则
查看>>