单片机双击串行通信C语言设计报告含代码.docx
- 文档编号:961540
- 上传时间:2022-10-14
- 格式:DOCX
- 页数:17
- 大小:435.29KB
单片机双击串行通信C语言设计报告含代码.docx
《单片机双击串行通信C语言设计报告含代码.docx》由会员分享,可在线阅读,更多相关《单片机双击串行通信C语言设计报告含代码.docx(17页珍藏版)》请在冰豆网上搜索。
单片机双击串行通信C语言设计报告含代码
铁道大学四方学院
集中实践报告书
课题名称
双机串行通信设计
姓名
邢志杰
学号
20127019
系、部
电气工程系
专业班级
方1210-4
指导教师
马丽
2015年7月3日
一、设计任务及要求:
设计任务:
双机串行通信设计
设计要求:
1、两片单片机利用串行口进行串行通信:
串行通信的波特率可从键盘进行设定,可选的波特率为1200、2400、4800和9600bit/s。
串行口工作方式为方式1的全双工串行通信。
2、两个单片机之间进行通讯波特率的设定,最终归结到对定时计数器T1计数初值TH1、TL1进行设定。
故本题目本质上是通过键盘扫描得到设定的波特率,从而载入相应的T1计数初值TH1、TL1实现的。
3、要求发送方读入按键值,发送到接收方,接收方接受数据并显示在数码管上。
4、要求做出实物。
二、指导教师评语:
三、成绩
指导教师签名:
年月日
第1章设计目的
1.1设计目的
(1)掌握单片机实际系统的开发步骤。
(2)了解串行通信的原理;了解数码管显示的工作原理;了解键盘扫描的工作原理;对双机串行通信软件编程、调试、相关硬件设备的使用技能等方面得到真正的实践机会,把软硬件结合,克服其中的种种问题,提高编程能力。
第2章设计要求
2.1设计要求
(1)两片单片机利用串行口进行串行通信:
串行通信的波特率可从键盘进行设定,可选的波特率为1200、2400、4800和9600bit/s。
串行口工作方式为方式1的全双工串行通信。
(2)两个单片机之间进行通讯波特率的设定,最终归结到对定时计数器T1计数初值TH1、TL1进行设定。
故本题目本质上是通过键盘扫描得到设定的波特率,从而载入相应的T1计数初值TH1、TL1实现的。
(3)要求发送方读入按键值,发送到接收方,接收方接受数据并显示在数码管上。
(4)要求做出实物。
第3章硬件电路设计
3.1 系统框图
图3-1系统框图
3.2 STC89C52单片机最小系统
89C52共有四个八位的并行双向口,即有32根输入输出口线。
各口的每一位均由锁存器、输出驱动器和输入缓冲器组成。
VCC(40引脚):
电源电压
VSS(20引脚):
接地
图3-2STC89C52引脚图
P0端口(P0.0~P0.7,39~32引脚):
P0口是一个漏极开路的8位双向I/O口。
作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。
在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。
此时,P0口部上拉电阻有效。
在FlashROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。
验证时,要求外接上拉电阻。
P1端口(P1.0~P1.7,1~8引脚):
P1口是一个带部上拉电阻的8位双向I/O口。
P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。
对端口写入1时,通过部的上拉电阻把端口拉到高电位,这是可用作输入口。
P1口作输入口使用时,因为有部上拉电阻,那些被外部拉低的引脚会输出一个电流。
P1口特点是输出锁存器,输出时没有条件。
输入缓冲,输入时有条件,即需要先将该口设为输入状态,先输出1。
此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。
P3口为准双向口。
可以字节访问,也可以位访问。
P3.0---RXD,串行输入口。
P3.1---TXD,串行输出口。
P3.2---INT0,外部中断0的请求。
P3.3---INT1,外部中断1的请求。
P3.4---T0,定时器/计数器0外部计数脉冲。
P3.5---T1,定时器/计数器,1外部计数脉冲。
P3.6---WR,外部数据存储器写选通。
P3.7---RD,外部数据存储器读选通。
RST(9引脚):
复位输入。
当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。
ALE(30引脚):
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
XTAL1(19引脚):
振荡器反相放大器和部时钟发生电路的输入端。
XTAL2(18引脚):
振荡器反相放大器的输入端。
STC89C52引脚图如图3-2所示。
3.3按键电路
图3-3按键电路图
本设计按键采用矩阵键盘,键盘连接主机的P2口,主机从矩阵键盘接收信息,通过串行输出口输出到从机,从机从串行输入口接收信息并把信息显示在数码管上。
3.4主电路设计
图3-4主电路图
第4章软件程序设计
设计思路为:
主机通过键盘扫描程序确认是否有键按下,若有键按下则将按键号对应的显示代码发送给从机,并判断是否是波特率按键,若是则进行波特率调整,若无键按下,则继续进行键盘扫描。
从机主程序动态显示缓冲区的数据。
中断子程序接收数据并判断是否是波特率按键所对应的显示代码,若是则进行波特率调整,然后将数据保存到缓冲区。
初始波特率都为9600。
4.1主程序流程图
键盘连接到甲机的P2口,通过按键扫描确定键值,从机与主机通过串行输入口P3.0和串行输出口P3.1相连接,实现两机之间的串行通信。
图4-1主机主程序流程图
4.2键盘扫描子程序流程图
矩阵式键盘扫描的方法常用的有两种,一种是逐列送0,依次读回行;另一种为反转法。
本程序采用前者,程序流程图如下:
图4-2键盘扫描子程序流程图
4.3从机主程序流程图
从机主程序动态显示缓冲区的4个数据。
从机的P1口经锁存器74HC573连接数码管位码,P2口经锁存器74HC573连接数码管的段码。
从机与主机通过串行输入口P3.0和串行输出口P3.1相连接,利用中断来接收主机发来的数据,并根据接收的数据来判断是否需要进行波特率调整。
从机主程序流程图如下:
图4-3从机主程序流程图
4.4从机中断子程序流程图
图4-3从机中断子程序流程图
4.5程序调试
图4-5程序调试
4.6双机串行通信源程序
/*************************************************************
程序调试软件:
KeiluVision4
程序仿真软件:
ISIS即Proteus-7.8sp2
/*************************************************************
双机串行通信主机程序源代码:
/***********************************************
程序名称:
双机串行通信波特率可调主机程序(C语言)
主机功能:
通过键盘扫描得到键号并发送,同时判断是否是波特率按键,若是则调整波特率。
简要说明:
主机P2口接4*4矩阵式键盘,高4位行,低4位列。
其中0~4号按键分别代表4种不同波特率(1200、2400、4800、9600)。
初始波特率9600。
编写:
邢志杰(QQ824997141)
时间:
2015年07月02日
最后修改:
2015年07月03日
***********************************************/
#include
#defineuintunsignedint
#defineucharunsignedchar
intlog=0,bot=0;//log,bot分别是按键标志位和波特率调整标志位
uchartemp,num;
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*****按键扫描子函数*****/
voidkeyscan()
{
P2=0xf0;
temp=P2;
temp&=0xf0;
if(temp!
=0xf0)
{
delay(5);//延时消抖
P2=0xf0;//二次读回
temp=P2;
temp&=0xf0;
if(temp!
=0xf0)
{
log=1;//有按键
P2=0xfe;
temp=P2;
if(temp!
=0xfe)
switch(temp)
{
case0xee:
num=0;bot=1;break;//bot=1表示是波特率按键
case0xde:
num=4;break;
case0xbe:
num=8;break;
case0x7e:
num=12;break;
}
P2=0xfd;
temp=P2;
if(temp!
=0xfd)
switch(temp)
{
case0xed:
num=1;bot=1;break;//bot=1表示是波特率按键
case0xdd:
num=5;break;
case0xbd:
num=9;break;
case0x7d:
num=13;break;
}
P2=0xfb;
temp=P2;
if(temp!
=0xfb)
switch(temp)
{
case0xeb:
num=2;bot=1;break;//bot=1表示是波特率按键
case0xdb:
num=6;break;
case0xbb:
num=10;break;
case0x7b:
num=14;break;
}
P2=0xf7;
temp=P2;
if(temp!
=0xf7)
switch(temp)
{
case0xe7:
num=3;bot=1;break;//bot=1表示是波特率按键
case0xd7:
num=7;break;
case0xb7:
num=11;break;
case0x77:
num=15;break;
}
//等待按键松开
P2=0xf0;
temp=P2;
temp&=0xf0;
while(temp!
=0xf0)
{
temp=P2;
temp&=0xf0;
}
}
}
}
/*****主函数*****/
voidmain()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;//装初值设置波特率
TL1=0xfd;
TR1=1;//打开定时器1
SCON=0x40;//8位异步
while
(1)
{
keyscan();
if(log==1)//有键按下发送键号
{
SBUF=num;//发送按键号
while(!
TI);
TI=0;//清发送标志位
log=0;//清按键标志位
if(bot==1)//是波特率按键进行波特率调整
{
switch(num)
{
case0:
TH1=TL1=0xe8;break;
case1:
TH1=TL1=0xf4;break;
case2:
TH1=TL1=0xfa;break;
case3:
TH1=TL1=0xfd;break;
}
}
bot
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 双击 串行 通信 语言 设计 报告 代码