单片

2024-09-10

单片(9篇)

1.单片 篇一

课题研究的目的和意义

手动变速箱在换挡时,如果两个齿轮轮齿转速不相等时强制挂挡,由于两齿轮间存在巨大的速度差,会发生冲击和噪音。这种情况不仅会使挂挡动作变得非常困难,同时会使齿轮的齿端磨损加剧,甚至会造成轮齿折断。所以,在换挡过程中必须使待啮合的齿轮转速相等,即同步,才能平顺的挂挡而不至于给齿轮造成巨大的损害。这就是同步器的作用。 所以说,同步器的性能好坏直接决定了手动变速箱换挡品质的优劣,同步器质量的好坏也直接决定了手动变速箱的使用寿命的长短[4][5]。汽车是一个由许多零部件组成的复杂机械系统,由于汽车的机械系统的复杂性和同步器工作过程的复杂性,同步器工作过程尚不能通过理论计算或者仿真的手段来进行准确的分析,只有通过试验的手段才可得到更贴近实际情况的结果。

国内外研究现状

法国的一家独立的实验室 etsm 专业技术与服务实验室(etsm  expertise technology & services  )在 2017 年开发了一套用于测试同步器的摩擦性能的试验台,如图 1.1 所示。该试验台用电惯量的方法模拟同步器的惯量,用气动的驱动方式作为同步器加载时的轴向力,其控制和数据采集使用了 ni 公司的 labview及其他配合使用的套件,它能够用于测试同步器的动力学特性和摩擦性能[8]。

第二种思路的同步器试验台的设计方法是在不拆解变速箱的情况下设计试验台来研究同步器的性能和寿命。 以整个变速箱为试验对象来检测同步器性能和寿命的的试验方法在国外较早开始了研发,其中日本在这方面的研究较早,已经研发了不同类型的试验台,并申请了相关技术专利。具有代表性的是新日本特机株式会社利用电惯量研发的手动变速器试验台,该试验台机构简单,以步进电机和启动系统混合驱动装置作为动力,可以在不拆解变速箱的情况下进行同步性能试验、同步耐久性试验 [10]。

同步性能相关理论分析

解锁阶段——两圆锥面的转速相同(     0)后,接合套8 沿锁环倒角斜面向前滑动与锁环 3 啮合,此时,接合套 8 可以继续向前移动; 啮合阶段——接合套8平稳而快速的越过同步环3并与待啮合齿轮接合齿圈2 进入啮合; 换挡完成阶段——在发动机传递来的动力作用下,接合套 8 和待啮合齿轮接合齿圈 2 上的犬齿齿端的倒斜面结构将会继续保持接合套 8 的接合状态,驾驶员将会停止施加换挡操作力。

同步器试验要求

全国汽车标准化技术委员会在 2017 年发布并实施了中华人民共和国汽车行业标准 qc/t568.3-2017《汽车机械式变速器台架试验方法‐中型》,该标准明确规定了中型汽车机械式变速器台架试验方法,qc/t 568.3-2017 主要适用于输入扭矩为 400nm~800nm,挡位数为 4 挡~7 挡的汽车机械式变速器总成[26][27]。

同步器性能测试的主要内容是测试同步器换挡过程的动态性能。同步器性能测试有以下要求[20]:一、性能测试之前需要进行磨合,一般试验要求是同步器在设计条件下进行300 次换挡,完成 300 次换挡后要更换润滑油;二、换挡杆上需要安装测量换挡力的传感器,并进行标定;三、试验时可采用相邻两挡间交替换挡或者单向换挡方式进行;四、每次测试需要进行三次试验取平均值;五、记录变速器一轴转速、换挡时间、换挡力(同步力矩)之间的关系曲线,并计算出同步冲量。

2.单片 篇二

一、内容提要

本讲主要向大家介绍51系列单片机的最小系统的实现并通过编写程序来实现对单片机IO口的输出控制。以点亮外部连接的LED (发光二极管) 为例, 简要的介绍单片机的原理、最小系统的组成, 并通过简单的C51程序设计来讲述编译软件Keil的使用并下载Hex文件烧写单片机。

二、原理简介

在了解原理之前, 首先让我们思考一个问题, 什么是单片机, 单片机有什么用?这是一个有意思的问题, 因为任何人都不能给出一个被大家都认可的概念, 那到底什么是单片机呢?普遍来说, 单片机又称单片微控制器, 是在一块芯片中集成了CPU (中央处理器) 、RAM (数据存储器) 、ROM (程序存储器) 、定时器/计数器和多种功能的I/O (输入/输出) 接口等一台计算机所需要的基本功能部件, 从而可以完成复杂的运算、逻辑控制、通信等功能。在这里, 我们没必要去找到明确的概念来解析什么是单片机, 特别在使用C语言编写程序的时, 不用太多的去了解单片机的内部结构以及运行原理等。从应用的角度来说, 通过从简单的程序入手, 慢慢的熟悉然后逐步深入精通单片机。

在简单了解了什么是单片机之后, 然后我们来构建单片机的最小系统, 单片机的最小系统就是让单片机能正常工作并发挥其功能时所必须的组成部分, 也可理解为是用最少的元件组成的单片机可以工作的系统。对51系列单片机来说, 最小系统一般应该包括:单片机、时钟电路、复位电路、输入/输出设备等 (见图1) 。

三、电路详解

依据上文的内容, 设计51系列单片机最小系统见图2。

下面就图2所示的单片机最小系统各部分电路进行详细说明。

1. 时钟电路

在设计时钟电路之前, 让我们先了解下51单片机上的时钟管脚:

XTAL1 (19脚) :芯片内部振荡电路输入端。

XTAL2 (18脚) :芯片内部振荡电路输出端。

XTAL1和XTAL2是独立的输入和输出反相放大器, 它们可以被配置为使用石英晶振的片内振荡器, 或者是器件直接由外部时钟驱动。图2中采用的是内时钟模式, 即采用利用芯片内部的振荡电路, 在XTAL1、XTAL2的引脚上外接定时元件 (一个石英晶体和两个电容) , 内部振荡器便能产生自激振荡。一般来说晶振可以在1.2~12MHz之间任选, 甚至可以达到24MHz或者更高, 但是频率越高功耗也就越大。在本实验套件中采用的11.0592M的石英晶振。和晶振并联的两个电容的大小对振荡频率有微小影响, 可以起到频率微调作用。当采用石英晶振时, 电容可以在20~40p F之间选择 (本实验套件使用30p F) ;当采用陶瓷谐振器件时, 电容要适当地增大一些, 在30~50p F之间。通常选取33p F的陶瓷电容就可以了。

另外值得一提的是如果读者自己在设计单片机系统的印刷电路板 (PCB) 时, 晶体和电容应尽可能与单片机芯片靠近, 以减少引线的寄生电容, 保证振荡器可靠工作。检测晶振是否起振的方法可以用示波器可以观察到XTAL2输出的十分漂亮的正弦波, 也可以使用万用表测量 (把挡位打到直流挡, 这个时候测得的是有效值) XTAL2和地之间的电压时, 可以看到2V左右一点的电压。

2. 复位电路

在单片机系统中, 复位电路是非常关键的, 当程序跑飞 (运行不正常) 或死机 (停止运行) 时, 就需要进行复位。MCS-5l系列单片机的复位引脚RST (第9管脚) 出现2个机器周期以上的高电平时, 单片机就执行复位操作。如果RST持续为高电平, 单片机就处于循环复位状态。复位操作通常有两种基本形式:上电自动复位和开关复位。图2中所示的复位电路就包括了这两种复位方式。上电瞬间, 电容两端电压不能突变, 此时电容的负极和RESET相连, 电压全部加在了电阻上, RESET的输入为高, 芯片被复位。随之+5V电源给电容充电, 电阻上的电压逐渐减小, 最后约等于0, 芯片正常工作。并联在电容的两端为复位按键, 当复位按键没有被按下的时候电路实现上电复位, 在芯片正常工作后, 通过按下按键使RST管脚出现高电平达到手动复位的效果。一般来说, 只要RST管脚上保持10ms以上的高电平, 就能使单片机有效的复位。图中所示的复位电阻和电容为经典值, 实际制作是可以用同一数量级的电阻和电容代替, 读者也可自行计算RC充电时间或在工作环境实际测量, 以确保单片机的复位电路可靠。

3. EA/VPP (31脚) 的功能和接法

51单片机的EA/VPP (31脚) 是内部和外部程序存储器的选择管脚。当EA保持高电平时, 单片机访问内部程序存储器;当EA保持低电平时, 则不管是否有内部程序存储器, 只访问外部存储器。对于现今的绝大部分单片机来说, 其内部的程序存储器 (一般为flash) 容量都很大, 因此基本上不需要外接程序存储器, 而是直接使用内部的存储器。在本实验套件中, EA管脚接到了VCC上, 只使用内部的程序存储器。这一点一定要注意, 很多初学者常常将EA管脚悬空, 从而导致程序执行不正常。

4. P0口外接上拉电阻

51单片机的P0端口为开漏输出, 内部无上拉电阻 (见图3) 。所以在当做普通I/O输出数据时, 由于V2截止, 输出级是漏极开路电路, 要使“1”信号 (即高电平) 正常输出, 必须外接上拉电阻。另外, 避免输入时读取数据出错, 也需外接上拉电阻。在这里简要的说下其原因:在输入状态下, 从锁存器和从引脚上读来的信号一般是一致的, 但也有例外。例如, 当从内部总线输出低电平后, 锁存器Q=0, Q=1, 场效应管V1开通, 端口线呈低电平状态。此时无论端口线上外接的信号是低电平还是高电平, 从引脚读入单片机的信号都是低电平, 因而不能正确地读入端口引脚上的信号。又如, 当从内部总线输出高电平后, 锁存器Q=1, Q=0, 场效应管V1截止。如外接引脚信号为低电平, 从引脚上读入的信号就与从锁存器读入的信号不同。所以当P0口作为通用I/O接口输入使用时, 在输入数据前, 应先向P0口写“1”, 此时锁存器的Q端为“0”, 使输出级的两个场效应管V1、V2均截止, 引脚处于悬浮状态, 才可作高阻输入。

总结来说:为了能使P0口在输出时能驱动NMOS电路和避免输入时读取数据出错, 需外接上拉电阻。在本实验套件中采用的是外加一个10K排阻。此外, 51单片机在对端口P0—P3的输入操作上, 为避免读错, 应先向电路中的锁存器写入“1”, 使场效应管截止, 以避免锁存器为“0”状态时对引脚读入的干扰。

5. LED驱动电路

细心的读者可能已经发现, 在最小系统中, 发光二极管 (LED) 的接法是采取了电源接到二极管正极再经过1K电阻接到单片机I/O口上的 (见图4中的接法1) 。为什么这么接呢?首先我们要知道LED的发光工作条件, 不同的LED其额定电压和额定电流不同, 一般而言, 红或绿颜色的LED的工作电压为1.7V~2.4V, 蓝或白颜色的LED工作电压为2.7~4.2V, 直径为3mm LED的工作电流2m A~10m A。在这里采用红色的3mm的LED。其次, 51单片机 (如本实验板中所使用的STC89C52单片机) 的I/O口作为输出口时, 拉电流 (向外输出电流) 的能力是μA级别, 是不足以点亮一个发光二极管的。而灌电流 (往内输入电流) 的方式可高达20m A, 故采用灌电流的方式驱动发光二极管。当然, 现今的一些增强型单片机, 是采用拉电流输出 (接法2) 的, 只要单片机的输出电流能力足够强即可。另外, 图4中的电阻为1K阻值, 是为了限制电流, 让发光二极管的工作电流限定在2m A~10m A。

四、程序设计

在单片机编程语言上, 有C语言和汇编两种选择。本系列教程采用C语言编写程序, 在此对C语言和汇编语言在进行单片机开发时进行下简单比较, 汇编语言面向硬件, 要求对硬件的特性如寄存器之类的比较熟悉, 执行效率高, 但可读性和移植性差, 不同的单片机之间的程序不能通用, 例如学会了51单片机的汇编指令, 却没法用到AVR单片机上。C语言面向过程, 可读性和移植性很好, 效率要比汇编低一些。对于刚接触单片机的人来说, 学习这两种语言是一样的, 但在以后的开发效率上, C语言的优势就体现出来了, 其可以几乎完全不改动的情况下移植, 大大提高了开发速度。

控制发光二极管D1闪烁的C语言源程序

1. 程序详细说明

(1) 头文件包含。程序接下来调用的P0_0就是该头文件中定义好的一个寄存器地址。在对单片机内部的寄存器操作之前, 应申明其来处, 有兴趣的读者可以看看AT89X52.h文件中的内容。

(2) 宏定义led, 便于直观理解也便于程序修改, 将P0_0口命名为led, 这样在程序中就可以用led代替P0_0口进行操作。

(3) 延时函数声明。函数在调用之前必须进行声明, 由于函数定义放在主函数之后, 所以在主函数之前对延时函数进行了声明。

(4) 主函数入口。主函数不传递参数也不返回值。

(5) 死循环。

(6) 输出高电平, led不亮。

(7) 延时一段时间, 以便人眼能够直观看到。

(8) 输出低电平, led点亮。

(9) 延时一段时间。

(10) 延时函数定义。

(11) for语句循环延时。

2. 程序流程图与实验现象

程序流程如图5所示。经编译软件 (keil) 编译, 生成单片机烧写文件, 然后就可下载到单片机内部运行了, 硬件电路板如图6所示, 本实验板上用的是STC89C52RC, 可以用通过板载USB转串口烧写程序。故将USB线 (本实验套件中有) 连接电脑和实验板。供电电源可以从USB取, 也可以从外部电源取电。冷启动, 即先点击下载, 然后再上电。下载程序到单片机内运行后, 可以看到实验板上P0_0口外接的LED灯 (D1) 一亮一灭的闪烁。

五、总结

本讲主要介绍了51单片机最小系统的设计以及编写第一个简单的程序。从过该实验, 可以掌握单片机的开发流程, 从而快速入门。在该讲中应该注意几个问题:

1.本讲座中采用C语言编写程序, 因为C语言的可读性和可移植性强。若读者没有学过C语言, 则应去了解和掌握相应的C语言知识。C语言易学易用, 相信很快就能熟练。

2.程序编译软件采用的是Keil。限于篇幅的原因, 在这里就不对其进行讲述, 如果读者有对其不明白的地方, 可以到本刊论坛的单片机版面, 作者制作了一个详细的Keil入门教程。我们通过Keil编译程序, 最终生成烧写单片机的Hex代码文件。Keil软件界面如图7所示, 中间空白区域为代码区, 左侧为项目列表, 最下面为消息窗口。

3.本实验板上所用的STC单片机通过串口下载程序。其上位机软件界面如图8所示 (推荐使用V3.1版本, 最新版本可以到STC主页上下载:http://www.mcu-memory.com/) , 烧写操作很简单, 点击“Open File”按钮浏览找到所生成要烧写的Hex文件后, 单片机断电, 点击“下载”按钮, 单片机上电, 程序就可下载到单片机中了。

4.产品组件

读者如果按照该讲内容进行理解并实践的话, 可以说单片机就算入门了。下一讲将进一步深入, 将要介绍单片机内部定时器和中断系统, 敬请期待。

本刊为方便用户学习, 特为本文答疑解惑, 用户可直接发离线文件到QQ:1320160388

3.如何入学单片机 篇三

【关键词】单片机 实践 方法

了解计算机的基本知识------数制及电平。数制是以表示数值所用的数字符号的个数来命名的,并按一定进位规则进行计数的方法。有二进制、八进制、十进制、十六进制。二进制的数字符号为0、1,基数为2,逢二进一(借一为二),区分符为B。八进制的数字符号为0、1、2、3、4、5、6、7,基数为8,逢八进一(借一为八),区分符为 O。十进制的数字符号为0、1、2、3、4、5、 6、7、8、9,基数为10,逢十进一(借一为十),区分符为D或不加。十六进制的数字符号为0、1、2、3、4、5、6、7、8、9、A、B、C、D、 E、F,基数为16,逢十六进一(借一为十六),区分符为H。要熟练掌握各进制之间的转换。电平指电压的高低。单片机中只有两种电平:高电平和低电平。单片机的电源电压为+5v,那么高电平为+5v。单片机的电源电压为+3.3v,那么高电平为+3.3v。单片机中的低电平为0v。如果,单片机输出1,其实就是某个管脚输出高电平。我们给某个管脚输入高电平,就是向单片机输入了1。入学单片机,不可能什么都了解,了解这两点就已经能够用stc89c51点亮一个LED灯了。学习就是从最简单的入手到深入学习的过程。

一、选一本参考书

学习自然要离不开书本,无论是单片机的内部结构,还是指令、接口电路等都是很抽象的内容,很多同学感到枯燥和空洞,觉得单片机很难学。主要原因是学生们刚刚接触单片机,没有一定的感性认识,缺少一个循序渐进的学习过程。就如同要求小学生阅读古典名著,他们肯定看得很枯燥、很乏味,若换一种呈现形式,效果一定会大相径庭,如以连环画或动画片的形式出现,小学生肯定会喜欢阅读和观看的。学习单片机也一样,需要有符合大学生认知特点的学习方式,以及一两本通俗易懂、趣味性强、实践内容丰富的参考书来辅助学习,加深对概念、术语、原理等的理解。我第一本单片机教书是别人推荐的郭天翔的51单片机学习,个人认为本书编的比较经典,身边很多人都在看他的书。当然每个人的口味不一样,所以自己可以从网络中寻找自己的比较和胃口的书籍。推荐一本书《新概念 51 单片机 C 语言教程:入门、提高、开发、拓展全攻略》,对入学者很有帮助。

二、要有一套开发板套件

单片机的学习,只看书不动手是学不会的。学习单片机可以借助仿真软件(如 Proteus)来学习,仿真软件 Proteus 功能强大,对单片机的主流芯片都支持仿真,学习单片机时可以不需要任何的硬件,它不仅可以电路仿真,而且还可以直接在基于原理图的虚拟单片机上进行编程,实现程序调试,甚至能看到输入和输出的效果。但是,由于仿真精度等原因,仿真的结果还不够精细,有时还会输出错误的结果,而且缺少真实感,也不利于动手能力的培养。现在开发板也很便宜了,几十块钱,就能买到一个不错的开发板,平时少吃一些零食,就能省出开发板的钱。用软件仿真,是达不到实物的效果的,你用实物点亮一个LED灯等,用芯片驱动一个电机,你会感到很兴奋的刺激,然而软件就不能有这个效果,用开发板实验,你会感觉自己在玩玩具一样,自己总会有突发的奇想,会很有意思的,因此建议大家最好还是买一套开发板。

三、学会一门编程语言

硬件要运行,需要软件的驱动。利用编程就是能够DIY自己的东西,这就提高了对单片机兴趣。学习编程要用到编程软件,对软件的使用要求也很低,能够在keil中新建一个工程,能够在vc++中新建一个文件就可以了,其他的功能在以后学习中自己就能够慢慢摸索到。

(一)学C 语言: 1.C 语言是一种结构化语言,它层次清晰,便于按模块化方式编写程序,易于调试和维护。它的表现能力和处理能力极强。C 语言具有丰富的运算符和数据类型,便于实现各类复杂的数据结构,并可以直接访问内存地址,进行位(bit)一级的操作。2.C 语言编程较容易,程序短、可移值性好、可读性强。

(二)学汇编语言:1.汇编语言接近硬件、实时性好,可以直接控制单片机的资源。用它编写的程序,短小精炼,而且在编程的时候,可以加深对单片机内部结构的了解。2.学习汇编语言可以参考相关的书籍。汇编语言有 100 多条指令,常用的也就二三十条,可以先记住常用的汇编指令,慢慢熟悉。3.要学会看懂别人的汇编语言程序,将汇编语言的指令翻译成自己容易理解的功能描述性文字,注释在程序后面,便于以后引用。刚开始学的时候先学c语言,c语言简单,先把c语言基本的语法搞懂之后,用c语言编几个程序,再学汇编的時候,就能够对硬件有更深入的了解。我建议学好c语言,了解汇编就可以了,这是对一个入学单片机的人而言。

四、要持之以恒

这一点无论对做什么而言都是一样的,学习单片机一开始会很好奇,充满兴趣去学习,在学习的过程中会碰到比较棘手的事情,比如自己写的程序有问题,自己的程序和呈现的结果不一样,遇到问题大家不要放弃,这时静下心来先想想,去请教别人,或通过网络来查询,这个过程能够锻炼自己的学习能力,对单片机学习就是要锻炼自己的学习能力,那么多的芯片,一个人之前不可能都学过。当你解决问题之后,自己的成果是看得见摸得着,比如你刚学会做流水灯时,当你看到自己的流水灯闪闪发光时,是不是很有成就感?学习单片机,不是先把理论东西全看一遍,而是做什么,去学什么,需要什么,我要有什么。在学习过程要多做一些实物,多做一些自己想要或喜欢的东西,不要担心自己的理论知识不够用,实践出真知。在实践中,你会发现,你做东西,会碰到各种新的问题,而这些问题能够锻炼自己各方面的能力。

参考文献:

[1]荆蕾,王玮.学习单片机课程应具备的基础知识之我见. [A]. 高教研究 2012年3月刊 总第330期.

[2]杨晓红.单片机学习经验之谈.[A].科技资讯.

4.单片机学习 篇四

为期二十五天的单片机培训今天就要告一个段落了,回想起来,还有点舍不得。从第一天进来,看见单片机时的好奇及茫然,到之后的点滴学习的辛酸和喜悦:点亮第一个放光二极管,接通第一个七段数码管,用蜂鸣器发出近乎噪声的音乐……当时的无数次尝试,无数次失败,在现在看来都是那么的美好。

第一次进实验室时,看见满桌的实验仪器,心中竟漫上一丝丝的喜悦。对于从小就喜欢乱拆小电器的我,如果能掌握这些神秘仪器的用法,真是再好不过的事情了,真希望老师立马就教会我们这些东西。然后老师给我们讲我们暑假培训的目地就是学会单片机——一块拥有神秘芯片和器件的绿色板子。然后就是正式的培训上课了。

每天早上六七点起床,匆匆吃过早饭就得搭公交车往南区赶。一个小时的公交车奔波对于有点晕车的我可是个不小的挑战。下了车有点头晕,还没有回过神来,就和同学一起走进实验室了。晚上九点下课之后又得挤公交回去,十一二点才能睡觉。这样一两天之后觉得很累很累。想着得这样奔波一个月,真有点害怕,不知道自己能不能坚持下来。但我一直坚信这样做是值得的,因为在这边有我喜欢的东西。每天我都能学到新的东西,每天我都能更进一步掌握单片机的用法,每天我都能更加熟练地使用前段时间学到的东西。看视频,认真学里面老师的方法,理解他讲解的每一个器件的原理,跟着他编程驱动自己的单片机;问老师,把自己的想法告诉老师,让老师给我讲解在学习单片机时的困惑;和同学交流,一起交流学习的心得和自己的收获,相互关心相互帮助。随着时间的过去,大家都在进步,人数好像也越来越少。从进来的第一天老师就告诉我们要学会坚持,因为每天重复的生活,总会让人产生厌倦,而很多同学就是受不了这样的生活而选择了中途放弃。虽然我也想回家想摆脱这样的繁累,但还是选择了留下来,因为我知道,这里有我喜欢的东西。就这样日子一天天地过去直到今天,看着自己编的那么多程序,自己关于单片机的认识和掌握,真的很庆幸自己选择了留下来而没有中途退出。

5.单片机课程设计 篇五

前言

在各种灾害中,火灾是最经常、最普通地威胁公众安全和社会发展的灾害之一。人类能够对火进行利用和控制,是文明进步的一个重要标志。火,给人类带文明进步、光明和温暖。但是,失去控制的火,就给人类造成灾害。据统计,我国 70 年代火灾年平均损失不到 2.5 亿元,80 年代火灾年平均损失不到

3.2 亿元。进入 90 年代,特别是 1993 年以来,火灾造成的直接财产损失上升到年均十几亿元,年均死亡 2000 多人。2010年上海静安区高层住宅着火,导致58人死亡,70余人受伤。2014年1月云南香格里拉大火,烧毁房屋100多栋,直接经济损失1亿多元人民币。火灾事件经常发生,防止火灾事故关系到人民群众的生命财产安全和社会和谐稳定。现在各种电子产品的普及,再加上人们防火意识的不强,这些都给火灾的发生带来了巨大的安全隐患。

6.单片机学习心得 篇六

计算机科学与技术

学号:

单片机是一门应用性和综合性很强的学科,它综合了电子技术中的模拟电路和数字电路方面的知识,特别是数字电路,因为数字电路在里面的应用很多。学习单片机最好先从汇编语言入手,虽然汇编语言是低级语言,编程效率低,但它比C语言占用内存小,执行速度快等优点,在刚接触单片机时更容易学习。由于单片机涉及的知识很多,所以我们只能循序渐进的学习,逐步的积累,没有什么捷径可循。

刚开始学习的时候,对单片机没有什么认识,不知道什么是单片机,更不知道它有什么作用。通过学习才大体知道了单片机的一些知识。由中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口、定时器/计数器以及串行通信接口等集成在一块芯片上,构成了一个单片微型计算机,简称为单片机。它的应用范围很广,在工业自动化中应用有数据采集、测控技术。在智能仪器仪表中应用有数字示波器、数字信号源、数字万用表、感应电流表,自动取款机等。在消费类电子产品中应用有洗衣机、电冰箱、空调机、电视机、微波炉、手机、IC卡、汽车电子设备等。在通讯方面应用有调制解调器、程控交换技术、手机、小灵通等。在武器装备方面应用有飞机、军舰、坦克、导弹、航天飞机、鱼雷制导、智能武器等。学习单片机要投入大量的时间,如果只想速成,几乎是不可能的。由于单片机涉及的知识面很广,不可能在朝夕间就学会,只能一点点的积累。不积跬步,无以至千里。只有当你一步步去学习、去积累之后,你的单片机水平才会提高。学习过程中还要注重理解,要逐渐养成自己的编程思路,在编程过程中还要注意细节问题,如果因为粗心大意将程序写错,将会无形间给自己带来更大的工作量,随着学习的深入,我们编写的程序将越来越长,如果出现很多错误,在

改错时将会很麻烦,出错越多你改的时间将会越长,就会无形间给自己带来更多麻烦。

单片机(micro control unit)是一种集CPU、RAM、ROM、I/O、中断、定时/计数等功能为一体的完整的计算机,只需外加主频振荡器和电源,灌入应用程序就可以实现一定的功能。单片机的的应用特点是“面向测控”。因此,它必须有强力的信息处理、检测、控制的功能。学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编指令系统或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。

一、总线:我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各 器件之间的工作必须相互协调?所以就需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线线,则线的数量将多得惊人,所以在微处理机中引 入了总线的概念,各个器件共同享用连线,所有器件的8根数据线全部接到8根公用的线 上,即相当于各个器件并联起来,但仅这样还不行,如果有两?器件同时送出数据,一 个为0,一个为1,那么,接收方接收到的究竟是什么呢?这种情况是是不允许的,所以 要通过控制线进行控制,使器件分时工作,任何时候只能有一个器件发送数据(可以有 多个器件同时接收)。器件的数据线也就被称为数据总线,器件所有的控制线被称 控制 总线。

在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配 地址,才能 用,分配地址当?也是以电信号的形?给出的,由于存储单元比较多,所以,用于地址分的线也较多,这些线被称为地址总线。

二、数据、地址、指令:之所以将这三者放在一起,是因为这三者的本质都是一样的─数字,或者说都是?串‘0’和‘1’组成的序列。换言之,地址、指令也都是数据。指令由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的 一一对应关,不可以由 单片机的开发者更改。地址:是寻找单片机内部、外部的存储 单元、输入输出口的依据,内 存单元的地址值

已由芯片设计者规定好,不可更改,外部的 单元可以由单片机开发者自行决,但有一些地址单元是一定要有的(详见程序的执行过 程)。数据:这是由微处理机处理的 象,在各种 不同的应用电路中各不相同,一般而言,被处理的数据可能有这么几种情况:

1地址(如MOV DPTR,#1000H),即地址1000H送入DPTR。

2方式字或控制字(如MOV TMOD,#3),3即是控制字。

3常数(如MOV TH0,#10H)10H即定时常数。

4实际输出值(如P1口接彩灯,要灯全亮,则执行指令:MOV P1,#0FFH,要灯全暗,则执 兄 令:MOV P1,#00H)这里0FFH和00H都是实际输出值。又如用于LED的字形码,也是实 际?出的值。理解了地址、指令的本质,就不难理解程序运行过程中为什么会跑飞,会把数据当成指 令来 行了。

三、P0口、P2口和P3的第二功能用法 初学时往往对P0口、P2口和P3口的第二功能用法迷惑不解,认为第二功能和原功能之间 要有个切换的过程,或者说要有一条指令,事实各端口的第二功能完全是自动,不需要指令来转换。如P3.6、P3.7分别是WR、RD信号,当微片理机外接RAM或有外部I/O口 时,它们挥作第二功能,不能作为通用I/O口使用,只要一微处理机一执行到MOVX指令,就会有相应的信号从 P3.或P3.7送出,不需要事先用指令说明。事实上‘不能作为通用I/O口使用’也并不是‘不能而是(使用者)‘不会’将其作为通用I/O口使用。你完全可以在指令中按排一条S ETB P3.7的指令,并且当单片机执行到这条指令时,也会使P3.7变为高电平,但使用者不会 这么做,因为这通常这会导致系统当溃(即死机)。

四、程序的执行过程 单片机在通电复位后8051内的程序计数器(PC)中的值为‘0000,所以程序总是从‘0000’单元开始执行,也就是说:在系统的ROM中一定要存在‘0000’个单元,并且在‘0000’单元中存放的一定是一条指令。

五、堆栈 堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是内部RAM的 一份,特殊的是它存放和取用数据的方式,即所谓的‘先进后出,后进先出’,并且 堆栈有特 的数据传输指令,即‘PUSH’和甈OP’,有一个特殊的专为其服务的单元,即堆栈指 针SP 每当执一次 PUSH

指令时,SP就(在原来值的基础上)自动加1,每当执行一次POP指令,SP就(在原 来值基础上)动减1。由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP值,就可以把堆栈设置在规定的内存单元中,如在程序开始时?用一条MOV SP,#5FH指令,就时把堆栈设置在从内存单元60H开始的单元中。一般程序的开头总有这么条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元 开始往后8H到1FH这个区域正是8031的第二、三、四工作寄存器区,经常要被使用,这会造成数据的浑乱

六:中断

当单片机应用于测控系统时,实时性就显得特别重要了。而中断技术就是处理这种实时性要求高的场合。单片机的特点是一段程序反复执行,程序中的每个指令的执行都需要一定的执行时间,如果程序没有执行到某指令,则该指令的动作就不会发生,这样就会耽误很多快速发生的事情,例如,按钮按下时的下降沿。要使单片机在程序正常运行过程中,对快速动作做出反应,就必须使用单片机的中断功能,该功能就是在快速动作发生后,单片机中断正常运行的程序,处理快速发生的动作,处理完成后,在返回执行正常的程序。中断功能是需要合理控制的,在使用中的困难是需要精确地知道什么时候不允许中断发生(屏蔽中断)、什么时候允许中断发生(开中断),需要设置哪些寄存器才能使某种中断起作用,中断开始时,程序应该干什么,中断完成后,程序应该干什么等等。中断学会后,就可以编制更复杂结构的程序,这样的程序可以干着一件事,监视着一件事,一旦监视的事情发生,就中断正在干的事情,处理监视的事情。这就是中断功能的强大之处。

七:汇编语言与C语言

汇编指令有自己的一套繁琐的指令系统,不容易熟练掌握,编写程序不得不注意硬件细节。相对于C语言,汇编语言也有不可忽略的优势,就是在某些特殊场合需要高效的,占用存储空间小的地方。但随着技术的发展硬件的限制越来越小,C语言比较好理解,通用性和可移植性都很不错。也不用记专门的指令集合来,所以我还是比较倾向于用C编写程序的。

接触单片机已经有一段时间了,我感觉自己动手学习编写程序,调试然后在开发板上做学习的很快,看到自己看到的结果通过自己亲手做出来的感觉很有成功感。

有时候单片机的学习很单调,有些知识学起来很抽象,不容易理解,只能慢慢适应,一边学习理论知识,一边编写程序,将程序刷入单片机进行调试,通过这种方式才能更快速的学习单片机。同事也会从学习中体会成功的喜悦。

看门狗程序

看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就回给出一个复位信号到MCU,是MCU复位.防止MCU死机.看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的芯片时要注意清看门狗。硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位如果出现死循环,或者说PC指针不能回来。那么定时时间到后就会使单片机复位。、本程序通过按键喂狗防止溢出复位 看门狗演示程序

在16383个机器周期内必须至少喂狗一次

标准AT89s52单片机试验通过。-----------------*/ #include

sfr WDTRST = 0xA6;

sbit K1 = P3^0;sbit K2 = P3^1;sbit LED1=P1^1;sbit LED2=P1^2;

void DelayUs2x(unsigned char t);//us级延时函数声明

void DelayMs(unsigned char t);//ms级延时

/*-----------------

主函数

-----------------*/ main(){

LED1=0;

DelayMs(100);

LED1=1;

DelayMs(100);

TMOD=0x01;

TH0=0xc6;

//定时16ms

TL0=0x66;

EA=1;

ET0=1;

WDTRST=0x1e;

//在程序初始化中激活看门狗。

WDTRST=0xe1;

//先送1E,后送E1

if(K1==0)

{

TR0=1;

}

while(1)

{

if(K2==0)

{

TR0=0;

}

LED2=1;

LED1=1;

DelayMs(100);

LED2=0;

DelayMs(100);

} } /*-----------------

定时器中断函数

-----------------*/ void Time0(void)interrupt 1 {

TH0=0xc6;

//定时16ms

TL0=0x66;

WDTRST=0x1e;

//喂狗指令

WDTRST=0xe1;}

/*-----------------uS延时函数,含有输入参数 unsigned char t,无返回值

unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下 T=tx2+5 uS

-----------------*/ void DelayUs2x(unsigned char t){

while(--t);} /*-----------------mS延时函数,含有输入参数 unsigned char t,无返回值

unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编-----------------*/ void DelayMs(unsigned char t){

while(t--){

//大致延时1mS

DelayUs2x(245);

7.单片机教学思路探索 篇七

一、单片机教学的重要性

单片机又名“微控制器”或“微电脑”, 它把一个计算机系统集成到了一个芯片上, 概括的讲:一块芯片就成了一台计算机。自从它问世以来, 人们对它不断地改进, 以应用于现代化社会的各方各面。在我国, 由于ASIC (专用集成电路) 的生产还跟不上, 单片机的作用更加地重要, 在智能仪器仪表、工业设备过程控制、家用电器中, 都可以见到它的踪迹。

目前单片机渗透到我们生活的各个领域, 几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置, 飞机上各种仪表的控制, 计算机的网络通讯与数据传输, 工业自动化过程的实时控制和数据处理, 广泛使用的各种智能IC卡, 民用豪华轿车的安全保障系统, 录象机、摄象机、全自动洗衣机的控制, 以及程控玩具、电子宠物等等, 这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此, 单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。单片机技术还是简易机器人的核心元件。同时, 学习使用单片机是了解计算机原理与结构的最佳选择。

二、传统单片机教学中出现的问题

传统的单片机教学, 是以单片机的结构为主线进行的, 先学习单片机的硬件结构, 然后学习指令, 再是单片机的编程、单片机系统的扩展和各种外围器件的应用, 最后再讲一些应用实例。

按照这种教学结构, 学生普遍感到难学。试想, 一个从未接触过计算机结构的人, 甚至数字电路也是刚刚接触的人, 要他去理解单片机内部结构, 这实在不是个容易的事, 至于很多书一开始就提出的总线、地址等概念, 更是初学者难以理解的——不管用什么巧妙的比方都不容易理解。于是糊里糊涂地学完了第一部份, 第二部份一开始就是寻址方式, 更抽象, 好多人直到学完单片机还不能理解寻址方式究竟是什么意思, 为什么需要这么多寻址方式, 刚开始学当然更不懂了。然后是指令, 111条指令, 又不分个重点, 反正全是要记住的, 等到指令全部学完, 大部份人已对单片机望而生畏, 开始打退堂鼓了。第三部份是编程, 如果说前面的东西不能理解, 还能靠记忆来获得知识的话, 这部份就纯是理解和掌握了, 如果以前没学过编程, 短时间内很难掌握编程的有关知识, 更不必说编程技巧了。可是教材上明明规定, 要编出这样、那样的程序, 学的人编不出来, 当然只会认为, 教材的要求当然是合理的, 应该做到的, 我做不到就是我没学好, 于是很多人长叹一声:单片机太难学了!放弃吧。

可是到这里同学们还根本不知道单片机开发的完整过程是什么, 不知道什么是编程器, 更不知道如何使用编程器给芯片输入程序。总之, 这种单片机教学, 基本都是以单片机为蓝本来学习计算机原理, 而不是学习单片机的使用, 在教材、教学过程的安排上又没有考虑人的接受能力, 使得学习的过程是一个充满不断挫折的过程, 于是很多人认为单片机入门难。

三、我的单片机教学实践与体会

基于以上情况, 本人在单片机教学中没有采用以结构为主线的传统教材。综合比较之后, 最终选择了北京航空航天大学出版、周坚编著的《单片机轻松入门》这本教材。该教材采用“以任务为中心”的教学模式来编排, 即以任务为教学单元, 打破原有界限, 不管硬件结构、指令、编程的先后顺序, 将各部份知识分解成一个个知识点, 为了完成一个任务抽取每个部份的不同知识点, 加以组合。任务由易到难, 当所有任务全部完成, 知识点就全学完了。

此外, 在教学时采用通俗易懂的语言, 吸引同学去思考问题, 完成教学任务。

例如, 在讲解任务“用单片机点亮一只发光二极管”时, 要完成这个控制任务, 首先给同学们介绍单片机芯片的引脚知识;即“如何给芯片连线, 单片机才能工作”。这样同学们在不知不觉中就学习了枯燥的单片机硬件知识。

当把一只发光二极管和单片机某个引脚连起来后, 提问“如何才能点亮这只发光二极管呢?”, 试想一下, 如果引脚输出一个高电平, 小灯会怎么样?相反, 如果小灯输出一个低电平, 小灯又会怎么样;这样, 我们只要控制某个引脚输出高电平或输出低电平, 就可以让这个小灯“亮”或“灭”了。同学们发现, 原来让单片机控制一只发光二极管“亮”或者“灭”这么容易。进而学习控制某个引脚输出高电平的指令——SETB和学习控制某个引脚输出低电平的指令——CLR;指令现学现用, 这是传统教学模式无法实现的。

在完成一个任务的学习以后, 进入实验课程, 实验课程由同学们自己动手编写各自的程序, 再用编程器将程序写入芯片, 最后将写好程序的芯片插入实验板后, 观察自己设计出的程序结果。这样同学们一开始就清楚整个单片机开发的过程。在做“流水彩灯任务实验”中, 同学们都设计出了各自不同花样, 漂亮的流水彩灯;在看到自己的“杰作”时, 都体会到成功的喜悦, 大大提高了单片机的学习兴趣。

总之, 以任务为中心的教学模式符合人的认知规律, 它从实际课题出发, 具有现实目标性, 从而提高学习兴趣;以案例教学法组织教学内容, 具有知识综合性, 每一任务完成, 都包含不同知识点的内容, 提高学生的综合应用能力;以任务带实验, 具有实际操作性, 每一任务都要通过实际操作来达到, 提高了同学们的动手能力;取得了很好的教学效果。

参考文献

[1]刘炳良.利用单片机控制步进电机”的项目法教学思路[J].中国高新技术企业, 2007 (04) :126-127.

8.电影单片票房过15亿元 篇八

中国电影票房一直在以30%的速度扩张,2012年中国电影市场票房达到170亿元,而2013年电影票房在220亿的量级。在不久的将来,中国电影市场全年票房将超过500亿元。

单片票房也在整体市场的扩张中快速增长,最初的商业大片《英雄》曾于2002年在中国市场收获了2.5亿票房,也在当时创造了单片票房奇迹,然而2013年中小成本影片《人在途之泰囧》(泰囧)却收获了12.66亿元单片票房。

在《泰囧》掀起内地票房单片高峰之后,2013年全年国产片票房一直维持着高价位,春节档的《西游·降魔篇》于2013年4月在内地影院全面下线,最终收获12.45亿票房,《十二生肖》票房也收获8.7亿元。

在容易产生高票房的大制作商业片之外,2013年一系列商业小片也纷纷取得了5亿以上的票房成绩,《北京遇上西雅图》的5.19亿元和《中国合伙人》的5.39亿元票房之后,《致我们终将逝去的青春》更拿下7.18亿元的票房收入,郭敬明导演处女作《小时代》系列在2013年一直都站在营销宣传的风口浪尖上,最终这部典型的90后商业小片也收获了4.8807亿元票房,5亿票房成为许多电影的基本线。

或许这归结于银幕数急速扩充过程中的自然价值释放。根据国家新闻出版广电总局的数据统计,我国银幕总数正以每天近10块的速度增加,截至2013年11月25日,全国电影票房已达到193亿元,其中国产片票房107亿元,占比超过55%。全国城市影院银幕总数已达1.76万块,分别归属于40多条院线旗下。

市场空间扩张的激发之下,中国观众的观影习惯养成会是更深远的要素,在艺恩咨询的统计数据中,2009年,48.9%进影院的观众在一年中只看2~4部电影,但到2012年的统计中,每年观影10部以上的观众占比已经达到43%。

因此观众的需求在未来会一直存在,而市场也已经提供了足够的空间,只是在现阶段,许多电影作品本身与观众对于日常消费品的需求脱节,而如《泰囧》一般的电影作品,在满足了观众的基本观影需求之后,也点燃了市场的引爆点。

2013年更多的年轻导演进入电影市场,他们更加贴近大众的观影习惯,也逐渐将电影作品回归生活消费品的角色。此外,在现在的中国电影市场上,从电影投资、制作、发行直到院线等电影产业链条中的各环节都被几家大公司掌控,形成垄断局面,而电影的制作成本与3年前相比已经不可同日而语,市场的扩张会促使商业大制作影片获得更高的票房收入,到那个时候,15亿~20亿的单片票房便会出现。

9.单片机串口总结 篇九

有句话说“尽信书不如无书”,要学好单片机就要不断的、大胆的实验,要多怀疑,即使我们的怀疑最终被证明是错误的那么这也是进步(人们认识事物很多情况下来源于怀疑),当怀疑出现时就要去实践。有很多东西如果不通过实践是不可能掌握其中隐藏的奥秘,就拿51单片机串口通讯这一块,我认为掌握很好了,可以很轻松的实现数据的接收、发送,但这段时间当我重新学习串口时,我才发现里面还有很多小细节从没注意,更别说研究了。对于接收发送程序永远是按照别人的模式来编写程序,并没有真真正正的挖掘深层次的内容。我身边太多的人在临摹别人的程序,当然我不反对,但是希望自己多问几个问什么,单纯的会编程是学不好单片机的,毕竟单片机有自己独特的硬件结构。

开讲之前先简要说一下同步、异步通信:

同步通信:发送方时钟对接收方时钟控制,使双方达到完全同步。

异步通信:发送与接受设备使用各自的时钟控制数据的发送和接受过程(虽然时钟不同,但一般相差不大)。

51单片机串行口结构

从上图中我们看到,51单片机有两个物理上独立的接收、发送缓冲器SBUF,它们共用同一个地址99H,但是请注意:接收缓冲器只能读而不能写,发送缓冲器只写不读。单片机可以同时实现数据的发送与接收功能。

特别注意:接收器是双缓冲结构:当前一个字节从接收缓冲区取走之前,就已经开始接收第

二个字节(串行输入至移位寄存器),此时如果在第二个字节接收完毕而前一个字节还未被读走,那么就会丢失前一个字节。

51单片机串口控制寄存器

关于51单片机的控制寄存器各个位表示的含义在这里我只谈SM2。

SM2为多机控制位,主要用于工作方式2和3,当接收机的SM2=1时,可以利用接收到的RB8来控制是否激活RI(RB8=0不激活RI,收到的数据丢失;RB8=1时收到的数据进入SBUF,并激活RI ,进而在中断服务程序中将数据从SBUF中读走)。当SM2=0时,不论收到的RB8为何值都将使接收到的数据进入SBUF,并激活RI,通过控制SM2实现多机通信。

51单片机串口通讯方式

51串口通讯方式有3种,方式0、方式

1、方式2与方式3,他们的工作模式不尽相同。首先他们的波特率很容易忽视。方式0与方式2的波特率固定,而方式1和3的波特率由T1的溢出率决定。

方式0的波特率=f/12

系统晶振的12分频,换句话说12M晶振的情况下,其波特率可达1M,速度是很高的(当我们在选用串行器件并采用方式0时需要特别注意器件所能允许的最大时钟频率)。

方式2 =f/64或f/32(当SMOD=1时为f/32,SMOD=0时为f/64)。

曾经我用方式2进行MODBUS通信时,总是通讯失败,我仔细检查程序,没有发现逻辑错误,特别是当我参考别人的程序时,发现很少有人用方式2进行MODBUS通讯,所以当时自己妄下结论51单片机的串行方式2不可用,直到有一天夜里我突然想起方式2的波特率是固定的,试想晶振11.0592M/32或11.0592M/64怎么也不可能是9600啊,怎么可能通信成功。这才恍然大悟,看来还是自己太武断了,没有认真看书啊。有时我们认为我们犯这样的错误很低级,其实我们很多次都是因为这样的小细节导致我们整个系统不正常,正所谓“千里之堤毁于蚁穴”,这些细节真的伤不起啊。

方式1、3波特率=(2smod/32)*T1的溢出率,其中TI的溢出率=f/{12*[256-(TH1)]}.关于3种通讯方式其中有几点特别容易出错:

1、无论采用哪种通讯方式,数据发送和接受都是低位在先,高位在后。、3种方式作为输出,由于输出是CPU主动发送,不会产生重叠错误,当数据写入SBUF后,发送便启动(通过单片机内部逻辑控制,与程序无关),当该字节发送结束(SBUF空),置TI。不要理解为当数据一写入SBUF就置位TI,如果中断允许则在中断中发送数据,这就大错特错了。同样作为输入,可能会产生重叠错误(主要依赖于特定的环境),当一个字节的数据接收完毕(SBUF满)置位RI,表示缓冲区有数据提示CPU读取。

接下来通过一些实验具体说明串口通信中需要注意的地方 方式0输出

方式0主要功能是作为移位寄存器,将数据从SBUF中逐位移出,最常见的用法就是外接串入并出的移位寄存器,如74LS164。之前在做这一部分实验时总是利用单片机I/O端口模拟实现,现在想想在串口未被占用的情况下,方式0是最好的实现方式。

利用串口方式0,向74LS164输出字符“0”的编码,程序如下:

该程序采用了中断方式实现,结果是通过74LS164使数码管显示“0”。实验结果如下:

这里我说明几点: 如果采用查询方式,并且只发送一遍,那么程序最后的while(1);不可以省略,否则会出现数码管闪烁的现象(在KEIL环境下,main()函数也是作为一个调用函数,最后也有返回RET,它不像C中的main()函数,当执行完毕后就停止,而是重新复位执行,如此反复,这一点要特别注意)

这是查询方式下不加while(1);的现实效果 如果采用中断方式发送,请记得中断中清除TI,仅仅是为了解除中断标志,而不是等待发送结束,因为此时数据早已离开了SBUF跑到外边去了。3 74LS164最高25MHZ,采用方式0,没有问题。

方式0作为输入模式

以74ls165(最高时钟25MHZ)为例,可以满足要求。

对应结果如下:

(注意:74ls165线传送高位,而串口通信低位在先,所以显示的数据和实际数据高低位正好相反

P1.7---P1.0对应D0---D7)。

本程序只接收一次,也许有人会问,中断程序中REN=0,表示什么意思?可不可以改成ES=0?

这个问题很好,首先REN=0表示接收禁止,即不允许串口接收数据;ES=0是禁止中断和单片机是否接收数据没有关系,不接收数据自然中断允许也是徒劳,这两者有很大的区别。我们在很多接收程序中经常可以看到在判断RI标志后紧跟着清除标志位,我想问一下,为什么?)

如果我们也按照这种模式改写会怎样呢?

实验结果如下

两次结果差异怎么这么大?为什么会这样子?

为了便于理解,也为了说明问题方便,对中断程序做了如下处理:

结果又变了

是不是感觉很奇怪,究竟咋回事呢?

首先中断程序中当判断RI置位标志后紧跟着清零是为了接收下一个字节的数据,也为了避免单片机重复中断。

当51单片机串口方式0作输入时,在REN=1且RI=0的条件下就启动了单片机串口接收过程。如果有一个条件不满足就不能启动接收过程,以上出现的错误正式由于忽略了这个重要的因素造成的。在RI清零后由于REN仍然为1,单片机已经开始接收第二字节的数据,由于串口速度很快,RI仍会置位,而紧接着将REN清零只能阻止单片机接收数据,但是却

不能阻挡第二次中断。由于只接收了部分外部引脚数据(此时外部引脚为高电平,即逻辑1,其实单片机只接收了一位,对于12M晶振而言,方式0大约8us接收一个字节数据)。相反在RI=0与REN=0之间加上适当的延迟,就可以保证一个字节的数据全部接收完毕,故此时我们读上来的一个字节为0xff。

我在中断程序中添加了一个中断计数器(不加延迟),发现中断服务程序的确执行了两次

结果如下

加上延迟结果

这就验证了刚才的结论。

至于说可不可以换做ES=0,回答是可以的,尽管同样可以实现数据的读取,但是实质不同,当禁止中断后,单片机仍在接收外部数据,只是不再请求中断,自然的不再读取第2、3。。。字节的数据,那么P1将保留第一次中断时从SBUF中读出的数据。如果某一时刻打开中断发现结果不正常,如果理解了上面的机制就不会觉得惊讶了。建议:单次接收时,中断服务程序中REN清零放在RI之前。

还有一个问题非常重要:

如果我在中断服务程序中不清除RI,会怎样?

很少有人会这样用,但是经常有人忘记了(包括我)。课本上写得很清楚,务必在中断中用软件清除RI,为什么要这样呢?难道仅仅是为了接收下一次数据并且避免单片机不断的响应中断?的确如此,如果对于一个小系统而言,不清除中断标志,那么单片机将不停的中断,影响接下来任务的执行,系统必然瘫痪,而且不能正常的接收数据。总结:方式0作为发送方,只要向SBUF中写入数据就启动了发送过程;

方式0在座位接收模式时,REN=

1、RI=0的情况下就已经启动了接收过程。在中断程序中要注意两者清零的顺序。

还有一种情况要特别注意:单片机复位时SCON自动清零,如果单片机不工作在方式0,那么如果采用位操作SCON时也要注意REN=1与SM0、SM1的书写顺序,总之切记方式0启动发送、接收数据的条件。

方式1 方式1为10位异步通信模式。作为输出和方式0没有本质的区别,不同的是数据帧的形式,但是对于接受模式则有点不同,当REN=1且RI=0时,单片机并不启动接收过程。而是以已选择波特率的16倍速率采样RXD引脚的电平,当检测到输入引脚发生1---0负跳变时,则说明起始位有效,才开始接受本帧数据。方式1模式下 单片机可以工作在全双工以及半双工方式。下面举两个例子

半双工

主机发送某一字符,从机接收到数据后返回数据加1的值 比如 主机发送“1“,从机收到后回复主机”2“。实验结果如下:

方式1工作方式主要注意: 1 波特率可变。数据接收以起始位为标志,停止位结束。当RI=0且SM2=0或接收到有效停止位时,单片机将接收到的数据移入SBUF中,两个条件缺一不可。

方式2和方式3 方式2和3不同的只是波特率,这里以方式3为例

作为输出模式同方式1没有区别,只是增加了第八位数据位,第八位数据可以用作校验位或在多机通信中用作数据/地址帧的判别位。

首先我们来做模拟主从奇偶校验模式

主机发送一帧数据,并发送奇偶校验位,从机接收数据后,判断数据是否正确,如果正

确,接收指示灯亮,并且回送主机数据加1,反之回送0;主机接收从机信息,如果校验正确点亮LED指示灯.(从机、主机接收数据无论校验正确与否,均显示接收到的字节数据)。奇校验模式 演示结果如下:

(注:从接接收不正确,返回0)

主从机接收正确效果

之前我们已经介绍了SM2的具体用法,主要用于多机通信,将SM2作为数据/地址帧 的判别位,在接收地址时令SM2=1,当接收到的第八位数据为1时激活RI产生中断,然后比较地址,如果地址符合则清除SM2准备接受数据信息,反之不理睬。

特别注意 当RI=0且SM2=0(或SM2=1时接收到第9位数据为1)时,单片机将接收到的数据移入SBUF中,两个条件缺一不可。

在这里我只举一个简单的例子 一个主机,两个从机 起始时,主机从机的SM2均置位,所有的从机等待主机发送地址帧,主机令TB8=1,发送地址帧。所用的从机将接受到的地址和自己的地址比较,如果符合,点亮LED指示灯,清除SM2(准备接受主机发送的数据帧),并将自己的地址发送到主机。主机接收从机发送的地址信息,如果地址符合则数码管显示从机地址并开始准备发送数据,反之发复位信号,TB8=1。从机接收数据先判断RB8,如果RB8=1,则复位,重新开始接收主机发送的地址帧,反之通过P1口外接数码管显示接收到的数据。实验结果如下:

注意:如果主机没有得到正确的地址,则将按照一定的速率发送地址帧,直到接收正确的地址为止,该试验主机向从机2发送信息。

另外在这里我补充两点: 我们可以很方便的利用串口通信的工作方式2或3实现奇偶校验,注意技巧,当为偶校验时TB8=P,奇校验时TB8=~P;

上一篇:国家助学金感恩信下一篇:小学教师职称评聘管理方案

热搜文章

    相关推荐