找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6045|回复: 0
打印 上一主题 下一主题
收起左侧

单片机双机串行通信课程设计报告下载

[复制链接]
跳转到指定楼层
楼主
ID:295736 发表于 2018-3-22 22:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

《单片机原理及接口技术》

课程设计报告

学院名称   电气学院               

专业班级   自动化 1501            

学生姓名   叶铭                  

学    号:311508070129           


基于AT89S52单片机的串行通信系统设计

(河南理工大学  电气工程与自动化学院  自动化15-1  学号311508070129)
摘要:本次课程设计是将两片单片机之间的串行通信。按照课程设计的要求,我们将使用两个AT89S51单片机实现双机通讯:甲乙两个单片机都可以时间发送和接受信息功能,以及显示功能,所以两个单片机都可以作为主机发送 0信号,而且也可以作为从机。对于甲机的数据输入,我们通过程序设计按键输入实现数据加一,减一。同时乙机的数据接收显示,我们通过使用八段数码管完成实现。程序在KEIL上使用C语言进行编写,运行。

  • 课程设计的目的及意义

《单片机原理及接口技术》程设计是为自动化学生专业的一门核心课程。它的特点是知识面广,内容广,难度大,更新快,在基础课和专业之间起到承前启后的重要作用,同时单片机在现代电子系统中的作用已经日渐成为最重要的智能化核心部件。是我们当代大学生步入社会参加工作的立足之本。通过本课程设计,使学生独立地完成一个典型单片机应用系统的设计和调试任务,深刻地领会和掌握《单片机原理及接口技术》课程中讲述的基本理论和基本技能,进一步培养学生的综合分析与设计能力和动手能力,为后续课程学习和今后从事自动化系统及相关领域的实际工作打下坚实的基础。

  • 课程设计任务书
此次课程设计的任务是实现串行通信的系统设计其中包括程序设计以及仿真电路设计。

(1)甲单片机设置两个按钮,可以改变一个变量的值,若值改变,则发送数据给给已单片机,变量为uchar类型(0~255)

(2)乙单片机接收数据并显示(用4LED数码管),同时将该值返回甲单片机

(3)甲单片机比较乙单片机返回的数据,若不同则重新发送

(4)设计硬件电路,编写程序,利用Proteus实现仿真

(5)绘制流程图、电路原理图,并撰写报告。

  • 串行通信结构及工作原理
51系列单片机的串行口主要有两个数据缓冲器SBUF,一个输入移位寄存器(9位),一个穿行控制寄存器SCON和一个波特率发生器T1等组成。
图2 串行口结构框图(图片来自网络)
  • 系统总体设计
图2 系统设计线路图
  • 硬件电路设计

  • 软件设计
先设置甲乙两块单片机串行口工作方式 ,然后再将初值赋值为250,发送数据,乙机接受数据显示,接受的数据返还甲机,相同则继续判断按键,程序继续运行。
图9 软件设计流程
5.1 显示程序设计
时钟显示是通过LED数码动态刷新,即一位一位地轮流点亮八位数码管,对于任意一位LED数码管,每隔一段时间点亮一次,利用人眼的“视觉暂留”效应,即扫描速度选择足够快时,尽管实际上各位数码管并非同时点亮,人眼觉得是同时显示,就会看到一组稳定的“时分秒”显示数据。通过 74LS138 对 LED 数码管进行位选,采用循环扫描方式,分时轮流选通8位共阴数码管,数码管的位选分别接到译码器的输出端,只要位选给高电平“1”,则相应数码管就会点亮,从而实现8 位555
51程序
void display(void)                //显示
{


              P2=0xfe; // 1111 1110
     P0=b[a%10];
              delay(20);
              P0=0;
              P2=0xfd; // 1111 1101
              P0=b[a/10%10];
              delay(20);
              P0=0;
              P2= 0xfb; // 1111 1011
                P0=b[a/100%10];
              delay(20);
              P0=0;
              P2=0xf7; // 1111 0111
              P0=b[a/1000%10];
              delay(20);
              P0=0;
}
5.2甲机发送程序
  1. #include<AT89X52.h>
  2.   #define uint unsigned int
  3.   #define uchar unsigned char
  4.   void delay(uint t);
  5.   uchar a;
  6.   void main()
  7.    {
  8.    a=250;
  9.     //P0=0x00;
  10.               SCON=0x50;
  11.               TMOD=0x20;
  12.               PCON=0x00;
  13.               TH1=0xfd;  
  14.     TL1=0xfd;
  15.                   TR1=1;
  16.   while(1)
  17.   {            
  18.                 if(P1_0==0)
  19.   {              delay(100);
  20.                 if(P1_0==0)
  21.               {
  22.                 a++;
  23.                 SBUF=a;
  24.                 while(TI==0)              ;
  25.                 TI=0;
  26.                  while(RI==0);
  27.                  RI=0;
  28.               delay(10000);
  29.               }
  30.    }
  31.    if(P1_2==0)
  32.   {              delay(100);
  33.                 if(P1_2==0)
  34.               {
  35.                 a=a+10;
  36.                 SBUF=a;
  37.                 while(TI==0)              ;
  38.                 TI=0;
  39.                  while(RI==0);
  40.                  RI=0;
  41.               delay(10000);
  42.               }
  43.    }
  44.     if(P1_1==0)
  45.     { delay(100);
  46.   if(P1_1==0)
  47.   {
  48.                 a--;
  49.     SBUF=a;
  50.     while(TI==0)              ;
  51.     TI=0;
  52.     while(RI==0);
  53.               RI=0;
  54.               delay(10000);
  55.               }
  56.   }
  57.   }
  58. }
复制代码

5.3乙机接收程序
  1. #include<AT89X52.h>
  2.   #define uint unsigned int
  3.   #define uchar unsigned char
  4.   void delay(uint t);
  5. void display(void);
  6. uchar a;
  7. uchar code b[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  8.    void main(void)
  9. {
  10.               a=250;
  11.               //P0=0x00;
  12.               SCON=0x50;
  13.               TMOD=0x20;
  14.               PCON=0x00;
  15.               TH1=0xfd;  
  16.     TL1=0xfd;
  17.               TR1=1;
  18.   while(1)
  19.   {
  20.    display();
  21.    while(RI==1)

  22.   {               
  23.                  RI=0;
  24.               a=SBUF;
  25.               SBUF=a;
  26.               while(TI==0);
  27.               TI=0;
  28.               delay(1000);
  29.      //display();
  30.         }
  31.                             display();
  32.               }
  33. }            
  34. 5.4延时程序
  35.   void delay(uint t)
  36. {
  37.               uint i;
  38.               do
  39.               {
  40.                             for(i=0;i<10;i++);
  41.               }while(--t);
  42. }            
复制代码
6仿真实验

单片机接收到电路反馈回来的时间信息,经过相应算法的处理后, 得到物体到发射器的距离与方向等信息,既可以控制相应的被控对象进行相应的动作, 另一方面可以通过LED 显示相应的距离。为节省单片机硬件资源,采用动态扫描方式显示。
  • 结束语
《单片机原理及接口技术》课程设计是自动化专业开设的实践教学必修课。要求学生能够根据所掌握单片机应用系统设计方法,依据所给定任务进行简单的工程应用系统部分环节综合设计,从而把所学专业课贯穿起来,在工程应用设计中锻炼和提高学生能力。在这次的单片机课程学习以及课设实验的设计中,我深刻的理解到了单片机串行通信的原理以及工作形式。同时在这个实验课设过程中我也深刻的理解了单片机的课程知识。
参考文献:
  • 《单片机原理及应用》 余发山 王福忠 主编  中国电力出版社
  • 河南理工大学单片机实验指导书2017


  • https://wenku.baidu.com/view/1026634169eae009581bec34.html

《单片机原理及接口技术》课程设计成绩评定表

学院名称:电气工程及自动化学院  专业班级:自动化1501

学生姓名:        叶铭      学    号:311508070129     

课程设计题目:基于单片机的串口通信设计     

指标

主要观测点

重分数

评价分数

学习态度

(10分)

学习态度认真,科学作风严谨,

严格按进度开展各项工作

10


设计方案

(10分)

方案合理,思路正确;

参数计算正确,元件选型合理

10


设计报告

(60分)

结构严谨,逻辑性强,层次清晰

10


语言准确,文字流畅

10


电气原理图及程序流程图规范、清晰

表格完整无误

20


参考文献规范,有文献引用

5


书写工整,排版规范

15


作品验收

(20分)

功能完成程度,问题回答准确度

20


总评成绩:


指导老师签名:

                                  年   月   日


完整的Word格式文档51黑下载地址:
单片机课程设计报告-叶铭自动化1501.doc (307 KB, 下载次数: 46)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表