8051内部资源C编程.ppt_第1页
8051内部资源C编程.ppt_第2页
8051内部资源C编程.ppt_第3页
8051内部资源C编程.ppt_第4页
8051内部资源C编程.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、8051内部资源的C编程,工程训练中心,授课老师:明显诚,8051内部资源的C编程,1. 中断,1.1 中断源,1、8051单片机有5个中断,增加很少的硬件就可把各种硬件中断源线或称为一个外部中断输入,然后再顺序检索引起中断的特定源; 2、8051有两个中断优先级,每个中断源的优先级可以编程控制,中断允许受到CPU开中断和中断源开中断的两级控制;,1.1 中断源,3、8051单片机的5个中断源: 1)外部中断请求0,由INT0输入; 2)外部中断请求1,由INT1输入; 3)片内定时器/计数器0溢出中断请求; 4)片内定时器/计数器1溢出中断请求; 5)片内串行口发送/接收中断请求;,1.1

2、中断源,4、每个中断源是否产生中断,由对应的多个中断请求触发器实现,分别由SFR中的TCON和SCON相应位锁存; 1)定时器/计数器控制寄存器TCON:,1.1 中断源,IT0、IT1外部中断0,1触发方式选择位;软件设置;1下降沿触发,高电平到低电平的跳变;0电平触发,低电平可引起中断; IE0、IE1外部中断0,1请求标志位;当产生中断请求时由硬件置位,CPU响应中断后,由硬件清除;,1.1 中断源,TF0、TF1定时器/计数器0,1溢出中断请求标志;当定时/计数溢出时由硬件置位,CPU响应中断后由硬件清除;,1.1 中断源,2)串口控制寄存器SCON RI串行口接收中断标志位,串行口接

3、收完一帧数据后请求中断,由硬件置位,置位后由软件清“0”; TI串行口发送中断请求标志位,当串行口发送完一帧数据后请求中断由硬件置位,由软件清零;,1.2 中断的控制,1、中断的控制管理通过寄存器IE和IP编程实现 中断允许寄存器IE: EX0,EX1:外部中断0,1的中断允许位;1开中断,0关中断; ET0,ET1:定时器/计数器0,1溢出中断允许位,1开中断,0关中断;,中断允许寄存器IE,1.2 中断的控制,ES,串行口中断允许位,1串行口开中断,0串行口关中断; ET2,定时器/计数器2溢出中断允许位,1T/C2开中断,0T/C2关中断; EA,CPU开/关中断控制位;,中断允许寄存器

4、IE,1.2 中断的控制,2、中断优先级寄存器IP 当系统中有多个中断源同时请求中断时,CPU按中断源的优先级别,由高到低分别响应; PX0,PX1,外部中断0,1中断优先级控制位;1高优先级,0低优先级 PT0,PT1,定时器/计数器0,1中断优先级控制位; PS,串行口中断优先级控制位;,中断优先级寄存器IP,1.2 中断的控制,8051被复位后,5个中断源都在同一个优先级,若此时其中几个中断源同时产生中断,CPU按照硬件优先级链路顺序响应中断; 外部中断0 定时器/计数器0 外部中断1 定时器/计数器1 串行口中断,高 低,1.3 中断响应,响应中断的阻止条件: 1)CPU正在处理同级或

5、更高级的中断; 2)正在执行的是RETI或是访问IE或IP指令; 3)现行机器周期不是所执行指令的最后一个机器周期;,1.3 中断响应,CPU响应中断后执行如下操作: 1)硬件清除相应的中断请求标志; 2)执行一条硬件子程序,保护断点,并转向中断服务程序的入口地址; 3)结束中断时执行RETI指令,恢复断点,返回主程序;,1.3 中断响应,各中断服务程序入口地址: 1) 外部中断0 0003H 2) 定时器/计数器0 000BH 3) 外部中断1 0013H 4) 定时器/计数器1 001BH 5) 串行口中断 0023H 各中断程序的入口地址仅间隔8个字节,编译器在这些地址放入无条件转移指令

6、,跳转到服务程序的实际地址;,1.4 寄存组切换,当一个特定的任务正在执行,如果遇到更紧急的任务时,在一个具有优先级的系统中,CPU假定第一个任务已经完成,立即处理新任务; 转向新任务后,所使用的通用寄存器破坏了第一个任务使用的中间信息;为避免错误发生,使用上下文切换; 8051有4个寄存器组,每组8个字节,分配R0R7对应8个字节;(PSW中的两位RS0与RS1来设置),寄存器组使得有非常快的上下文切换,1.4 寄存组切换,当发生中断任务时,采用不同的寄存器组,一个任务的8个字节保留,另一个不同的8个字节用在新任务中; 除了PSW中的两位设置外,也可采用using指令指定;,1.4 寄存组切

7、换,中断服务程序的完整语法如下: 返回值 函数名 (参数) 模式重入interrupt n using n Interrupt后接一个031的常整数,不允许使用表达式;,1.4 寄存组切换,中断不允许用于外部函数,它对目标函数代码的影响如下: 1)当调用函数,SFR中的ACC,B,DPH,DPL和PSW入栈; 2)如果不使用寄存器组切换,中断函数所使用的所有工作寄存器都入栈; 3)函数退出前,所有寄存器出栈; 4)函数由8051的指令“RETI”终止;,1.5 中断编程,中断服务程序仅设标志保存I/O输入状态 #include #define uchar unsigned char; ucha

8、r status; void service_int1(void) interrupt 2 using 2; flag=1; status=p1; ,1.5 中断编程,void main(void) IP=0 x04;/*置INT1高优先级中断*/ IE=0 x84;/*INT1开中断,CPU开中断*/ for( ; ; ) if(flag) switch(status) case 0: break; case 1: break; default: break; flag=0; ,1.5 中断编程,实际上,C51编译器及其C51语言允许对中断所有方面的控制和寄存器组的使用,只需在高级用户编程方

9、式下,关心中断及必要的寄存器组切换;,2. 定时器/计数器(T/C),2.1 与T/C有关的特殊功能寄存器,1、即可编程作定时器,又可作计数器使用,若是计数内部晶振驱动时钟,即定时器用;若是计数8051的输入管脚的脉冲信号,即计数器用; 2、与T/C有关的特殊功能寄存器包括 1)计数寄存器TH和TL,TH是16位,计数寄存器由高8位和TL低8位构成,定时器/计数器的初始值由TH和TL设置;,2.1 与T/C有关的特殊功能寄存器,2)定时器/计数器控制寄存器TCON TR0,TR1,T/C启动控制位,1启动,0停止; TCON复位后清零,T/C需受软件控制才能启动,当计数满溢出时,产生向高位进位

10、TF溢出中断请求标志;,2.1 与T/C有关的特殊功能寄存器,3)T/C方式控制寄存器TMOD C/T计数器或定时器选择位,1计数器,0定时器; GATE门控信号,1T/C的启动受双重控制,即TR和INT同时为高;0T/C的启动仅受TR的控制;,2.1 与T/C有关的特殊功能寄存器,M1和M0,工作方式选择位,2.1 与T/C有关的特殊功能寄存器,4)定时器/计数器2控制寄存器 TF2,溢出标志,必须由软件清零; EXF2,T/C2外部标志,当EXEN2=1,且T2EX引脚上出现负跳变引起捕获或重装载时置位,EXF2要靠软件来清除; RCLK,接受时钟标志,1用定时器2溢出作为串行口的接收时钟

11、,0定时器1溢出脉冲作接收时钟;,2.1 与T/C有关的特殊功能寄存器,TCLK,发送时钟标志,1定时器2溢出脉冲作为串行口的发送时钟,0定时器1的溢出脉冲作为发送时钟; EXEN2,T/C2外部允许标志,1若定时器2未作串行口的波特率发生器,T2EX端的负跳变引起T/C2的捕获或重装载;0T2EX端的外部信号不起作用;,2.1 与T/C有关的特殊功能寄存器,TR2,T/C2运行控制位;1启动,0停止; C/T2,计数器或定时器选择位,1计数器,0定时器; CP/RL,捕获/重载标志,1当EXEN2=1,且T2EX端的信号负跳变,发生捕获操作;0若定时器2溢出,或EXEN2=1条件下T2EX端

12、信号负跳变,都会造成自动重装载操作;,2.2 定时器/计数器的工作方式,1、方式0 为13位的T/C,TH由高8位提供,TL由低5位提供,满计数值为2的13次方; C/T=0时,T/C定时器用,振荡源的12分频的信号作为计数脉冲;当C/T=1,T/C为计数器,对外部脉冲输入端T0或T1输入的脉冲计数; 当GATE=0,TR=1,则T/C启动;当GATE=1,启动受TR和INT双重控制;,2.2 定时器/计数器的工作方式,1、方式0 当13位计数满时,TH向高位进位,此进位将中断溢出标志TF置1,产生中断请求,表示定时时间到或是计数次数到; 若T/C开中断,且CPU开中断,当CPU响应中断服务程

13、序后,TF自动清零;,2.2 定时器/计数器的工作方式,2、方式1 方式1与方式0基本相同,唯一区别在于计数寄存器的位数是16位的,由TH和TL寄存器各提供8位,满计数值为2的16次方;,2.2 定时器/计数器的工作方式,3、方式2 8位的可自动重装的T/C,满计数值为2的8次方; 方式0,1中,当需要进行下一次定时/计数时,需用软件向TH和TL中重装预置计数初值; 方式2中,TH和TL被当做两个8位计数器,TH寄存8位初值保持不变,由低8位TL进行计数,当计数溢出后,除产生溢出中断请求外,还自动将TH中初值重装到TL中,实现自动装载;,2.2 定时器/计数器的工作方式,4、方式3 只适用于T

14、/C0,TH0和TL0成为两个独立的计数器; TL0可作定时器/计数器,占用T/C0在TCON和TMOD寄存器中的控制位和标志位; TH0只能做定时器用,占用T/C1的资源TR1和TF1; 只有将T/C1用作串行口波特率发生器,T/C0才工作在方式3,以便增加一个定时器;,2.3 定时器/计数器的初始化,1、初始化步骤: 1)确定T/C的工作方式编程TMOD寄存器; 2)计算T/C的计数初值,并装载到TH和TL中来; 3)T/C在中断方式时,须开CPU中断和源中断编程IE寄存器; 4)启动定时器/计数器编程TCON和TR1或TR0位;,2.3 定时器/计数器的初始化,2、计数初值计算 (1)定

15、时器计数初值,定时器方式下,T/C是对机器脉冲计数,跟晶振频率有关; 方式0 13位定时器最大定时间隔= =16.384ms 方式1 16位定时器最大定时间隔= =131.072ms 方式2 8位定时器最大定时间隔= =512us,2.3 定时器/计数器的初始化,若使T/C工作在定时器方式1,要求定时1ms,求计数初值。设计数初值为x,则有:,2.3 定时器/计数器的初始化,(2)计数器的计数初值 方式0 13位计数器的满计数值= =8192; 方式1 16位计数器的满计数值= =65536; 方式2 8位计数器的满计数值= =256;,2.3 定时器/计数器的初始化,(2)计数器的计数初值

16、若使T/C工作在计数器方式2,要求计数10个脉冲的计数初值,设计数初值为x,则有:,2.4 定时器/计数器的应用举例,1、设单片机的fosc=12MHz,要求在P1.0引脚上输出周期为2ms的方波? 周期为2ms的方波要求定时间隔为1ms,每次定时时间到P1.0取反; (1)用定时器0的方式1编程,采用查询方式; #include sbit P1_0=P10; void main(void) TMOD=0 x01; TR0=1;,2.4 定时器/计数器的应用举例,for( ; ; ) TH0=0 xFC;/*根据计算的定时器初值而定*/ TL1=0 x18; do while(!TF0); P

17、1_0!=P1_0; TF0=0; ,2.4 定时器/计数器的应用举例,(2)用定时器0的方式1编程,采用中断方式 #include sbit P1_0=P10; void Timer0_INT(void) interrupt 1 using 1 P1_0 !=P1_0; TH0=0 xFC; TL0=0 x18; ,2.4 定时器/计数器的应用举例,void main(void) TMOD=0 x01; P1_0=0; TH0=0 xFC; TL0=0 x18; EA=1; ET0=1; TR0=1; while(1); ,2.4 定时器/计数器的应用举例,2、在P1.7端接有一个发光二极管

18、,要求利用T/C控制,使用LED亮一秒,灭一秒,周而复始? 因为定时1秒,T/C的三种工作方式不能满足定时间隔,对于较长时间的定时,应采用复合定时的方法; 使T/C0工作在定时器方式1,定时100ms,定时时间到后P1.0取反,即P1.0端输出周期为200ms的方波脉冲; 同时设T/C1工作在计数器方式2,对T1输入的脉冲计数,当计数满5次,定时1s时间到将P1.7端反相,改变灯的状态;,2.4 定时器/计数器的应用举例,#include sbit P1_0=P10; sbit P1_7=P17; void Timer0_INT(void) interrupt 1 using 1 P1_0 !

19、 = P1_0; TH0= TL0= void Timer1_INT(void) interrupt 3 using 2 P1_7 != P1_7; ,2.4 定时器/计数器的应用举例,main( ) P1_7=0; P1_0=1; TMOD=0 x61; TH0=0 x3C; TL0=0 xB0; TH1=-5; TL1=-5; IP=0 x08; EA=1;ET0=1;ET1=1;TR0=1;TR1=1; while(1); ,3. 串行口,3.1 与串行口有关的特殊功能寄存器,1、串行口控制寄存器SCON,3.1 与串行口有关的特殊功能寄存器,SM2,多机通信控制位(方式2,3),1只有

20、接收到第9位为1,RI才置位;0接收到字符RI就置位; REN,串行口接收允许位,1允许串行口接收,0禁止接收; TB8,方式2,3,为发送的第9位数据; RB8,方式2,3,为接收到的第9位数据; TI,发送中断标志,硬件置位,软件清零; RI,接收中断标志,硬件置位,软件清零;,3.1 与串行口有关的特殊功能寄存器,2、电源控制寄存器PCON SMOD,串行口波特率加倍位;1方式1,3波特率=定时器1溢出率/16;方式2波特率为fosc/32;0方式1,3波特率=定时器1溢出率/32;方式2波特率为fosc/64; GF0、GF1:两个通用标志位; PD、IDL:CHMOS器件的低功耗控制位;,3.2 串行口的工作方式,1、方式0 方式0为移位寄存器输入/输出方式,串行数据通过RXD输入/输出,TXD用于输出移位时钟脉冲。 方式0时,收发的数据为8位,低位在前; 发送是以写SBUF寄存器指令开始,8位输出结束时TI被置位; 接收是在REN=1和RI=0同时满足时开始的,接收数据装入SBUF中,结束时RI被置位;,3.2 串行口的工作方式,2

温馨提示

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

评论

0/150

提交评论