单片机课程设计.docx

上传人:b****1 文档编号:10687071 上传时间:2023-05-27 格式:DOCX 页数:18 大小:118.27KB
下载 相关 举报
单片机课程设计.docx_第1页
第1页 / 共18页
单片机课程设计.docx_第2页
第2页 / 共18页
单片机课程设计.docx_第3页
第3页 / 共18页
单片机课程设计.docx_第4页
第4页 / 共18页
单片机课程设计.docx_第5页
第5页 / 共18页
单片机课程设计.docx_第6页
第6页 / 共18页
单片机课程设计.docx_第7页
第7页 / 共18页
单片机课程设计.docx_第8页
第8页 / 共18页
单片机课程设计.docx_第9页
第9页 / 共18页
单片机课程设计.docx_第10页
第10页 / 共18页
单片机课程设计.docx_第11页
第11页 / 共18页
单片机课程设计.docx_第12页
第12页 / 共18页
单片机课程设计.docx_第13页
第13页 / 共18页
单片机课程设计.docx_第14页
第14页 / 共18页
单片机课程设计.docx_第15页
第15页 / 共18页
单片机课程设计.docx_第16页
第16页 / 共18页
单片机课程设计.docx_第17页
第17页 / 共18页
单片机课程设计.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计.docx

《单片机课程设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计.docx(18页珍藏版)》请在冰点文库上搜索。

单片机课程设计.docx

单片机课程设计

目录

摘要1

1基本原理2

1.1串行通信介绍2

1.2串行接口标准2

1.3单片机串口简介3

2硬件电路设计4

2.1设计思路4

2.2程序流程图4

2.3电路原理图6

3实验仿真及结果分析8

3.1仿真电路图8

3.2仿真实验代码9

3.3仿真结果15

3.4结果分析16

4心得体会17

参考文献18

摘要

单片微型计算机简称单片机,它是将中央处理器(CPU)、存储器(RAM,ROM)、定时/计数器和各种接口电路都集成到一块集成电路芯片上的微型计算机。

随着计算机技术尤其是单片机技术的发展,人们已越来越多地采用单片机来对一些工业控制系统中如温度、湿度等参数进行检测和控制。

PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC机的RS232串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。

因此如何实现PC机与单片机之间的通信具有非常重要的现实意义。

针对一些远距离控制或者是危险性比较高的数据采集和控制的应用情况,本文主要介绍一种用双工方式实现PC机与单片机之间的串行通信。

本设计运用51单片机设计了一个能和PC进行全双工通信的程序,能由单片机向PC发送字符串,当按PC上的数字键时,能在单片机上的数码管上显示相应数字,并且单片机的其他四个数码管能每隔1s交替动态显示0123和4567,涉及到定时器、中断、串行口、数据接收与发送数码管动态显示等。

对于我们研究掌握单片机具有十分重要的意义。

关键字:

串口,双工通信,数码管,虚拟终端

 

1基本原理

1.1串行通信介绍

计算机之间有时需要交换信息,这种信息交换被称为通信。

通信可分为并行通信和串行通信。

将数据各位同时传送的方法是并行通信,将数据逐位传送的方法是串行通信。

本次课程设计采用的是串行通信。

串行通信分为串行异步通信和串行同步通信两种类型,串行异步通信以若干位表示一个字符,通信时以收/发一个字符为一独立的通信单位。

异步传送的数据前面应加起始位,结束后应加停止位,形成一个完整的串行传送字符。

串行同步通信串行同步通信就是去掉异步传送时每个字符的起始位和停止位,以一组字符组成一个数据块,在每个数据块前附加一个或两个同步字符或标识符,后面在附加校验字符。

1.2串行接口标准

串行通信在电器连接上游串行接口标准,常用的标准有

(1)RS-232-C接口标准;

(2)RS-422A、RS-432A和RS-485接口标准;(3)20mA电流环接标准。

本次课程设计采用的是RS-232-C串行总线接口标准。

RS-232-C接口标准是美国电器工业协会(EIA)制定的,是一种在数据终端设备(DataTerminalEquipment,DTE)和数据通信设备(DataCommunicationEquipment,DCE)之间通信的链接标准。

在有些短距离场合,计算机之间可以直接通过RS-232-C接口连接。

目前常用的是9针D型连接器,如图1-1所示。

图1-1RS-232C9针D型连接器

1.3单片机串口简介

本次课设用的89C51的串行口是一个可编程的全双工串行通信接口,它的功能很多,可以用软件编程来控制,它可以作为通用异步接收和发送器UART,也可以作为同步移位寄存器。

其帧格式可有8位,10位,11位,并能设置各种波特率,只要编程就能进行设定,使用很方便。

串行口的结构主要由两个数据缓冲寄存器SBUF和一个输入移位寄存器组成,另外其内部还有一个串行控制寄存器SCON和一个波特率发生器,波特率发生器是由T1及分频器组成,因此修改波特率时要修改T1的设定。

在与PC机进行通信时,PC机发来的的串行数据是通过引脚RXD输入的。

输入数据先逐位进入输入移位寄存器,再送入接收数据缓冲寄存器。

在PC内接有PC16550串行接口、RS-232C连接器、EIA-TTL的电平转换器等设备,有两个串行口COM1和COM2留给用户,通过这两个串行口可以连接串行通讯设备如单片机等。

2硬件电路设计

2.1设计思路

(1)数码管显示:

题目要求数码管每隔1s交替显示“0123”和“4567”,同时能按PC上的数字键能显示对于数字,4个数码管能够动态显示。

通过单片机P0口控制段选,通过P3控制位选,从而达到数码管的动态显示。

还有一个数码管用来显示单片机接收到的字符,我们采用一个共阴极数码管。

外接上拉电阻驱动,控制P0口来控制,将接收到的字符信息在这个数码管上显示。

(2)串行通信:

要实现PC和单片机的串行双工通信,要设置接收允许。

采用串行方式1,T0作为波特率发生器工作于方式2,取SMOD=1,T1的时间常数为D0。

波特率为1200。

发送部分程序采用查询式方法,先发送第一个字符,等待发送完毕后在发下一个,直字符串至全部发完。

实际发送中要用按键控制,当按键按下一次时,发送一次。

接收程序采用中断方式,当单片机接收到一个来自PC的字符时,产生串行口中断,将接受到的ASCII码转换成单片机能够显示的字形码。

(3)定时器部分:

要求数码管显示器每隔1s交替显示“0123”和“4567”,很容易想到定时器控制。

选用定时器T0,工作方式1,16位计数,最大计数值65536,晶振为11.0592M,最大定时周期为71ms,不能满足要求,可以先定时50ms,此时计数初值为4C00,然后引入一个变量计数,每当定时器T0中断时变量加1,当计到20时刚好一秒,改变数码显示结果,再将计数变量清零,如此循环。

2.2程序流程图

程序先向PC机发送一段字符,再接收PC机发来的字符。

发送部分程序流程图如图2-1所示:

 

图2-1发送部分程序流程图

 

接收部分程序流程图如图2-2所示:

图2-2接收部分程序流程图

2.3电路原理图

实际仿真中,我们用到的电路原理图如下图2-3所示。

图2-3电路原理图

3实验仿真及结果分析

3.1仿真电路图

实际中,我们运用Proteus进行电路仿真。

仿真电路图如下图3-1所示。

图3-1仿真电路图

3.2仿真实验代码

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitA1=P3^4;//数码管位选

sbitA2=P3^5;

sbitA3=P3^6;

sbitA4=P3^7;

voidInit();

voidInit_232();

voidInit_T1();

voidSentStr(char*str);

voidSendData(chardat);

voidLED_Display();

voiddelay(uints);

intFlag=0;

bitLEDFlag=0;

uintcounter=0;

charRXData,TXData[]="iget";

unsignedcharcodeLEDcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

voidmain()

{

inta=0;

P0=LEDcode[4];

Flag=1;

Init();

while

(1)

{

LED_Display();

if(Flag==1)

{

ES=0;

for(a=0;TXData[a]!

='\0';a++)

{

SBUF=TXData[a];//SUBF接受/发送缓冲器

while(!

TI);

TI=0;

}

SBUF=RXData;

while(!

TI);

TI=0;

ES=1;

Flag=0;

delay(10);

}

}

}

voidInit()

{

Init_232();

Init_T1();

}

voidInit_T1()

{

TMOD|=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

//MAX232moduleInitial

voidInit_232()

{

SCON=0x50;//REN=1允许串行接受状态,串口工作模式1

TMOD=0x20;//定时器工作方式2

PCON=0x80;

//TH1=0xFD;//baud*2/*reloadvalue19200、数据位8、停止位1。

效验位无(11.0592)

TH1=0xd0;////baud*2/*波特率4800、数据位8、停止位1。

效验位无(12M)

TL1=0xd0;

TR1=1;

REN=1;

ES=1;//开串口中断

EA=1;//开总中断

}

//voidSendData(chardat)

//{

//}

voiddelay(uints)

{

uinti,j;

for(j=0;j

{

for(i=0;i<200;i++);

}

}

voidRXProcess()interrupt4using1

{

RI=0;

RXData=SBUF;

P0=LEDcode[RXData-0x30];

Flag=1;

}

voidT0_TIMER()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

counter++;

if(counter==20)//ifreach1s

{

LEDFlag=~LEDFlag;

counter=0;

}

}

voidLED_Display()

{

while(LEDFlag==1)

{

P3|=0xf0;

A1=0;

P2=LEDcode[0];

delay(5);

P3|=0xf0;

A2=0;

P2=LEDcode[1];

delay(5);

P3|=0xf0;

A3=0;

P2=LEDcode[2];

delay(5);

P3|=0xf0;

A4=0;

P2=LEDcode[3];

delay(5);

}

while(LEDFlag==0)

{

P3|=0xf0;

A1=0;

P2=LEDcode[4];

delay(5);

P3|=0xf0;

A2=0;

P2=LEDcode[5];

delay(5);

P3|=0xf0;

A3=0;

P2=LEDcode[6];

delay(5);

P3|=0xf0;

A4=0;

P2=LEDcode[7];

delay(5);

}

}

3.3仿真结果

为了达到仿真的目的,首先我们需要安装VirtualSerialPort和串口调试助手两个软件。

前者为电脑建立虚拟串口,建立单片机与PC的连接。

后者则发送PC数据和显示PC接收到的信息。

实际中我们从PC中输入“8”,得到的数码管显示结果如下图3-3所示。

图3-3数码管仿真结果

虚拟终端得到的仿真结果如下图3-4所示:

图3-4虚拟终端仿真结果

PC接收到的数据仿真结果如下图3-5所示:

图3-5PC接收到的数据仿真结果

3.4结果分析

由仿真结果可知,我们从PC键盘键入的字符“8”成功的发送给了单片机,在虚拟终端和数码管上可以看到。

同时,从单片机发送的字符串“iget8”也成功发送到了PC机上,从而实现了单片机与PC机的双工通信,达到了此次设计的要求。

4心得体会

通过一周的不懈努力,我终于在一周时间内完成了这次单片机课程设计。

通过该课程设计,全面系统的理解了单片机原理的一般原理和基本实现方法。

把死板的课本知识变得生动有趣,激发了学习的积极性。

把学过的单片机原理基础原理的知识强化,能够把课堂上学的知识通过自己编写的程序表示出来,加深了对理论知识的理解。

在这次课程设计中,我先是认真阅读课本上的相关知识,理解透后又翻阅关于C语言的书籍,学习C语言中的运算符、数组和指针的用法。

然后掌握了单片机串口通信、定时器、数码管动态扫描的原理与应用,学会了51单片机常用的寄存器的使用。

总体来说,这次课设我学到了很多。

在设计过程中,加深了对可内知识的理解就,真正懂得了学以致用,熟悉Keil软件的使用,了解Proteus单片机仿真中的重大应用。

做课程设计我体会到了设计的艰辛的同时,更让我体会到成功的喜悦和快乐.这次单片机原理课程设计虽然短暂,但我受益匪浅。

首先,提高了我们的对C语言的运用能力。

C语言是一种高级语言,运算符丰富,可读性好,移植性强,易于模块化设计,有丰富的函数可供调用。

原来只是零零散散的做过一些单独的模块。

通过C语言,很方便把原来做过的模块进行整合,方便调试与扩展。

其次,锻炼了课外查资料的能力。

我们在设计程序时,遇到很多不理解的东西,如虚拟串口的使用,操作指令比较多,后来通过网上查阅相关的PDF的文档,参考别人写的程序,才搞清楚它的控制字和操作过程。

有的我们通过查阅参考书弄明白,有的通过网络查到,但由于时间和资料有限我们更多的还是独立思考。

最后通过课程设计提高了我的综合运用知识能力。

原来我写程序的都是一个文件,而这次单片机课程设计首次采用多文件,把功能拆分成几个相对独立的模块,既方便调试,也方便以后直接调用。

原来学微机原理也学过定时器和串行通信,但只停留在理论层面,通过这次单片机课程设计才真正理解。

还有掌握了proteus在单片机仿真中的应用,原来只用proteus做过模数电的仿真,现在学会了单片机的仿真。

参考文献

[1]李群芳,张士军,黄建.单片微型计算机与接口技术.北京:

电子工业出版社,2007.

[2]王守中.51单片机开发入门与典型实例.北京:

人民邮电出版社,2007.

[3]倪志莲.单片机应用技术.北京:

北京理工大学出版社,2007.

[4]周润景.Proteus入门实用教程.北京:

机械工业出版社,2007.

[5]张靖武,周灵彬.单片机系统的Proteus设计与仿真.北京:

电子工业出版社,2007.

[6]邹其洪.单片机原理.北京:

电子工业出版社,2005

[7]吴友宇.单片机原理与接口技术.南京:

东南大学出版社,2008

[8]吴锡龙.单片机实例与开发.北京:

高等教育出版社,2004

本科生课程设计成绩评定表

姓名

刘冬

性别

专业、班级

电信1005班

题目:

实现单片机与PC串行双工通信

答辩或质疑记录:

成绩评定依据:

 

最终评定成绩(以优、良、中、及格、不及格评定)

 

指导教师签字:

2014年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2