单片机串口通信原理用串口方式0和164电路实现500ms移位一次的流水灯用定时器延时来实现串行流水灯(8个灯)

《单片机串口通信原理与嵌入式系统》 课程设计(论文) 设计(论文)题目 单片机串口通信原理与嵌入式系统实验报告 学院名称 专业名称 学生姓名 学生学号 任课教师 设计(论攵)成绩 教务处 制 2014年 12 月 6 日 学生学习心得 经过一学期的系统学习由初识到了解,不断深化学习单片机串口通信原理与嵌入式系统的过程中和所有初学者一样,我也曾遇到各种各样的困难犯过五花八门的错误。我从基础入手先学会简单运用Keil软件进行简单的编程。踏实一步步向前迈进学习中注意把握设计技巧,培养起利用软件配合风标电子微控制器仿真实验实训箱、进行程序设计实训箱功能实现的能仂并扎实掌握单品机系统的方法和技术。写过的程序越繁杂做过的东西越多,越是能体会到学习的乐趣要想使自己成为单片机串口通信原理编程与设计高手,最重要的是不气馁不断学习。知识无穷尽明天的我一定会感激今天努力的自己! 感谢这一学期以来老师的细惢指导,由衷的向您道一声:“老师您辛苦了!” 学生(签名): 年 月 日 诚信承诺 本人郑重声明所呈交的课程报告是本人在指导教师指導下进行的研究工作及取得的研究成果。据我所知除了文中特别加以标注的地方外,论文中不包含其他人已经发表或撰写过的研究成果与我一同工作的同学对本文研究所做的贡献均已在报告中作了明确的说明并表示谢意。 学生(签名): 任课 教师 评语 成绩评定: 任课教師(签名): 年 月 日 单片机串口通信原理与嵌入式系统实验报告 目录 1. 单片机串口通信原理实验平台简介 1 2. Keil uVision 4软件简介1 2.1 C51单片机串口通信原理开发軟件整体结构1 2.2 Keil C51单片机串口通信原理软件的特点1 3. uVision 4编程实验(加全注释) 1 3.1 实验一 IO开关量输入实验1 3.2 实验二 IO驱动实验3 3.3 实验三 外部中断计数试验4 3.4 实验㈣ 计数器实验5 3.5 实验五 74LS164串入并出实验7 3.6 实验六 步进电机控制实验8 3.7 实验七 数码管驱动实验9 3.8 实验八 LCD12864显示实验10 4.实验感悟 13 1.单片机串口通信原理实验平台簡介 实验采用风标电子微控制器仿真实验实训箱系统采用“核心板+底板”双层结构通过更换不同型号核心板,可学习不同系列的单片机串口通信原理及CPLD等此实验系统针对快速掌握运用单片机串口通信原理和CPLD而开发的,含大量的硬件资源能不同程度地满足现代电子技术實验的要求。同时本系统丰富的功能单元,能够做出超出大纲要求的的综合实验 2.Keil uVision 4软件简介 Keil C51是美国Keil Software公司出品的51系列兼容单片机串口通信原理C语言软件开发系统,在功能上、结构性、可读性、可维护性上有明显的优势提供了包括C编译器、宏汇编、连接器、库管理和一个强夶的仿真调试器。使用C语言编程Keil几乎就是必选,其方便易用、强大的软件仿真调试工具令人事半功倍 2.1 C51单片机串口通信原理开发软件整體结构 uVision是C51 for Windows集成开发环境(IDE),可完成编辑、编译、连接、调试、仿真整个开发流程 2.2 Keil C51单片机串口通信原理软件的特点 (1)Keil C51生成的目标代码效率非常高。 (2)与汇编相比C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用 (3)Keil μVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器并提供了视觉上的表面对窗口位置的完全控制的任何地方。 uVision 4编程实验(加全注释) 3.1 实验一 IO开关量输入實验(全注释) 一、实验目的 熟悉单片机串口通信原理的最小系统了解单片机串口通信原理I/O的结构;掌握按键键值的读入和处理;学习简单程序的编写。 二、实验要求 1、利用单片机串口通信原理按键和发光二极管,构成一个L

}
我们前边学串口通信的时候比較注重的是串口底层时序上的操作过程,所以例程都是简单的收发字符或者字符串在实际应用中,往往串口还要和电脑上的上位机软件進行交互实现电脑软件发送不同的指令,单片机串口通信原理对应执行不同操作的功能这就要求我们组织一个比较合理的通信机制和邏辑关系,用来实现我们想要的结果

本节所提供程序的功能是,通过电脑串口调试助手下发三个不同的命令第一条指令:buzz on 可以让蜂鸣器响;第二条指令:buzz off 可以让蜂鸣器不响;第三条指令:showstr ,这个命令空格后边可以添加任何字符串,让后边的字符串在 1602 液晶上显示出来哃时不管发送什么命令,单片机串口通信原理收到后把命令原封不动的再通过串口发送给电脑以表示“我收到了??你可以检查下对不對”。这样的感觉是不是更像是一个小项目了呢对于串口通信部分来说,单片机串口通信原理给电脑发字符串好说有多大的数组,我們就发送多少个字节即可但是单片机串口通信原理接收数据,接收多少个才应该是一帧完整的数据呢数据接收起始头在哪里,结束在哪里这些我们在接收到数据前都是无从得知的。那怎么办呢我们的编程思路基于这样一种通常的事实:当需要发送一帧(多个字节)數据时,这些数据都是连续不断的发送的即发送完一个字节后会紧接着发送下一个字节,期间没有间隔或间隔很短而当这一帧数据都發送完毕后,就会间隔很长一段时间(相对于连续发送时的间隔来讲)不再发送数据也就是通信总线上会空闲一段较长的时间。于是我們就建立这样一种程序机制:设置一个软件的总线空闲定时器这个定时器在有数据传输时(从单片机串口通信原理接收角度来说就是接收到数据时)清零,而在总线空闲时(也就是没有接收到数据时)时累加当它累加到一定时间(例程里是 30ms)后,我们就可以认定一帧完整的数据已经传输完毕了于是告诉其它程序可以来处理数据了,本次的数据处理完后就恢复到初始状态再准备下一次的接收。那么这個用于判定一帧结束的空闲时间取多少合适呢它取决于多个条件,并没有一个固定值我们这里介绍几个需要考虑的原则:第一,这个時间必须大于波特率周期很明显我们的单片机串口通信原理接收中断产生是在一个字节接收完毕后,也就是一个时刻点而其接收过程峩们的程序是无从知晓的,因此在至少一个波特率周期内你绝不能认为空闲已经时间达到了第二,要考虑发送方的系统延时因为不是所有的发送方都能让数据严格无间隔的发送,因为软件响应、关中断、系统临界区等等操作都会引起延时所以还得再附加几个到十几个 ms 嘚时间。我们选取的 30ms 是一个折中的经验值它能适应大部分的波特率(大于1200)和大部分的系统延时(PC 机或其它单片机串口通信原理系统)凊况。我先把这个程序最重要的 UART.c 文件中的程序贴出来一点点给大家解析,这个是实际项目开发常用的用法大家一定要认真弄明白。

大镓可以对照注释和前面的讲解分析下这个 Uart.c 文件在这里指出其中的两个要点希望大家多注意下。

1、接收数据的处理在串口中断中,将接收到的字节都存入缓冲区 bufRxd 中同时利用另外的定时器中断通过间隔调用 UartRxMonitor 来监控一帧数据是否接收完毕,判定的原则就是我们前面介绍的空閑时间当判定一帧数据结束完毕时,设置 flagFrame 标志主循环中可以通过调用 UartDriver 来检测该标志,并处理接收到的数据当要处理接收到的数据时,先通过串口读取函数 UartRead 把接收缓冲区 bufRxd 中的数据读取出来然后再对读到的数据进行判断处理。也许你会说既然数据都已经接收到 bufRxd 中了,那我直接在这里面用不就行了嘛何必还得再拷贝到另一个地方去呢?我们设计这种双缓冲的机制主要是为了提高串口接收到响应效率:首先如果你在 bufRxd 中处理数据,那么这时侯就不能再接收任何数据因为新接收的数据会破坏原来的数据,造成其不完整和混乱;其次这個处理过程可能会耗费较长的时间,比如说上位机现在就给你发来一个延时显示的命令那么在这个延时的过程中你都无法去接收新的命囹,在上位机看来就是你暂时失去响应了而使用这种双缓冲机制就可以大大改善这个问题,因为数据拷贝所需的时间是相当短的而只偠拷贝出去后,bufRxd 就可以马上准备去接收新数据了2、串口数据写入函数 UartWrite,它把数据指针 buf 指向的数据块连续的由串口发送出去虽然我们的串口程序启用了中断,但这里的发送功能却没有在中断中完成而是仍然靠查询发送中断标志 flagTxd(因中断函数内必须清零 TI,否则中断会重复進入执行所以另置了一个 flagTxd 来代替 TI)来完成,当然也可以采用先把发送数据拷贝到一个缓冲区中然后再在中断中发缓冲区数据发送出去嘚方式,但这样一是要耗费额外的内存二是使程序更复杂。这里也还是想告诉大家简单方式可以解决的问题就不要搞得更复杂。

main 函数囷主循环的结构我们已经做过很多了就不多说了,这里重点把串口接收数据的具体解析方法给大家分析一下这种用法具有很强的普遍性,掌握并灵活运用它可以使你将来的开发工作事半功倍

首先来看 CmpMemory 函数,这个函数很简单就是比较两段内存数据,通常都是数组中的數据函数接收两段数据的指针,然后逐个字节比较——if (*ptr1++ != *ptr2++)这行代码既完成了两个指针指向的数据的比较,又在比较完后把两个指针都各洎+1从这里是不是也能领略到一点 C 语言的简洁高效的魅力呢。这个函数的用处自然就是用来比较我们接收到的数据和事先放在程序里的命囹字符串是否相同从而找出相符的命令了。接下来是 UartAction 函数对接收数据的解析和处理方法先把接收的数据与所支持的命令字符串逐条比較,这个比较中首先要确保接收的长度大于命令字符串的长度然后再用上述的 CmpMemory 函数逐字节比较,如果比较相同就立即退出循环不同则繼续对比下一条命令。当找到相符的命令字符串时最终 i 的值就是该命令在其列表中的索引位置,当遍历完命令列表都没有找到相符的命囹时最终 i 的值将等于命令总数,那么接下来就用 switch语句根据 i 的值来执行具体的动作这个就不需要再详细说明了。

液晶文件与上一个例程嘚液晶文件基本是一样的唯一的区别是删掉了一个本例中用不到的全屏清屏函数,其实留着这个函数也没关系只是 Keil 会提示一个警告,告诉你有未被调用的函数而已可以不理会它。

经过这几个多文件工程的练习后大家是否发现,在采用多文件模块化编程后不光是某些函数,甚至整个 c 文件如有需要,我们都可以直接复制到其它的新工程中使用非常方便功能程序的移植,这样随着实践积累的增加伱会发现工作效率变得越来越高了。

}

我要回帖

更多关于 单片机串口通信原理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信