单片机原理与接口技术实验报告.docx
- 文档编号:30172051
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:14
- 大小:287.45KB
单片机原理与接口技术实验报告.docx
《单片机原理与接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《单片机原理与接口技术实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
单片机原理与接口技术实验报告
SHANDONGUNIVERSITY OF TECHNOLOGY
《单片机原理与接口技术》专题报告
单片机间双向通信
学院:
农业工程与食品科学学院
专业:
农业工程
学生姓名:
王佳文
学号:
Y1303072
指导教师:
印祥
一、题目:
单片机间双向通信
二、设计内容与目的
本设计主要依据MS-51系列单片机STC89C51,设计两个单片机间双向通信。
通过本次试验来掌握单片机之间的双向通信工作原理及编程方法。
设计内容为主机向从机发送数字,从机进行加一再后返回主机。
本试验在Proteus环境下完成本实验时,需要安装Proteus软件。
三、设计方案
单片机间双向通信设计方案如下图所示:
本设计主要由单片机最小系统、开关控制电路、LED显示电路构成。
甲单片机通过串口通信电路将信号送入向乙单片机内,乙单片机进行加一后再通过串口通信电路返回甲单片机内。
同时甲单片机机和乙单片机接受到的数字通过LED数码管进行显示。
四、单片机芯片
4.1单片机的选用
本设计中选用的单片机是STC89C51单片机,这里对STC89C51单片机进行简单的介绍。
STC89C51单片机学习板是一款基于8位单片机处理芯片STC89C52RC的系统。
其功能强大。
其功能强大,具有报警、跑马灯、串行通信(max232)、段码液晶(msm0801LCD)和字符液晶显示(LCD1602)、电机控制(L298)、A/D转换(TLC2543)、D/A转换(TLC5615)、温度采集(DS18B20)、数字信号合成(AD9851)、实时时钟电路(DS1302)、4—20mA输出、PWM输出(UC3842)、红外检测(KSM-603LM)控制等十七种功能,学习、开发者可以根据需要选配多种常用模块,达到实验及教学的目的。
主CPU电路选用STC89C52RC系列单片机,STC89C52RC是采用8051核的ISP(InSystemProgramming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8KBytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。
STC89C52RC系列单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,全新的流水线/精简指令集结构,内部集成MAX810专用复位电路。
STC89C51的外观如图所示
STC89C51具有如下特点
(1)增强型1T流水线/精简指令集结构8051CPU
(2)工作电压:
3.4V-5.5V(5V单片机)/2.0V-3.8V(3V单片机
(3)工作频率范围:
0-35MHz,相当于普通8051的0~420MHz.实际工作频率可达48MHz.
(4)用户应用程序空间12K/10K/8K/6K/4K/2K字节
(5)片上集成512字节RAM
(6)通用I/O口(27/23个),复位后为:
准双向口/弱上拉(普通8051传统I/O口)
可设置成四种模式:
准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏
每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过55mA
(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器
可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片
(8)EEPROM功能
(9)看门狗
(10)内部集成MAX810专用复位电路(外部晶体20M以下时,可省外部复位电路)
(11)时钟源:
外部高精度晶体/时钟,内部R/C振荡器。
用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟。
常温下内部R/C振荡器频率为:
5.2MHz~6.8MHz。
精度要求不高时,可选择使用内部时钟,因为有温漂,请选4MHz~8MHz
(12)有2个16位定时器/计数器
(13)外部中断2路,下降沿中断或低电平触发中断,PowerDown模式可由外部中断低电平触发中断方式唤醒
(14)PWM(4路)/PCA(可编程计数器阵列),也可用来再实现4个定时器或4个外部中断(上升沿中断/下降沿中断均可支持)
(15)STC89Cc516AD具有ADC功能。
10位精度ADC,共8路
(16)通用异步串行口(UART)
(17)SPI同步通信口,主模式/从模式
(18)工作温度范围:
0-75℃/-40-+85℃
(19)封装:
PDIP-28,SOP-28,PDIP-20,SOP-20,PLCC-32,TSSOP-20(超小封状,定货)
4.2LED数码管的选用
设计需要采用两个一位的LED数码管显示器,所选型号为SM110561R。
该型号数码管为共阳极的。
其引脚如下图所示:
五、硬件设计部分
5.1Proteus仿真电路图
5.2LED显示电路
5.3开关控制电路
六程序设计部分
6.1C语言程序源代码
甲机发送程序
//*********************发送*******************
#include
#include
#define_SEND_STRING_"EADY"/发送的字符串
#define_RECV_STRING_"OK"//接收的字符串
#define_MAX_LEN_16//数据最大长度
voidput_string(unsignedchar*str);//串口发送字符串
voidget_string(unsignedchar*str);//串口接收字符串
voidBeep();//蜂鸣表示成功接收到返回信号
/*----------------------------------程序初始化部分--------------------------------------------*/
voidmain()
{
charbuf[_MAX_LEN_];
/*系统初始化*/
TMOD=0x20;//定时器T1使用工作方式2
TH1=250;//设置初值
TL1=250;
TR1=1;//开始计时
PCON=0x80;//SMOD=1
SCON=0x50;//工作方式1,波特率9600bit/s,允许接收
EA=0;//关闭全部中断
strcpy(buf,_SEND_STRING_);//设置发送字符串
/*-----------------------发送数据-----------------------------------*/
put_string(buf);
buf[0]=0;//清空缓冲区
/*----------------------接收数据-----------------------------------*/
while(strcmp(buf,_RECV_STRING_)!
=0)
{
get_string(buf);
}
beep();
while
(1);//反复循环
}
/*------------------------------子函数--------------------------------------*/
/*发送字符,参数str为待发送子符串*/
voidput_string(unsignedchar*str)
{
do
{
SBUF=*str;
while(!
TI);//等待数据发送完毕
TI=0;//清发送标志位
str++;//发送下一数据
}
while(*(str-1)==’\0’);//发送至字符串结尾则停止
}
/*接收字符串,参数str指向保存接收子符串缓冲区*/
voidget_string(unsignedchar*str)
{
unsignedcharcount=0;
*str=0;//清缓冲区
do
{
while(!
RI);//等待数据接收
*str=SBUF;//保存接收到的数据
RI=0;//清接收标志位
str++;//准备接收下一数据
count++;
if(count>_MAX_LEN_)//如果接收数据超过缓冲区范围,则只接收部分字符
{
*(str-1)=0;
break;
}
while(*(str-1)==’\0’);//接收至字符串结尾则停止
}
}
#define_SEND_STRING_“READY”//
#include
#define_SEND_STRING_“READY”//
乙机接收程序
//*********************接收*******************
#include
unsignedchara;
unsignedcharb[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
voidinit(void)
{
SCON=0x50;//串行口工作方式1,允许接收
PCON=0x00;//波特率不倍增
TMOD=0x20;//定时器1工作于8位自动重载模式,用于产生波特率
TH1=0xf4;
TL1=0xf4;//T1赋初值,波特率2400
TR1=1;//启动定时器1
EA=1;
ES=1;
}
voidmain(void)
{
init();
while
(1)
{
P2=b[a];
}
}
voidzd()interrupt4
{
if(RI)
{
RI=0;
a=SBUF;
SBUF=a+1;//加1后,在返回到主机
}
elseTI=0;
}
6.2Keil程序调试
发送程序调试
接收程序调试
七、程序调试及产生的问题
7.1程序结构
7.2实物连接
实物连接过程中我选择了电路板做底板利用电烙铁和焊锡对电路板及各电子元器件进行焊接。
7.3检测各元器件的焊接情况
(1)单片机座的焊接
本设计采用单片机座,防止单片机在焊接时因高温损毁,以及保证单片机在其他电路中仍可以继续被使用。
(2)各元器件在电路板的焊接
1.首先要了解在电路板上进行焊接的注意事项,
2.在了解了各元器件后,按照原理图在电路板上连接电路。
3.利用焊锡和电烙铁将单片机座、开关、数码管、电容、极性电容、电阻、指示灯等元器件焊接在电路板上、并检测其连接是否正确,是否能正确工作。
7.4程序调试
系统调试包括硬件调试和软件调试,而且这两者是密不可分的。
我们设计好的硬件电路和软件程序,只有经过联合调试,才能验证其正确性;软硬件的配人情况以及是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、完善,最终开发成实用产品。
硬件调试分单元电路调试和联机调试,单元电路试验在硬件电路设计时已经进行,这里的调试只是将其制成印刷电路板后试验电路是否正确,并排除一些加工工艺性错误(如错线、开路、短路等)。
这种调试可单独模拟进行,也可通过开发装置由软件配合进行,硬件联机调试则必须在系统软件的配合下进行。
软件调试一般包括分块调试和联机调试两个阶段。
程序的分块调试一般在单片机开发装置上进行,可根据所调程序功能块的入口参量初值编制一个特殊的程序段,并连同被调程序功能块一起在开发装置上运行;也可配合对应硬件电路单独运行某程序功能块,然后检查是否正确,如果执行结果与预想的不一致,可以通过单步运行或设置断点的方法,查出原因并加以改正,直到运行结果正确为止。
这时该程序功能块已调试完毕,可去掉附加程序段。
7.5实物图
7.6产生的问题
1.数码管一个引脚没有焊接好,导致数码管显示不正确,重新焊接后数码管才显示正常
2.刚开始对数码管的引脚连线不是很清楚,上网查了相关资料后才确定如何连接数码管各引脚
3.经过Proteus软件进行仿真后得了想要的实验结果,但对电路板进行焊接后发现开关不起作用,数码管显示的数字不变。
八、课程设计与专题总结
通过此次课程设计,我重新认识到了对书本上的知识要独立运用的道理。
在抢答器设计过程中,发现了很多细节性的问题,也出现了很多错误,经过和同学们研究、商讨最后都解决,感觉团队协作能力是非常有必要的!
通过此次的抢答器的设计,让我重新拾起了以前所学习的电子知识和C语言的编程,也使我加深了对单片机及接口技术的理解和应用,由于知识水平的局限,设计中可能会存在着一些不足,我将继续努力。
通过这次课程设计,我更加深入理解了单片机与单片机之间的双向通信过程。
通过硬件的焊接与调试,增强了动手能力,懂得如何焊接好电路板,避免短路,将自己从课本上学习到的知识应用于实践。
当在调试过程中出现问题时,学会了如何对出现的错误进行排除。
通过这次课设让我了解怎样进行调试,怎样使实验达到最好的效果,也学会了如何使用现有的手段查询到自己需要的资料进行自学,更加深入的了解一些课堂上掌握不好的知识。
很多知识,是需要通过自己动手的实践过程才能理解的更加深刻,很多实践经验也是通过动手才能积累。
同时这学期的《单片机原理与接口技术》也使我有机会重新复习了以前所学的《电子技术》和《C语言编程》等课程,融汇了各学科的知识。
最后,在此衷心感谢印祥老师在这一年来为我提供的帮助,以及悉心的教导。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 接口 技术 实验 报告