第五章单片机中断定时器串行口的应用_第1页
第五章单片机中断定时器串行口的应用_第2页
第五章单片机中断定时器串行口的应用_第3页
第五章单片机中断定时器串行口的应用_第4页
第五章单片机中断定时器串行口的应用_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

1、5.1 片上外设综述5.2 中断系统(INT & ISR)5.3 定时/计数器 (Timer/Counter)5.4 串行通信口 (USART)第五章 51单片机片上外设的原理与应用5.1 片上外设综述 片上外设(on chip peripherals) 是单片机(MCU)等位于CPU外部的独立硬件功能单元,是针对特定用途领域开发的专门功能模块,通过特殊功能寄存器接口和CPU进行通信,受到CPU的控制调度。 片上外设的种类非常多,且一直在迅速的发展中。每当有某种技术需求变得重要和而迫切时,MCU的厂商就会致力于将其作为独立的片上外设集成在单片机内部。常用的片上外设有哪些? 中断系统控制器(也可

2、算是外设的一种) 定时/计数器 (通用) 定时/计数器基础上的扩展功能 CCP/PWM/QEI/Pulse Counter) (脉冲捕获比较/脉宽调制/编码器计数/脉冲计数器) 串行通信总线口(USART/SPI/I2C/USB) 汽车总线(CAN/LIN/FLEXRAY) 模-数/数-模转换器(ADC/DAC) 学习片上外设的使用需要先了解下其产生的背景,然后学习这些外设的工作原理、寄存器说明和编程使用技巧,并且需要多次反复动手实验才能取得良好的效果。5.2 MCS-51单片机的中断系统中断系统结构:中断源和中断控制寄存器中断响应过程中断程序设计举例 背景知识: 微处理器/单片机的CPU是一

3、直按照用户编写的程序按部就班的执行程序,包括各种顺序、条件判断、有限或者无限循环工作等。例如下例: 在一项工作中,CPU先要读取某个温度传感器的信息,然后计算下一步应该输出的结果,再进而送给某执行器执行,这个循环可以无限循环工作下去。这种方式一般称为查询输入-计算-输出的工作方式。 然而某次工作中突然发生了某个意外事件,需要CPU中断当前正在进行的工作,转而需要先处理这个意外的紧急事件。处理妥当完毕后才能再回去继续处理原来中断停下来的工作。 这种“意外”事件是大量普遍存在的,可能是想不到也可能是没必要反复查询检查的,只有当其发生的时候再去处理就可以。这类事件需要单独的应急响应机制,如同人类世界

4、需要专门的公共突发事件管理机构一样,单片机也需要这样的管理机构,因此,中断控制系统诞生了。 应急突发事件的产生和处理流程大致如下: 某某地方发生了突发事件;(事件来源) 打报告向应急事件处理中心快速报告; 应急中心根据事件的必要性、严重性决定是否需要处理以及排队处理的优先程度; 决定处理的事件则请专门的处理部门进行处理,处理完毕清除本次意外事件的申请报告。中断源(意外事件来源)单片机中断系统的组成和处理流程中断申请标志位(申请报告)中断允许寄存器(是否允许)中断优先级(排队优先顺序)调用中断处理子程序(CPU处理) 以计数器计数为例以计数器计数为例CPUCNT = 0开始计数开始计数允许溢出中

5、断允许溢出中断初初始始化化计计数数器器+1,+1CPU自己的程序自己的程序循环(主程序)循环(主程序)CPU暂停当前暂停当前工作,处理计工作,处理计数器溢出事件数器溢出事件CNT MAX计数器溢出计数器溢出通知通知CPU中断中断执行中断处理执行中断处理子程序子程序返回返回CPU主程序主程序CPU和外设并行工作,以中断申请和中断服务子程序形式处理外设的特殊事件处理请求。外设和CPU并行工作,中断的处理机制 关于中断的名词和术语 1.中断源:能够引发中断并向CPU申请处理的突发事件来源,51单片机有5个中断源 INT0,T0,INT1,T1,UART 2.中断控制系统:负责管理中断时间的一整套机构

6、,具体包括中断标志位、中断允许、中断优先级等,都是以寄存器位的形式体现。 3.中断服务子程序:由人工实现编写好的,用于处理对应突发事件的专门子程序,当中断时间发生并且被允许紧急处理时,中断系统会自动调动CPU去执行该段子程序这个过程是无需人工干预的。 中断响应的流程:中断源发生中断并且被批准处理后,中断系统会暂停CPU当前程序执行,把暂停工作的程序地址暂时保存在系统堆栈中(断点地址保存),然后自动调度CPU的PC转向特定中断源对应的中断向量入口地址,到那里去寻找响应的中断服务子程序。待子程序处理完毕后再RETI返回,将堆栈中的保存的断点地址返回给PC继续执行原先CPU中断掉的程序任务。u中断源

7、 51单片机有5个中断源,当其向CPU申请中断时,CPU会中断当前正在执行的程序,硬件将PC自动跳转到指定的中断入口地址处开始执行程序,即进入中断服务程序(ISR),这些中断入口地址便程序中断向量表,所有单片机在这一点上是基本相同的。这些是申请中断处理的标志位,一般称为IF( Interrupt Flag)中断申请标志位每种中断各每种中断各自的允许位自的允许位中断管理机构的负责人(Interrupt Enable)IP = Interrupt Priority。 对同时发生的多个中断时间的优先排队顺序u中断的汇编程序设计样例 中断程序的设计主要是根据程序任务的要求合理设置IE,IP,TCON,

8、SCON等寄存器控制位,设置中断入口地址跳转指令和编写中断服务子程序(ISR),有一定编程规律可循,关键是理解中断处理本身的概念和流程,各中断标志位的使用方法。外部中断式键盘电路原理图 ORG 0000H (主程序入口) AJMP MAIN ORG 0003H (INT0中断入口地址) AJMP KEYINT ORG 0030H MAIN: MOV SP,#60H SETB IT0 SETB EX0 SETB EA SJMP $ (主程序的断点地址)ORG 0100HKEYINT: MOV DPTR,#0FEFFHMOVX A,DPTRCPL ACJNE A,#00H,K1RETI (返回主程

9、序断点)K1:CJNE A,#01H,K2 ACALL KK1 RETI (返回主程序断点)K2: CJNE A,#02H,K3 ACALL KK2 RETI K8: RETI (返回主程序断点)中断键盘的C处理代码示例 #include #include #define KEYPAD XBYTE0 xFEFF void handle(unsigned char); void main( ) EX0 = 1; IT0 = 1; /使能键盘INT0中断 EA = 1; /开全局中断 while(1) void keyscan( ) interrupt 0 unsigned char temp;

10、EA = 0; temp = KEYPAD; temp =temp; switch(temp) case 0 x01: handle(temp); break; case 0 x02: handle(temp); break; EA = 1;void handle(unsigned char keydown) 头文件的内容 (片段) sfr P0 = 0 x80; sfr P1 = 0 x90; sfr P2 = 0 xA0; sfr P3 = 0 xB0; sfr PSW = 0 xD0; sfr ACC = 0 xE0; sfr B = 0 xF0; sfr SP = 0 x81; sfr

11、 DPL = 0 x82; sfr DPH = 0 x83;sfr PCON = 0 x87;sfr TCON = 0 x88;sfr TMOD = 0 x89;sfr TL0 = 0 x8A;sfr TL1 = 0 x8B;sfr TH0 = 0 x8C;sfr TH1 = 0 x8D;sfr IE = 0 xA8;sfr IP = 0 xB8;sfr SCON = 0 x98;sfr SBUF = 0 x99;STC51开发板的外部查询式和中断式按键电路发光二极管电路数码管连接电路 例5.1 外部按键中断程序演示 实现功能要求:INT1按一下,P2口发光二极管全亮;INT0按一下,发光管全

12、灭;用中断方式编程实现。思考:中断源是谁?中断标志位在哪里?分别是谁?怎么中断允许?中断向量入口地址在哪里?该怎么写中断服务子程序?中断返回到哪里? ORG 0000H LJMP MAIN ORG 0003H MOV P2,#0FFH RETI ORG 0013H MOV P2,#00H RETI ORG 0030H对比这段程序MAIN: MOV SP,#60H SETB EX0 SETB EX1 SETB IT0 SETB IT1 SETB EA SJMP $MAIN: MOV SP,#60H SETB EX0 SETB EX1 SETB EA SJMP $ 外部按键中断的C语言demo程序

13、 #include void main( ) P2 = 0 xFF; EX0 = 1; EX1 = 1; IT0 = 1; IT1 = 1; EA = 1; while(1) 主程序挂起SJMP $ void key1( ) interrupt 0 P2 = 0 xFF; void key2( ) interrupt 2 P2 = 0 x00; 对比C语言程序和汇编程序发现了哪些差异之处? 再做一个略微复杂一点的: 1)让INT1按键每按一下,P2口灯从右至左依次点亮。 2)自己尝试着做一个更复杂点的任务: 让INT1键每按一次,数码管的最低位显示的数字字符加1,从0开始到9结束,重新返回零。

14、如果能实现,那么能否实现数码管的最低两位显示按键次数,初值为00,最高99.以数码管字符形式体现。5.3 定时/计数器(Timer/Counter) 定时/计数器(T/C)是单片机最为常用的片上外设功能单元之一,广泛应用于产生精确定时间隔、波特率产生、对外部脉冲信号的计数、以及进一步扩展出的测量信号脉宽,输出特定频率和占空比的PWM波等。 T/C单元内部的核心是一定位数宽度的二进制计数器,例如8位,16位,32位等。通过特殊功能寄存器接口和CPU通信。51单片机有2个16位的定时/计数器 T0, T1,能够实现基本的定时器、计数器和串行口波特率发生器功能。其原理结构如下图执行计数器功能则是指T

15、/C单元内部的计数器用来对来自芯片管脚的T0(P3,4),T1(P3.5)输入的脉冲信号进行计数操作,用于数外部的脉冲数。需要注意的是外部脉冲周期宽度最小值是2个机器周期的宽度。对定时/计数器单元的操作同其他片上外设一样,都是通过特殊功能寄存器接口进行(SFR)。控制该单元的SFR分别是TH0,TL0,TH1,TL1,TCON,TMOD。 思考问题: 1. 现设置TMOD,使T0为16位定时器,T1为16位计数器,则TMOD = 2. 令T0为16位计数器,T1为8位重装载的定时器模式,则TMOD =定时计数器应用编程举例定时计数器应用编程举例 如图:P1外接8个发光二极管,编程使8个发光二极

16、管轮流点亮,时间间隔为100ms,设晶振频率为fosc=6MHz。 解:利用T1实现100ms定时,每隔100ms,P1口寄存器值左移一次实现,分别采用查询溢出标志位和定时中断方式实现。 采用STC51开发板 试验时需改成P2口。 过程描述: 1)置LED1亮,其余全灭 2)设置T1 寄存器的模式和初值,产生100ms定时间隔,T1为定时器,可选16位模式,计数初值的计算公式:X = 65536 - (定时间隔/机器周期) =65536 - (100ms/2us) = 15536 = 3CB0 则TMOD = 10H,TL1 = 0B0H,TH1 = 3CH 3)选择查询判断TF1标志还是采用

17、中断方式 4)启动TR1,开始定时 5)如果是查询模式则可用JNB TF1,$查询判断;若TF1 = 1,则让LED逻辑左移实现。 6)别忘了还需要重新给T1赋初值; 如果是中断方式,则需要写中断服务子程序,在T1的中断中重赋初值,逻辑左移,然后中断返回RETI即可。 请尝试自行编程。 先计算100ms定时初值,采用16位方式1. 机器周期Ts=2us。应计脉冲数100ms/2us=50000 则计数器初值为X=65536-50000=15536=3CB0H, TH1=3CH,TL1=0B0H 参考编程代码: 1)查询方式 ORG 0000H MOV A,#0FEH ;第一个灯亮 MOV TM

18、OD,#10H MOV TH1,#3CH MOV TL1,#0B0H SETB TR1 LOOP: MOV P1,A CHEK: JNB TF1,CHEK ;定时100ms到? CLR TF1 ;软件清溢出标志 RL A ;循环左移 MOV TH1,#3CH MOV TL1,#0B0H SJMP LOOP 2)中断方式 ORG 0000H AJMP MAIN ORG 001BH AJMP IV1 ORG 0030H MAIN: MOV A,#0FEH MOV P1,A MOV TMOD,#10H MOV TH1,#3CH MOV TL1,#0B0H 例2 在P1.7端接一个发光二极管LED,要

19、求利用定时计数器控制使LED闪亮,一秒为周期,设fosc = 6MHz。 方法1:用T0产生周期200ms脉冲,让P1.0每100ms取反一次输出作为T1的脉冲计数输入,T1计数5个脉冲刚好1000ms。T0,T1初始化设置 TMOD = 61H, T1方式2计数,T0方式1定时 T0计数初值X=65536-50000=15536=3CB0H, T1计数初值Y=28-5=FBH。 采用查询方式编程如下 ORG 0000H MAIN: CLR P1.7 SETB P1.0MOV TMOD,#61HMOV TH1,#0FBHMOV TL1,#0FBHSETB TR1LP1: CPL P1.7LP2

20、: MOV TH0,#3CH MOV TL0,#0B0H SETB TR0LP3: JBC TF0,LP4 SJMP LP3 方法2:用T0每100ms中断一次,连续中断10次P1.7取反一次,即实现1秒输出反转一次。 DJNZ R4, BACK MOV R4,#0AH CPL P1.7 BACK: RETI END定时/计数器用途极为广泛,以至于新型的32位ARM, 单片机等多数都集成了8个以上的16位多功能定时/计数器,还可以串联成32位计数器,可以作为PWM,脉宽捕获,光电角度编码器的计数器使用等。在各种电机控制和开关电源中应用广泛。 可以动手练习的题目: 1. 让P1.0或者P2.0口

21、连接LED,产生闪烁。分别用查询TFx标志位法和中断法实验。 2. 让8个LED产生流水灯或者拉幕灯效果; 3. 思考如何用一个T1或T0,在P2.0口产生高电平宽度可变的PWM波,可以实现对LED调亮度的效果,值得一试!5.4 51单片机串行接口 一 有关串行通信的基本概念和名词 通信:计算机与外界的信息交换称为通信。 两种基本通信方式:并行通信和串行通信 并行通信:一次被传输的数据有多少位,就需要多少根数据传输线。 特点:通信速度快,编程简单。 缺点:不适合长距离传输,传输线多。大多数单片机,DSP等都具有并行接口总线,比如常见的地址、数据和控制三总线接口。 串行通信串行通信:数据在一根线

22、路上按照位的先后顺序一位一位的传送。 特点:占用线路少,硬件接口简单,比较适合长距离传输,一般比并行通信方式略慢。串行通信需要定义专门的通信协议。 基本的串行通信方式有同步通信和异步通信同步通信和异步通信两种。 串行通信中的数据是按帧(Frame)进行传输。 通信方向:异步串行通信的三种工作方式: 单工、半双工、全双工单工、半双工、全双工(p133. 图8-2) 通信协议通信协议:指通信双方为确保通信成功而订立并共同遵守的通信约定,主要包括数据帧格式,时钟速率,检查纠错方式。各种串行通信方式都必须严格遵守其通信协议才能保证通信的正确性。 2.波特率波特率(Baud rate):简单理解为每秒钟

23、一根串行线路上可以传输的二进制数据位数,如PC机串行口常见的波特率值:600,1200,2400,4800,9600,19200 串行通信中数据是按照一定的时钟频率按位向外一位一位移入、移出内部移位寄存器的,用于产生该移位时钟的电路叫波特率发生器。 本质上波特率发生器就是一个专用的可编程定时器,产生精确的时间间隔,用于收发串行数据位;51单片机一般用T1做波特率发生器,很多其他单片机则有专门的内置定时器做,不需要占用通用定时/计数器。 串行通信的硬件连接实现: 双机异步串行通信的几种不同接口方式。 1)单片机双机直连(TTL电平,仅适用于很短通信距离和较低波特率,连接如下图 参考上限距离:20

24、厘米之内 2)RS-232串行接口* (值得了解的内容) 国际电子工业协会(EIA)制定RS-232串行通信接口标准,规定如下: TXD,RXD信号:逻辑1=-3-15V,逻辑0=+3+15V,RS-232C最大通信距离在15m左右,PC机串口即是一个标准RS-232口PC机RS-232C DB9串行口引脚 RS-232电平和单片机TTL电平间需要电平转换芯片接口,常用的是MAX232. MAX3232等。 485、422串行通信接口(工厂最常用的) 为进一步提高串行通信的距离,采用差分输出驱动方式可以有效大幅提高可靠通信距离,即485通信方式,其中485为半双工,422为全双工通信方式,接口

25、方式和常用芯片如下:485半双工通信接口示意图和真值表发送接收 不管是RS232C,还是485,422通信方式,都只是硬件逻辑上有差异,基本的通信编程方式都是和异步串行口一致的,将51单片机的异步串口分别连接不同的转换芯片即可实现232,485,422等通信。 485,422总线在工厂和企业中应用极为广泛,仍是目前最为常用的通信总线。串入并出扩展输出端口并入串出扩展输入端口2、方式、方式1波特率可变的波特率可变的8位异步通信接口方式。位异步通信接口方式。波特率波特率=(2SMOD/32)T1溢出率溢出率方式方式1发送发送CPU 执行一条执行一条写写SBUF指令指令,就启动了串口发送,就启动了串

26、口发送当当SEND和和DATA有效时,数据从有效时,数据从TXD输出。输出。方式方式1接收接收允许接收位允许接收位REN被置被置“1”后,接收器就开始工作后,接收器就开始工作,RXD引脚上发生由引脚上发生由“1”到到“0”的跳变的跳变,接收器,接收器开始接收。开始接收。共阳共阳LEDLED数码管:数码管:公共端公共端( (字位字位) ) 接高电平,接高电平,笔划笔划( (字段字段) ) 置为低电平置为低电平就被点亮了就被点亮了h g f e d c b ah g f e d c b a累加器累加器 A1 1 0 0 0 0 0 01 1 0 0 0 0 0 00C0H = 0C0H = “0

27、0”比如要显示比如要显示“0 0” 须令须令a b c d e f a b c d e f 为为“0 0” 电平,电平,g hg h为为“1 1”电平。电平。再再比如要显示比如要显示“3 3” 须令须令a b c d g a b c d g 为为“0 0” 电平,电平,e f he f h为为“1 1”电平。电平。1 0 1 1 0 0 0 01 0 1 1 0 0 0 00B0H = 0B0H = “3 3”共阳极共阳极h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh hh g f a低电平点亮低电平点亮接高电平接高电平例:例:利用串行

28、口利用串行口工作方式工作方式0 0扩展出扩展出8 8位并行位并行I/OI/O口,口,驱动驱动共阳共阳LEDLED数码管显示数码管显示0 09 9。A AB BCLKCLKh g f e d c b ah g f e d c b aCLRCLR+5V+5VVCCVCCTxDTxDRxDRxD803174LS164共阳共阳LEDLED数码管数码管共阳共阳LEDLED数码管数码管显示显示0-90-9数数字的子程序字的子程序( (查表查表) ) :DSPLY:MOV DPTR, #TABLE MOVC A, A+DPTR MOV SBUF, A JNB TI, $ CLR TI RETTABLE:DB

29、 0C0H,0F9H,0A4H DB 0B0H,99H,92H DB 82H,0F8H,80H,90H2、方式、方式1的应用的应用(双机通信双机通信)RXDTXDGNDRXDTXDGND甲机甲机乙机乙机思考:思考:硬件连接如上图,试编程硬件连接如上图,试编程实现甲机连续发送实现甲机连续发送16个数个数据给乙机据给乙机提示:通常查询发送,中断接收提示:通常查询发送,中断接收 也可查询接收,但要耗费也可查询接收,但要耗费 CPU资源。资源。 例:把内部RAM 40H5FH单元中的ASCII码,由甲机发送到乙机,波特率1200,无奇偶校验,晶振fosc=11.0592MHz。 解:设置甲机在方式1下发送,SCON40H;乙机串行方式1接收,SCON50H。T1做波特率发生器,TH1重装初值E8H,TMOD20H。 波特率计算波特率计算波特率32122256smodoscfx 参考程序:甲机发送 MOV TMOD

温馨提示

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

评论

0/150

提交评论