单片机基础与实验_第1页
单片机基础与实验_第2页
单片机基础与实验_第3页
单片机基础与实验_第4页
单片机基础与实验_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/单片机基础与实验于荣成等编著同为嵌入式教育2009年2月28日1 第一讲keil软件熟悉(4课时) 111.1 Keil安装 111.2 KeilC的工程创建与配置 151.3 KeilC的单步调试与软件仿真 251.4 KeilC变量与中间文件分析 261.5 启动代码 261.6 KeilC的结果文件 262 第二讲单片机程序空间和开发板逻辑分析(8课时) 272.1 单片机程序空间 272.1.1 RAM在单片机的空间分配 282.1.2 SFR在单片机的空间分配 282.1.3 ROM在单片机的空间分配 282.2 XBYTE 282.3 片选 292.4 跑马灯程序 292.5 作业 293 第三讲定时器和中断(4课时) 304 第四讲串口程序(4课时) 394.1 作业 394.2 硬件原理 394.2.1 TTL电平 394.2.2 RS232电平 394.3 串行通讯的方式 394.3.1 异步通讯 394.3.2 同步通讯 394.3.3 通讯方向 394.4 8051单片机的串行接口结构 394.5 串行口控制寄存器SCON 404.6 串行口的工作方式 414.6.1 方式0 414.6.2 方式1 414.6.3 方式2 414.6.4 方式3 424.7 波特率设置 424.7.1 波特率设置 424.8 串口中断设置 434.9 程序代码 435 第七讲IIC总线与实时时钟(8课时) 445.1 作业 445.2 IIC原理 445.2.1 原理 455.2.2 总线基本操作 465.3 DS1307实时时钟 465.3.1 DS1307的工作时序 465.3.2 程序代码 476 第五超级终端(8课时) 516.1 作业 516.2 超级终端原理 516.2.1 超级终端的作用 516.2.2 超级终端的使用 516.3 关键程序代码 527 第六讲任务调度与前后台系统(8课时) 617.1 任务调度与前后台系统 617.1.1 问题引入(假设有如下项目) 617.2 低级处理方式: 617.3 高级处理方式 617.3.1 任务调度表 617.3.2 处理方式 628 第八讲单总线与DS18B20(8课时) 648.1 硬件结构 648.2 1-wire命令序列 648.3 ROM搜索原理 658.4 程序实现 669 第九讲A/D转换(4课时) 709.1 作业 709.2 A/D转换原理 709.2.1 ADC0831介绍 709.2.2 逐次逼近式A/D转换器原理 709.3 时序 719.3.1 程序代码 7210 第十讲红外线(8课时) 7410.1 作业 7410.2 红外遥控系统 7410.3 HS9012时序 7910.4 遥控信号接收 7910.5 程序代码 7911 第十一讲液晶显示模块SMC1602(8课时) 8211.1 作业 8211.2 SMC1602显示原理 8211.3 硬件说明 8411.3.1 状态字说明 8811.3.2 RAM位置映射图 8811.3.3 初始化设置命令 8911.3.4 数据与控制命令 8911.4 LCD初始化过程(复位过程)时序。 9011.5 SMC1602时序 8711.5.1 读操作时序 8711.5.2 写操作时序 8711.5.3 操作时序 8811.6 程序代码 9012 第十二讲重入函数与堆栈(4课时) 947第二章 单片机的硬件结构和原理概述什么是单片机及单片机的特点单片机是指在一块芯片上集成了CPU,ROM,RAM,定时器/计时器和多种I/O接口电路等,具有一定规模的微型计算机。单片机与通用微型计算机相比,在硬件结构,指令设置上均有独到之处。单片机以其卓越的性能,得到了广泛的应用,已深入到各个领域。单片机应用在检测,控制,仪器仪表等各个领域中,其主要特点如下:小巧灵活,成本低,易于产品化,能够组装成各种智能式测控设备及智能仪器仪表。可靠性好,应用范围广。单片机芯片本身是按工业控制测控环境要求设计的,抗干扰性强,能够适应各种恶劣的环境,这是其它机种无法比拟的。功能齐全,扩展性强,很容易构成各种规模的应用系统,控制功能强。单片机内部有掩模ROM,内部E2PROM和外接ROM等形式,并可以很方便的扩展外部的ROM,RAM及I/O接口,与许多通用的微机接口芯片兼容,给应用系统的设计和生产带来了极大的方便。具有通信功能,可以很方便的实现多机和分布式控制,形成控制网络和远程控制。单片机的功能是通用的,单片机主要作控制器使用,但功能上是通用的,可以像一般微处理器那样广泛的应用在各个领域。单片机发展简史1.1单片机简介单片机是一种集成电路芯片。它采用超大规模技术将具有数据处理能力的微处理器(CPU)、存储器(含程序存储器ROM和数据存储器RAM)、输入、输出接口电路(I/O接口)集成在同一块芯片上,构成一个即小巧又很完善的计算机硬件系统,在单片机程序的控制下能准确、迅速、高效地完成程序设计者事先规定的任务。所以说,一片单片机芯片就具有了组成计算机的全部功能。由此来看,单片机有着一般微处理器(CPU)芯片所不具备的功能,它可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。然而单片机又不同于单板机(一种将微处理器芯片、存储器芯片、输入输出接口芯片安装在同一块印制电路板上的微型计算机),单片机芯片在没有开发前,它只是具备功能极强的超大规模集成电路,如果对它进行应用开发,它便是一个小型的微型计算机控制系统,但它与单板机或个人电脑(PC机)有着本质的区别。单片机的应用属于芯片级应用,需要用户(单片机学习者与使用者)了解单片机芯片的结构和指令系统以及其它集成电路应用技术和系统设计所需要的理论和技术,用这样特定的芯片设计应用程序,从而使该芯片具备特定的功能。不同的单片机有着不同的硬件特征和软件特征,即它们的技术特征均不尽相同,硬件特征取决于单片机芯片的内部结构,用户要使用某种单片机,必须了解该型产品是否满足需要的功能和应用系统所要求的特性指标。这里的技术特征包括功能特性、控制特性和电气特性等等,这些信息需要从生产厂商的技术手册中得到。软件特征是指指令系统特性和开发支持环境,指令特性即我们熟悉的单片机的寻址方式,数据处理和逻辑处理方式,输入输出特性及对电源的要求等等。开发支持的环境包括指令的兼容及可移植性,支持软件(包含可支持开发应用程序的软件资源)及硬件资源。要利用某型号单片机开发自己的应用系统,掌握其结构特征和技术特征是必须的。单片机控制系统能够取代以前利用复杂电子线路或数字电路构成的控制系统,可以以软件控制来实现,并能够实现智能化,现在单片机控制范畴无所不在,例如通信产品、家用电器、智能仪器仪表、过程控制和专用控制装置等等,单片机的应用领域越来越广泛。诚然,单片机的应用意义远不限于它的应用范畴或由此带来的经济效益,更重要的是它已从根本上改变了传统的控制方法和设计思想。是控制技术的一次革命,是一座重要的里程碑。1.2单片机发展概述1946年第一台电子计算机诞生至今,依靠微电子技术和半导体技术的进步,从电子管——晶体管——集成电路——大规模集成电路,使得计算机体积更小,功能更强。特别是近20年时间里,计算机技术获得飞速的发展,计算机在工农业,科研,教育,国防和航空航天领域获得了广泛的应用,计算机技术已经是一个国家现代科技水平的重要标志。单片机诞生于20世纪70年代,象Fairchild公司研制的F8单片微型计算机。所谓单片机是利用大规模集成电路技术把中央处理单元(CenterProcessingUnit,也即常称的CPU)和数据存储器(RAM)、程序存储器(ROM)及其他I/O通信口集成在一块芯片上,构成一个最小的计算机系统,而现代的单片机则加上了中断单元,定时单元及A/D转换等更复杂、更完善的电路,使得单片机的功能越来越强大,应用更广泛。20世纪70年代,微电子技术正处于发展阶段,集成电路属于中规模发展时期,各种新材料新工艺尚未成熟,单片机仍处在初级的发展阶段,元件集成规模还比较小,功能比较简单,一般均把CPU、RAM有的还包括了一些简单的I/O口集成到芯片上,象Fairchild公司就属于这一类型,它还需配上外围的其他处理电路方才构成完整的计算系统。类似的单片机还有Zilog公司的Z80微处理器。1976年INTEL公司推出了MCS-48单片机,这个时期的单片机才是真正的8位单片微型计算机,并推向市场。它以体积小,功能全,价格低赢得了广泛的应用,为单片机的发展奠定了基础,成为单片机发展史上重要的里程碑。在MCS-48的带领下,其后,各大半导体公司相继研制和发展了自己的单片机,象Zilog公司的Z8系列。到了80年代初,单片机已发展到了高性能阶段,象INTEL公司的MCS-51系列,Motorola公司的6801和6802系列,Rokwell公司的6501及6502系列等等,此外,日本的著名电气公司NEC和HITACHI都相继开发了具有自己特色的专用单片机。80年代,世界各大公司均竞相研制出品种多功能强的单片机,约有几十个系列,300多个品种,此时的单片机均属于真正的单片化,大多集成了CPU、RAM、ROM、数目繁多的I/O接口、多种中断系统,甚至还有一些带A/D转换器的单片机,功能越来越强大,RAM和ROM的容量也越来越大,寻址空间甚至可达64kB,可以说,单片机发展到了一个新的平台.单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。

1.SCM即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。在开创嵌入式系统独立发展道路上,Intel公司功不可没。

2.MCU即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips公司。

Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。

3.单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统单片机作为微型计算机的一个重要分支,应用面很广,发展很快。自单片机诞生至今,已发展为上百种系列的近千个机种。如果将8位单片机的推出作为起点,那么单片机的发展历史大致可分为以下几个阶段:(1)第一阶段(1976-1978):单片机的控索阶段。以Intel公司的MCS-48为代表。MCS–48的推出是在工控领域的控索,参与这一控索的公司还有Motorola、Zilog等,都取得了满意的效果。这就是SCM的诞生年代,“单机片”一词即由此而来。(2)第二阶段(1978-1982):单片机的完善阶段。Intel公司在MCS-48的基础上推出了完善的,典型的单片机系列MCS–51。它在以下几个方面奠定了典型的通用总线型单片机体系结构。①完善的外部总线。MCS-51设置了经典的8位单片机的总线结构,包括8位数据总线、16位位置总线、控制总线及具有很多机通信功能的串行通信接口。②CPU外围功能单元的集中管理模式。③体现工控特性的位位置空间及位操作方式。④指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令。(3)第三阶段(1982-1990):8位单片机的巩固发展及16位单片机的推出阶段,也是单片机向微控制器发展的阶段。Intel公司推出的MCS–96系列单片机,将一些用于测控系统的模数转换器、程序运行监视器、脉宽调制器等纳入片中,体现了单片机的微控制器特征。随着MCS–51系列的广应用,许多电气厂商竞相使用80C51为内核,将许多测控系统中使用的电路技术、接口技术、多通道A/D转换部件、可靠性技术等应用到单片机中,增强了外围电路路功能,强化了智能控制的特征。(4)第四阶段(1990-):微控制器的全面发展阶段。随着单片机在各个领域全面深入地发展和应用,出现了高速、大寻址范围、强运算能力的8位/16位/32位通用型单片机,以及小型廉价的专用型单片机。单片机发展趋势目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势。(1)CMOS技术。近年,由于CHMOS技术的进步,大大地促进了单片机芯片采用CMOS技术进行设计和生产。CMOS芯片除了低功耗特性之外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。因为单片机芯片多数是采用CMOS(金属栅氧化物)半导体工艺生产。CMOS电路的特点是低功耗、高密度、低速度、低价格。采用双极型半导体工艺的TTL电路速度快,但功耗和芯片面积较大。随着技术和工艺水平的提高,又出现了HMOS(高密度、高速度MOS)和CHMOS工艺。CHMOS和HMOS工艺的结合。目前生产的CHMOS电路已达到LSTTL的速度,传输延迟时间小于2ns,它的综合优势已优于TTL电路。因而,在单片机领域CMOS正在逐渐取代TTL电路。(2)低功耗。单片机的功耗已下降许多,静态电流甚至降到1uA以下;使用电压在3~6V之间,完全能够适应于电池工作。低功耗化的效应不仅是功耗低,而且带来了产品的高可靠性、高抗干扰能力以及产品的便携化。(3)低电压。几乎所有的单片机都有WAIT、STOP等省电运行方式。允许使用的电压范围越来越宽,一般在3~6V范围内工作。低电压供电的单片机电源下限已可达1~2V。目前0.8V供电的单片机已经问世。(4)低噪声与高可靠性。为提高单片机的抗电磁干扰能力,使产品能适应恶劣的工作环境,满足电磁兼容性方面更高标准的要求,各单片厂家在单片机内部电路中都采用了新的技术措施。(5)大容量。以往单片机内的ROM为1KB~4KB,RAM为64~128B。但在需要复杂控制的场合,该存储容量是不够的,必须进行外接扩充。为了适应这种领域的要求,须运用新的工艺,使片内存储器大容量化。目前,单片机内ROM最大可达64KB,RAM最大为2KB。(6)高性能。主要是指进一步改变CPU的性能,加快指令运算的速度和提高系统控制的可靠性。采用精简指令集(RISC)结构和流水线技术,可以大幅度提高运行速度。现指令速度最高者已达100MIPS(MillionInstructionPerSeconds,即兆指令每秒),并加强了位处理、中断和定时控制功能。这类单片机的运算速度比标准的单片机高出10倍以上。由于这类单片机有极高的指令速度,可以使用软件模拟其I/O功能,由此引入了虚拟外设的新概念。(7)小容量、低价格。与上述相反,以4位、8位机为中心的小容量、低价格化也是发展动向之一。这类单片机的用途是把以往用数字逻辑集成电路组成的控制电路单片化,可广泛用于家电产品。(8)外围电路内装。这也是单片机发展的主要方向。随着集成度的不断提高,有可能把众多的各种处围功能器件集成在片内。除了一般必须具有的CPU、ROM、RAM、定时器/计数器等以外,片内集成的部件还有模/数转换器、DMA控制器、声音发生器、监视定时器、液晶显示驱动器、彩色电视机和录像机用的锁相电路等。(9)串行扩展技术。在很长一段时间里,通用型单片机通过三总线结构扩展外围器件成为单片机应用的主流结构。随着低价位OTP(OneTimeProgramble)及各种特殊类型片内程序存储器的发展,加之处围接口不断进入片内,推动了单片机“单片”应用结构的发展。特别是I2C、SPI等串行总线的引入,可以使单片机的引脚设计得更少,单片机系统结构更加简化及规范化。随着半导体集成工艺的不断发展,单片机的集成度将更高、体积将更小、功能将更强。在单片机家族中,80C51系列是其中的佼佼者,加之Intel公司将其MCS–51系列中的80C51内核使用权以专利互换或出售形式转让给全世界许多著名IC设计厂商,如Philips、NEC、Atmel、AMD、华邦等,这些公司都在保持与80C51单片机兼容的基础上改善了80C51的许多特性。这样,80C51就变成有众多制造厂商支持的、发展出上百品种的大家族,现统称为80C51系列。80C51单片机已成为单片机发展的主流。专家认为,虽然世界上的MCU品种繁多,功能各异,开发装置也互不兼容,但是客观发展表明,80C51可能最终形成事实上的标准MCU芯片.MCS-51单片机硬件结构MCS-51系列单片机的分类中央处理器CPU存储器的结构并行输入/输出接口单片机的引脚及其功能单片机工作的基本时序第一讲keil软件熟悉(4课时)Keil安装安装完全版的V7.50版本KeilC软件。打开软件所在的文件夹——>打开《安装说明》文件——>仔细看安装说明;进入setup文件夹点击setup.exe文件开始安装——>出现以下安装界面——>点击NEXT——>选择FullVersion——>一路点击NEXT出现以下安装界面,选择keil将要安装在哪个盘,一般默认就可以了——>将序列号填入,然后按以下填写就可以了——>将选项的勾去掉,点击NEXT——>然后一路点击NEXT,就可以了!OK软安装完成了,祝大家学习愉快!有任何问题请联络我:laoyu1015@163aaaKeilC的工程创建与配置点击桌面上的KeiluVision2图标,进入Keil软件编辑界面——>点击Projiect——>点击新建工程——>你要将工程放在哪个文件夹内——>建议每个工程都单独建立一个文件夹,以避免不必要的麻烦。选择你开发板上的CPU芯片——>我这里选择的是ATEML的AT89S52——>然后出现以下界面,一般点击是就可以了,给你添加了一个启动代码——>工程建立完成了,我们下面就开始往工程内添加文件呢。好玩吧!点击File——>点击New——>新建一个文件点击编辑文件,如下:点击File——>点击SAVE——>保存一个文件。文件名任意,但后缀为“.c”的文件。然后保存。右键点击SourceGroup1——>选择AddFilestoGroup‘SourceGroup1’。将刚才新建的c文件添加到工程内。点击Add,这时左边的工程就添加了main.c文件了。这时点击Close关闭对话框。双击main.c,然后进行编辑。点击工具栏的Rebuildalltargetfiles编译工程。或者点击Projec——>Rebuildalltargetfiles编译工程。根据编译链接的信息来修改程序,确保没有什么错误。如果没有什么错误,就会出现以下界面。表示工程已经编译、链接完成。这个时候还有一个问题没有解决,即我要烧录到单片机的程序还没有生成呢?到底是什么程序呢,怎么生成呢?请见下面的KeilC的工程的配置部分。KeilC的工程配置在工程图标上点击右键——>点击OptionsforTarget‘Target1’进入工程配置。或者点击Project——>点击OptionsforTarget‘Target1’进入工程配置。界面如下:芯片选择、晶振频率选择、RAM范围、ROM范围、out文件选定、define的定义、debug选项的配置。KeilC的单步调试与软件仿真单步仿真、断点设置、memory窗口、serial窗口、工程窗口、变量窗口、I/O口的软件仿真及单步调试、反汇编窗口。Disassembly窗口:14:while(1)15:{16:P0=0x00;C:0x0009E4CLRAC:0x000AF580MOVP0(0x80),A17:DBYTE[0x80]=0xaa;C:0x000C7880MOVR0,#P0(0x80)C:0x000E76AAMOV@R0,#0xAA18:DBYTE[0x73]=DBYTE[0x80];C:0x0010E6MOVA,@R0C:0x00117873MOVR0,#0x73C:0x0013F6MOV@R0,A19:delay();C:0x0014120027LCALLdelay(C:0027)20:P0=0xff; 分析:14~20 ——是c语言程序。C:0x0009 ——是code位置E4 ——HEX文件的十六进制代码CLRA ——汇编程序KeilC变量与中间文件分析List文件、M51文件、HEX文件分析启动代码(保留)KeilC的结果文件HEX文件分析编程规范同为编程规范(保留)作业在keil软件仿真条件下,循环操作P1口的8个引脚。利用开发板操作LED,熟悉I/O的操作。其它第二讲单片机程序空间和开发板逻辑分析(8课时)单片机程序空间RAM在单片机的空间分配SFR80H-FFH为SFR的位置空间是没问题,如果在52里,SFR的空间跟RAM是两个不同的存储空间,RAM是间接寻址,而SFR是直接寻址的。IDATA的位置空间为80H~FFH,即128字节之后的RAM空间。R0~R70~31(00H~1FH)共32个字节是4个通用工作寄存器,4组R0~R7。在发生中断嵌套时候可以实现现场保护措施。R0~R7在中断函数程序中使用了。在进入中断程序时候也需要压栈。堆栈:51内部RAM(DATA空间)可以设置堆栈,但它的位置是不固定的。通过SP(栈指针)来确定栈底位置,往上升。最多128字节,不能够超出data空间。子程序调用时将PC(程序指针,2个字节)压栈,完成后又出栈。中断函数需要压栈的寄存器更多。可以通过RAM_SFR_ROMdemo程序来分析。DPTR:数据指针,16位;高位DPH,低位DPL,主要用来保持16位位置,可以对64KBYTE空间寻址。SFR在单片机的空间分配可以通过以下实验来区分空间的差别:While(1){P0=0x00;DBYTE[0x80]=0xaa;DBYTE[0x73]=DBYTE[0x80];delay();P0=0xff;DBYTE[0x80]=0xbb;DBYTE[0x73]=DBYTE[0x80];delay();}ROM在单片机的空间分配/EA=0选用外部ROM空间/EA=1外部ROM空间XBYTE#defineXBYTE((char*)0x20000L)数组、指针数组、2为xdata、0000为数组指针的起始位置、L为长整型。#defineCBYTE((unsignedchar*)0x50000L)

#defineDBYTE((unsignedchar*)0x40000L)

#definePBYTE((unsignedchar*)0x30000L)

#defineXBYTE((unsignedchar*)0x20000L)见《指针不完全手册》片选程序空间、位置线数量、62256位置、片选位置、片选位置的确定跑马灯程序跑马灯程序设计作业数码管原理、程序设计原理继电器操作、蜂鸣器操作计数500秒表设计第三讲定时器作业非中断方式下流水灯非中断方式下数码管 显示1、2、3、4、5、6非中断方式下500计数非中断模式下的秒表程序显示秒表分、秒、1/100秒秒表的停、开始、清零动作定时器/计数器的结构及工作原理图3.1定时器/计数器结构框图加法计数器是计满溢出时才申请中断,所以在给计数器赋初值时,不能直接输入所需的计数值,而应输入的是计数器计数的最大值与这一计数值的差值,设最大值为M,计数值为N,初值为X,则X的计算方法如下:计数状态:X=M-N定时状态:X=M-定时时间/T而T=12÷晶振频率方式和控制寄存器定时器/计数器的方式寄存器TMOD图6.2TMOD各位定义工作方式定时器/计数器应用举例MCS-51单片机的中断(4课时)作业中断方式下流水灯中断方式下数码管显示1、2、3、4、5、6中断方式下的秒表程序显示秒表分、秒、1/100秒秒表的停、开始、清零动作中断的概述中断中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因,而必须中止原程序的执行,转去执行相应的处理程序,待处理结束之后,再回来继续执行被中止的原程序的过程。采用了中断技术后的计算机,可以解决CPU与外设之间速度匹配的问题,使计算机可以及时处理系统中许多随机的参数和信息,同时,它也提高了计算机处理故障与应变的能力。中断源中断源是指在计算机系统中向CPU发出中断请求的来源,中断可以人为设定,也可以是为响应突发性随机事件而设置。通常有I/O设备、实时控制系统中的随机参数和信息故障源等。中断优先级中断优先级越高,则响应优先权就越高。当CPU正在执行中断服务程序时,又有中断优先级更高的中断申请产生,这时CPU就会暂停当前的中断服务转而处理高级中断申请,待高级中断处理程序完毕再返回原中断程序断点处继续执行,这一过程称为中断嵌套。中断响应的过程(1)在每条指令结束后,系统都自动检测中断请求信号,如果有中断请求,且CPU处于开中断状态下,则响应中断。(2)保护现场,在保护现场前,一般要关中断,以防止现场被破坏。保护现场一般是用堆栈指令将原程序中用到的寄存器推入堆栈。(3)中断服务,即为相应的中断源服务。(4)恢复现场,用堆栈指令将保护在堆栈中的数据弹出来,在恢复现场前要关中断,以防止现场被破坏。在恢复现场后应及时开中断。(5)返回,此时CPU将推入到堆栈的断点位置弹回到程序计数器,从而使CPU继续执行刚才被中断的程序。MCS-51中断系统图4.1MCS-51中断系统结构框图中断源表4.18051中断源特殊功能寄存器TCON中的标志 D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0特殊功能寄存器SCOND7D6D5D4D3D2D1D0SM0SM1SM2RENTB0RB0TIRI中断控制中断允许控制寄存器IED7D6D5D4D3D2D1D0EAXET2ESET1EX1ET0EX0MCS-51单片机有5个(8052有6个)中断源,为了使每个中断源都能独立地被允许或禁止,以便用户能灵活使用,它在每个中断信号的通道中设置了一个中断屏蔽触发器。只有该触发器无效,它所对应的中断请求信号才能进入CPU,即此类型中断开放。否则,即使其对应的中断标志位置1,CPU也不会响应中断,即此类型中断被屏蔽了。同时CPU内还设置了一个中断允许触发器,它控制CPU能否响应中断。中断优先级寄存器IPD7D6D5D4D3D2D1D0XXPT2PSPT1PX1PT0PX0表4.2同级内第二优先级次序中断响应中断响应的条件(1)同级或高优先级的中断已在进行中;(2)当前的机器周期还不是正在执行指令的最后一个机器周期(换言之,正在执行的指令完成前,任何中断请求都得不到响应);(3)正在执行的是一条RETI或者访问特殊功能寄存器IE或IP的指令(换言之,在RETI或读写IE或IP之后,不会马上响应中断请求,而至少执行一条其它指令之后才会响应)。中断响应过程单片机一旦响应中断请求,就由硬件完成以下功能:(1)根据响应的中断源的中断优先级,使相应的优先级状态触发器置1;(2)执行硬件中断服务子程序调用,并把当前程序计数器PC的内容压入堆栈;(3)清除相应的中断请求标志位(串行口中断请求标志RI和TI除外);(4)把被响应的中断源所对应的中断服务程序的入口位置(中断矢量)送入PC,从而转入相应的中断服务程序。表4.3中断服务程序入口位置表例如,现有外部中断1提出申请,且主程序中有R0、R1、DPTR、累加器A需保护,则编制程序应为:ORG0000HAJMPMAINORG0013HLJMPINT1…ORG0100HMAIN:…;主程序…ORG1000HINT1:PUSHACC;中断服务程序PUSHDPHPUSHDPLPUSH0PUSH1POP1POP0POPDPLPOPDPHPOPACCRETI编程中应注意:(1)在0000H放一条跳转到主程序的跳转指令,这是因为MCS-51单片机复位后,PC的内容变为0000H,程序从0000H开始执行,紧接着0003H是中断程序入口位置,故在此中间只能插入一条转移指令;(2)响应中断时,先自动执行一条隐指令“LCALL0013H”,而0013H至001BH(定时器1溢出中断入口位置)之间可利用的存储单元不够,故放一条无条件转移指令。 (3)在中断服务程序的末尾,必须安排一条中断返回指令RETI,使程序自动返回主程序。中断系统的应用例1单步操作的中断实现。把一个外部中断(设为INT0])设置为电平激活方式。其中断服务程序的末尾写上如下几条指令:JNBP3.2,$;在INT0变高前原地等待(死循环)JBP3.2,$;在INT0变低前原地等待(死循环)RETI;返回并执行一条指令现在,若INT0保持低电平,且允许INT0中断,则CPU就进入外部中断0服务程序,由于有上述几条指令,它就会停在JNB处,原地等待。当INT0端出现一个正脉冲(由低到高,再到低)时,程序就会往下执行,执行RETI后,将返回主程序,往下执行一条指令,然后又立即响应中断,以等待INT0端出现的下一个正脉冲。这样在INT0端每出现一个正脉冲,主程序就执行一条指令,实现了单步执行的目的,要注意的是,这个正脉冲的高电平持续时间不小于3个周期,以确保CPU能采集到高电平值。例2多中断源。MCS-51单片机有两个外部中断输入端,当有2个以上中断源时,它的中断输入端就不够了。此时,可以采用中断与查询相结合的方法来实现。可以使每个中断源都接在同一个外部中断输入端上,同时利用输入口线作为多中断源情况下各中断源的识别线。图4.6多中断源ORG0003HLJMPINT0…INT0:PUSHPSWPUSHACCJBP0.7,DV1JBP0.6,DV2JBP0.5,DV3JBP0.4,DV4GOBACK:POPACCPOPPSWRETIDV1:…;装置1中断服务程序…AJMPGOBACKDV2:… ;装置2中断服务程序…AJMPGOBACKDV3:… ;装置3中断服务程序…AJMPGOBACKDV4:… ;装置4中断服务程序…AJMPGOBACK第四讲串口程序(4课时)作业非中断模式下发送、接收数据,利用超级终端。ASCII码键盘程序中断模式下收发数据,利用超级终端。ASCII码键盘程序硬件原理TTL电平TTL:Transistor-TransistorLogic三极管结构。

Vcc:5V;VOH>=2.4V;VOL<=0.5V;VIH>=2V;VIL<=0.8V。RS232电平232电平或者说串口电平,有的甚至说计算机电平,所有的这些说法,指得都是计算机9针串口(RS232)得电平,采用负逻辑,-15v~-3v代表1+3v~+15v代表0串行通讯的方式异步通讯它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下: 在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(可以省略),最后是停止位1。用这种格式表示字符,则字符可以一个接一个地传送。在异步通讯中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式可以由通讯的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。同步通讯在异步通讯中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。通讯方向在串行通讯中,把通讯接口只能发送或接收的单向传送方法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息8051单片机的串行接口结构8051串行接口是一个可编程的全双工串行通讯接口。它可用作异步通讯方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通讯协议进行全双工的8051多机系统也可以通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。8051单片机通过引脚RXD(P3.0,串行数据接收端)和引脚TXD(P3.1,串行数据发送端)与外界通讯。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和位置空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。串行口控制寄存器SCON它用于定义串行口的工作方式及实施接收和发送控制。字节位置为98H,其各位定义如下表:D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRISM0、SM1:串行口工作方式选择位,其定义如下:SM0、SM1工作方式功能描述波特率00方式08位移位寄存器Fosc/1201方式110位UART可变10方式211位UARTFosc/64或fosc/3211方式311位UART可变其中fosc为晶振频率SM2:多机通讯控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。TB8:是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通讯中作为区别位置帧或数据帧的标志位。RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。TI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的方法获知或者用中断的方法获知。RI也必须用软件清0。串行口的工作方式8051单片机的全双工串行口可编程为4种工作方式,现分述如下:方式0方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。输出串行数据从RXD引脚输出,TXD引脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。输入当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。方式1方式1为波特率可变的10位异步通讯接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。输出当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD引脚输出,发送完一帧数据后,就由硬件置位TI。输入在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。方式2方式二为固定波特率的11位UART方式。它比方式1增加了一位可程控位1或0的第9位数据。输出:发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通讯中位置/数据信息的标志位,也可以作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。输入:在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。方式3方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。波特率设置波特率设置如前所述,在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。方式0方式0的波特率固定为主振频率的1/12。方式2方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc方式1和方式3定时器T1作为波特率发生器,其公式如下:波特率=定时器T1溢出率T1溢出率=T1计数率/产生溢出所需的周期数式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。定时器T1工作于方式0:溢出所需周期数=8192-x定时器T1工作于方式1:溢出所需周期数=65536-x定时器T1工作于方式2:溢出所需周期数=256-x因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶振就是这个道理。下表列出了定时器T1工作于方式2常用波特率及初值。常用波特率Fosc(MHZ)SMODTH1初值1920011.05921FDH960011.05920FDH480011.05920FAH240011.05920F4h120011.05920E8h串口中断设置程序代码第五讲IIC总线与实时时钟(8课时)作业将实时时钟显示在数码管上。IIC原理I2C(Inter-IntegratedCircuit)总线是一种由Phil-ips公司开发的两线式串行总线,用于连接微控制器及其外围设备。由于I2C总线仅用两根信号线,并支持多主控工作方式,所以I2C总线在电子产品设备中应用非常普遍。文献[1]使用NiosⅡ的PIO接口模拟I2C时序完成对接口芯片的读写,而目前基于NiosⅡ的IP核越发丰富。基于此,本文使用免费的IP核--I2C-MasterCore,实现了对I2C接口芯片的读写操作,扩充了一种新的设计方法。本文首先介绍了I2C总线结构和工作原理,然后详细说明了基于NiosⅡ的I2C-MasterCore的使用方法,最后给出了C语言的编程代码。1I2C总线基本原理I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、进行双向传送,最高传送速度100kbit/s。I2C总线在传送数据的过程中共有4种基本类型信号,分别是:开始信号、数据传输信号、应答信号和结束信号。a)开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。所有的命令都必须在开始条件以后进行。b)结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。所有的操作都必须在停止条件以前结束。总线开始和停止数据传送的时序如图1所示。c)数据传输信号:在开始条件以后,时钟信号SCL的高电平周期期问,当数据线稳定时,数据线SDA的状态表示数据有效,即数据可以被读走,开始进行读操作。在时钟信号SCL的低电平周期期间,数据线上数据才允许改变。每位数据需要一个时钟脉冲。I2C总线的数据位传送时序如图2所示。d)应答信号:接收数据的从器件收到8bit数据后,向发送数据的主控器件发出特定的低电平脉冲,表示已收到数据。这要求主器件必须产生一个与确认位相应的额外时钟脉冲(第9个脉冲)。若主控器件确认失败,主控器件必须发送一个数据结束信号给从器件。这时从器件必须使SDA线保持高电平,使主控器件能产生停止条件。总线的应答信号时序见图3。原理I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据各种被控制电路均并联在这条总线上,CPU发出的控制信号分为位置码和控制量两部分,位置码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号、数据信号与应答信号。起始和终止信号:SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号数据信号:I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。总线基本操作每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。此应答位是接收端发出的在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作DS1307实时时钟DS1307的工作时序发送方式为:MSBDS1307通过双向数据线SDA和时钟SCL与外界进行数据交换,其时序关系如图2所示。

从时序图2中可看出,DS1307有2种操作方式:

(1)写操作:把SDA数据线上的数据按RAM指定的首位置(WordAddress)依次写入N个字节数据,其格式为:

(2)读操作:按RAM指定的首位置依次读出N个字节数据,其格式为:

其中:S为起始信号,1101000为DS1307的口位置,A应答信号,A非应答信号,P停止信号。程序代码发送方式为:MSB/***********************************************************************/

voidI2C_start(void)

{

SDA=1;

SCL=1;

Wait8us;

SDA=0;

Wait8us;

SCL=0;

}/***********************************************************************/

voidI2C_stop(void)

{

SDA=0;

SCL=1;

Wait8us;

SDA=1;

Wait4us;

SCL=0;

}

/***********************************************************************

voidI2C_send_ack(void)

{

SDA=0;

SCL=1;

Wait4us;

SCL=0;

}

*************************************************************************/

voidI2C_send_noack(void)

{

SDA=1;

SCL=1;

Wait4us;

SCL=0;

}

/***********************************************************************/

voidI2C_write_byte(unsignedcharIIC_data)

{

unsignedchari;

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

{

SCL=0;

if((IIC_data<<i)&0x80)

SDA=1;

//判断发送位

elseSDA=0;

Wait2us;

SCL=1;

Wait4us;

SCL=0;

}

Wait4us;

SDA=1;//发送完8bit,释放总线准备接收应答位

Wait2us;

SCL=1;

Wait4us;//sda上数据即是从应答位

SCL=0;//不考虑从应答位但要控制好时序

}

/***********************************************************************/

unsignedcharI2C_read_byte(void)

{

unsignedchari,dat;

dat=0;

SDA=1;

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

{

dat=dat<<1;

SCL=1;

Wait2us;

if(SDA==1)

{

dat++;

}

SCL=0;

}

return(dat);

}/**************************************************

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论