Chap4_2 8051内部资源的C编程_第1页
Chap4_2 8051内部资源的C编程_第2页
Chap4_2 8051内部资源的C编程_第3页
Chap4_2 8051内部资源的C编程_第4页
Chap4_2 8051内部资源的C编程_第5页
已阅读5页,还剩134页未读 继续免费阅读

下载本文档

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

文档简介

1、整理整理ppt18051内部资源2011.4整理整理ppt2Chap8 8051内部资源 8.1 外部中断:INT0、INT1 8.2 定时/计数器:T0、T1 8.3 串行口:RXD、TXD整理整理ppt38.1 外部中断整理整理ppt48051外部中断 中断中断 中断源中断源 中断优先级中断优先级 中断嵌套中断嵌套整理整理ppt58051外部中断 中断:中断:当当CPUCPU正处理某项事务时,若外界或内部发生紧正处理某项事务时,若外界或内部发生紧急事件,要求急事件,要求CPUCPU暂停正在处理的工作转而去处理这个暂停正在处理的工作转而去处理这个紧急事件,待处理完以后再回到原来被中断的地方,

2、紧急事件,待处理完以后再回到原来被中断的地方,继续执行原来被中断了的程序,这样的过程称为中断。继续执行原来被中断了的程序,这样的过程称为中断。(堆栈)(堆栈) 中断源中断源:向:向CPUCPU提出中断请求的源称为中断源提出中断请求的源称为中断源 外部跳变信号(下降延)外部跳变信号(下降延) 外部低电平等外部低电平等 (0 0)整理整理ppt68051外部中断 中断优先级中断优先级: :当几个中断源同时请求中断时,当几个中断源同时请求中断时,CPUCPU应优应优先响应最需紧急处理的中断请求。为此,需要规定各先响应最需紧急处理的中断请求。为此,需要规定各个中断源的优先级。在优先级高的中断请求处理完

3、了个中断源的优先级。在优先级高的中断请求处理完了以后。再响应优先级低的中断请求。以后。再响应优先级低的中断请求。 中断嵌套中断嵌套: :当当CPUCPU正在处理一个优先级低的中断请求的正在处理一个优先级低的中断请求的时,如果发生另一个优先级比它高的中断请求,时,如果发生另一个优先级比它高的中断请求,CPUCPU能能暂停当前处理的中断,转去处理优先级高的中断请求,暂停当前处理的中断,转去处理优先级高的中断请求,待处理完以后,再回到原来正在处理的低级中断程序,待处理完以后,再回到原来正在处理的低级中断程序,这种高级中断源能中断低级中断源的中断处理称为中这种高级中断源能中断低级中断源的中断处理称为中

4、断嵌套。断嵌套。 整理整理ppt78051中断中断 80518051单片机有单片机有 5 5个个中断源中断源 2 2个个中断优先级中断优先级(2(2级级中断嵌套中断嵌套),),优先级可通过编程实现优先级可通过编程实现 IEIE(中断允许寄存器):中断源的中断请求是否能得到(中断允许寄存器):中断源的中断请求是否能得到响应,受响应,受IEIE的控制;的控制; IPIP(中断优先级寄存器):各个中断源的优先级可由(中断优先级寄存器):各个中断源的优先级可由IPIP的各位来确定;同一优先级中的各中断源同时请求中断的各位来确定;同一优先级中的各中断源同时请求中断时,由内部的查询逻辑来确定响应的次序。时

5、,由内部的查询逻辑来确定响应的次序。 整理整理ppt880518051中断源中断源 80518051五个中断源五个中断源 INT0INT0中断(中断(P3.2P3.2) T0T0中断中断 (P3.4P3.4) INT1INT1中断(中断(P3.3P3.3) T1T1中断中断 (P3.5P3.5) 串行中断(串行中断(P3.0P3.0、P3.1P3.1)整理整理ppt98051中断入口(中断入口(ROM)地址和优先级)地址和优先级中断源中断源中断号(中断号(n n) 中断入口地址(中断入口地址(8n+38n+3)中断优先级中断优先级INT0INT0中断中断0 00003H0003H高高低低T0T

6、0中断中断1 1000BH000BHINT1INT1中断中断2 20013H0013HT1T1中断中断3 3001BH001BH串行口中断串行口中断4 40023H0023HT2T2中断中断5 5002BH002BH整理整理ppt108051 INT0中断机理 当当INT0INT0引脚输入如下信号:引脚输入如下信号: 下降沿(下降沿(IT0=1IT0=1)或)或 低电平(低电平(IT0=0IT0=0) CPUCPU自动(硬件)产生中断标志(自动(硬件)产生中断标志(IE0=1IE0=1)此时此时 若若INT0INT0中断允许(使能中断允许(使能EX0=1EX0=1,EA=1EA=1),则),则

7、CPUCPU立即停止当前程序,立即停止当前程序,跳转到跳转到INT0INT0对应的中断入口(对应的中断入口(ROMROM保留地址保留地址0 x00030 x0003)执行中断服务程)执行中断服务程序(中断服务程序后序(中断服务程序后CPUCPU自动对中断标志清零:自动对中断标志清零:IE0=0IE0=0),待),待INT0INT0中中断服务程序执行完毕后再回原执行程序处;断服务程序执行完毕后再回原执行程序处; 若若若若INT0INT0中断未允许,则程序不能跳转到中断未允许,则程序不能跳转到INT0INT0中断入口,不执行中中断入口,不执行中断服务程序(中断标志断服务程序(中断标志IE0IE0不

8、能自动清不能自动清0 0)。)。问提:中断标志问提:中断标志IE0IE0的产生与中断使能是否有关?的产生与中断使能是否有关?整理整理ppt11INT0中断方式执行流程中断方式执行流程#include reg51.hunsigned char i=0;/*int0中断服务程序中断服务程序*/void INT0_ISR(void) interrupt 0 delay(200);if((P3&0 x02)=0 x00)P1=+i;/*主函数主函数*/void main (void) IT0=1; /下降延中断下降延中断 EX0 = 1; /int0中断使能中断使能 EA = 1; /总中断使

9、能总中断使能 while(1) ; /等待中断等待中断主程序主程序中断响应中断响应初始化中断初始化中断等待中断等待中断中断服务程序中断服务程序返回中断返回中断自动清中断标志自动清中断标志整理整理ppt12INT0 查询方式void main(void)void main(void) IT0=1; IT0=1; /EX0=1;EA=1;/EX0=1;EA=1;while(1)while(1) /查询方式查询方式1 1:if(IE0= =1)if(IE0= =1) IE0=0;/ IE0=0;/手动清中断标志手动清中断标志 /P1=+I;/P1=+I; _-_-P2=LED_segbufiP2=L

10、ED_segbufiP0=LED_bitiP0=LED_bitiI+;I+;If(I=6)If(I=6)I=0I=0delay(500);delay(500); void main(void)void main(void) while(1)while(1) /查询方式查询方式2 2:while(IE0= =0)while(IE0= =0) ; /; /等待等待INT0INT0外部中断外部中断 IE0=0; /IE0=0; /手动清中断标志手动清中断标志/ 整理整理ppt1380518051中断系统中断系统整理整理ppt14与中断有关的与中断有关的SFR 注注: :* *表示可以位寻址表示可以位

11、寻址SFRD7D6D5D4D3D2D1D0地址地址*IP- -PT2PSPT1PX1PT0PX0B8H*IEEA-ET2ESET1EX1ET0EX0A8HTMODGATEC/T#M1M0GATEC/T#M1M089H*TCONTF1TR1TF0TR0IE1IT1IE0IT088HSCONSM0SM1SM2RENTB8RB8TIRI98HPCONSMOD-87H整理整理ppt15TCONTCON:定时计数器控制寄存器定时计数器控制寄存器TF1TF1、TF0 TF0 :T1T1、T0T0溢出标志溢出标志 TR1TR1、TR0 TR0 :T1T1、T0T0启动控制位(启动控制位(TR=1:TR=1:

12、启动定时器)启动定时器) IE1IE1、IE0 IE0 :INT1INT1、INT0INT0中断标志中断标志IT1IT1、IT0 IT0 :INT1INT1、INT0INT0触发方式控制位(触发方式控制位(IT=1:IT=1:下降沿触发,下降沿触发,IT=0IT=0:低电平触发):低电平触发)TF1TF1、TF0TF0、IE1IE1、IE0IE0都具有自动清零功能。都具有自动清零功能。D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0整理整理ppt16SCONSCON:串行口控制寄存器串行口控制寄存器 SM0 SM1SM0 SM1串行模式选择串行模式选择 SM2

13、SM2 多机通讯允许位:方式多机通讯允许位:方式0 0时时, ,此位应该为此位应该为0 0;模式;模式1 1时时, ,当接收到停止位时当接收到停止位时, ,该位将置位;方式该位将置位;方式2 2或方式或方式3 3时时, ,当接收的第当接收的第9 9位数据为位数据为1 1时时, ,将置位将置位 REN REN 串行接收允许位串行接收允许位 TB8 TB8 在模式在模式2 2和模式和模式3 3中中, ,将被发送数据的第将被发送数据的第9 9位位 RB8RB8:在方式:在方式0 0中中, ,该位不起作用;在方式该位不起作用;在方式1 1中该位为接中该位为接收数据的停止位;在方式收数据的停止位;在方式

14、2 2和方式和方式3 3 中为接收数据的第中为接收数据的第9 9 位位 TI TI 串行发送结束标志,由串行发送结束标志,由软件软件清零清零 RI RI 串行接收结束标志,由串行接收结束标志,由软件软件清零清零D7D6D5D4D3D2D1D0SM0SM0SM1SM1SM2SM2RENRENTB8TB8RB8RB8TITIRIRI整理整理ppt17IEIE:中断允许寄存器中断允许寄存器EAEA: 使能标志位。使能标志位。 1:1:所有中断使能;所有中断使能;0:0:禁止所有中断禁止所有中断ET2ET2:T2T2中断使能中断使能ESES: 串行通信中断使能串行通信中断使能ET1ET1:T1T1中断

15、使能中断使能EX1EX1:INT1INT1中断使能中断使能ET0ET0:T0T0中断使能中断使能EX0EX0:INT0INT0中断使能中断使能D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0EAEA- -ET2ET2ESESET1ET1EX1EX1ET0ET0EX0EX0整理整理ppt18IP:中断优先级寄存器中断优先级寄存器- - 保留保留- - 保留保留PT2PT2:T2T2中断优先级中断优先级PSPS: 串行通信中断优先级串行通信中断优先级PT1PT1:T1T1中断优先级中断优先级PX1PX1:INT1INT1优先级优先级PT0PT0:T0T0中断优先级中断优先级PX0P

16、X0:INT0INT0优先级优先级D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0- - - -PT2PT2PSPSPT1PT1PX1PX1PT0PT0PX0PX0整理整理ppt19与中断有关的各位 PX0PX0、PT0PT0、PX1PX1、PT1PT1、PSPS EX0EX0、ET0ET0、EX1EX1、ET1ET1、ESES、EAEA IT0IT0、IT1IT1 TR0TR0、TR1TR1 IE0IE0、 IE1 IE1 、TF0TF0、TF1TF1、 TI TI 、RIRI 以上各位可位寻址,且均为高电平有效以上各位可位寻址,且均为高电平有效整理整理ppt208051外部

17、中断编程示例#include reg51.h/C51 中断程序框架中断程序框架/*int0中断服务程序中断服务程序*/void INT0_ISR (void) interrupt 0 using 0 /中断服务程序中断服务程序 /*主函数主函数*/void main (void) IT0=1; EX0 = 1; EA = 1; / 打开中断源打开中断源 while (1) ; /等待中断等待中断整理整理ppt21中断服务函数与寄存器的定义中断服务函数与寄存器的定义 为了满足在为了满足在C C语言源程序中直接编写中断服务程序的要语言源程序中直接编写中断服务程序的要求,求,C51C51编译器对函数

18、的定义进行了扩展,增加了一个编译器对函数的定义进行了扩展,增加了一个扩展关键字扩展关键字interruptinterrupt。它是函数定义时的一个选项,。它是函数定义时的一个选项,加上这个选项即可将一个函数定义成中断服务函数。加上这个选项即可将一个函数定义成中断服务函数。 定义格式为:定义格式为: 函数类型函数类型 函数名(形式参数表)函数名(形式参数表) interrupt n using n interrupt n using n 整理整理ppt22中断服务函数与寄存器的定义中断服务函数与寄存器的定义函数类型函数类型 函数名(形式参数表)函数名(形式参数表) interrupt n usi

19、ng n interrupt n using n 关键字关键字interruptinterrupt后面的后面的n n是中断号,是中断号,n n的范围为的范围为0 03131。编译器从。编译器从8n+38n+3处产生中断向向量,具体的中断号处产生中断向向量,具体的中断号n n和中断向量取决于和中断向量取决于80518051单片机芯片型号,常用中断源和中断向量如表所示。单片机芯片型号,常用中断源和中断向量如表所示。 中断号中断号n n中断源中断源中断向量中断向量8n+38n+30 0INT0INT00003H0003H1 1T0T0000BH000BH2 2INT1INT10013H0013H3

20、3T1T1001BH001BH4 4串行口串行口0023H0023H整理整理ppt23中断服务函数与寄存器的定义中断服务函数与寄存器的定义工作寄存器:工作寄存器:80518051片内片内RAMRAM中有中有4 4个工作寄存器组,每个寄存器组个工作寄存器组,每个寄存器组中含中含8 8个工作寄存器(个工作寄存器(R0R0R7R7)。)。C51C51编译器扩展了一个关键字编译器扩展了一个关键字usingusing,专门用来选择,专门用来选择80518051单片机的单片机的工作寄存器组。工作寄存器组。在定义一个函数时,在定义一个函数时,usingusing后面的后面的n n是一个是一个0 03 3的常

21、数,分别表示的常数,分别表示4 4个功能完全一样的工作寄存器组。个功能完全一样的工作寄存器组。在定义一个函数时,在定义一个函数时,usingusing是一个选项,若缺省编译器自动分配是一个选项,若缺省编译器自动分配一个寄存器组作绝对寄存器组访问。需要注意的是,关键字一个寄存器组作绝对寄存器组访问。需要注意的是,关键字usingusing和和interruptinterrupt的后面都不允许跟带运算符的表达式的后面都不允许跟带运算符的表达式。整理整理ppt24中断服务函数与寄存器的定义中断服务函数与寄存器的定义void INT0_ISR(void) interrupt 0 void TIMER0

22、_ISR(void) interrupt 1 void INT1_ISR(void) interrupt 2 void TIMER1_ISR(void) interrupt 3 void UART_ISR(void) interrupt 4 整理整理ppt25中断服务函数与寄存器的定义中断服务函数与寄存器的定义_ Keil C51命令命令 DEFINE BUTTONDEFINE BUTTON(定义按钮)命令(定义按钮)命令 定义定义:DEFINE BUTTON DEFINE BUTTON “按钮名按钮名”,“命令命令” 在在Debug-Function EditorDebug-Function

23、 Editor(Open Ini FileOpen Ini File)中定义外中断)中定义外中断按钮:按钮: define button INT0(P3.2) , PORT3=PORT30 x04define button INT0(P3.2) , PORT3=PORT30 x04 define button T0(P3.4) , PORT3=PORT30 x10 define button T0(P3.4) , PORT3=PORT30 x10 define button INT1(P3.3) , PORT3=PORT30 x08 define button INT1(P3.3) , POR

24、T3=PORT30 x08 define button T1(P3.5) , PORT3=PORT30 x20 define button T1(P3.5) , PORT3=PORT30 x20 每按钮一次对每按钮一次对P3.2P3.2取反取反 删除删除:KILL BUTTON nKILL BUTTON n define button define button “clr drtrclr drtr”, ,”dptr=0dptr=0” kill button 1 kill button 1 整理整理ppt26中断服务函数与寄存器的定义中断服务函数与寄存器的定义_ Keil C51命令命令 EVA

25、LEVALEVAL EVAL (1/2561/256) 0 x000 x00EVAL EVAL (256/256256/256) 0 xFF0 xFFPORT3 0 xFFPORT3 0 xFFex0_isr_counter ex0_isr_counter 询问变量的值询问变量的值整理整理ppt27中断如何扩充中断如何扩充1 1定时器中断作为外部中断使用定时器中断作为外部中断使用 把把80518051的的T1 T1 、T0T0用作对外部脉冲计数方式。每当用作对外部脉冲计数方式。每当P3.4P3.4(T0T0)或)或P3.3P3.3(T1T1)引脚上发生负跳变时,)引脚上发生负跳变时, T1 T

26、1 和和T0T0的计数器加的计数器加1 1。利用这个特性,。利用这个特性,可以把可以把P3.4P3.4和和P3.3P3.3引脚作为外部中断请求输入线,而定时器的溢出引脚作为外部中断请求输入线,而定时器的溢出中断作为外部中断请求标志。中断作为外部中断请求标志。 T0(P3. 4)Vcc整理整理ppt28中断如何扩充中断如何扩充1 1定时器中断作为外部中断使用(软件)定时器中断作为外部中断使用(软件) 定时器定时器T1T1对外部计数对外部计数/ /* *TH1TH1、TL1TL1采用采用1616进制赋值进制赋值* */ /void int0(void) interrupt 3void int0(v

27、oid) interrupt 3 / /* *中断服务程序中断服务程序* */ / void main(void)void main(void) TMOD= TMOD=(TMOD&0 x0f)|0 x60;TMOD&0 x0f)|0 x60; ET1=1; EA=1; TR1=1; ET1=1; EA=1; TR1=1; TH1=0 xFF; / TH1=0 xFF; /* *TH1=-1/256-1TH1=-1/256-1; * */ / TL1=0 xFF; / TL1=0 xFF; /* *TL1=-1%256TL1=-1%256; * */ / while(1) whi

28、le(1) ;T1(P3. 2)整理整理ppt29中断如何扩充中断如何扩充2 2中断和查询结合的方式中断和查询结合的方式整理整理ppt30中断如何扩充中断如何扩充2 2#include #include sbit LED_A=P10;sbit LED_A=P10;sbit LED_B=P11;sbit LED_B=P11;sbit LED_C=P12;sbit LED_C=P12;sbit IA=P13;sbit IA=P13;sbit IB=P14;sbit IB=P14;sbit IC=P15;sbit IC=P15;整理整理ppt31中断如何扩充中断如何扩充2 2void main(vo

29、id)void main(void) IT0=1; IT0=1; IT1=1;IT1=1;EX0=1;EX0=1; EX1=1;EX1=1;EA=1;EA=1;LED_A=0;LED_B=0;LED_C=0;LED_A=0;LED_B=0;LED_C=0;IA=1;IB=1;IC=1;IA=1;IB=1;IC=1;while(1);while(1); 整理整理ppt32中断如何扩充中断如何扩充2 2void int0(void) interrupt 0void int0(void) interrupt 0 LED_A=0;LED_B=0;LED_C=0; LED_A=0;LED_B=0;LED

30、_C=0;IE1=0;IE1=0;EX1=1;EX1=1; void int1(void) interrupt 2void int1(void) interrupt 2 EX1=0; EX1=0; if(IA=0) LED_A=1;if(IA=0) LED_A=1;else if(IB=0) LED_B=1;else if(IB=0) LED_B=1;else if(IC=0) LED_C=1;else if(IC=0) LED_C=1; 整理整理ppt33中断如何扩充中断如何扩充3 3利用硬件扩充多个中断源利用硬件扩充多个中断源采用一个采用一个8/38/3优先编码器优先编码器74LS1487

31、4LS148,把多个中断源信号作为一个中断效果,把多个中断源信号作为一个中断效果很好。很好。 I7-I0I7-I0优先级逐步降低优先级逐步降低GSGS为标志位:判断是否有有效输入为标志位:判断是否有有效输入整理整理ppt34中断如何扩充中断如何扩充3 3软件设计思路软件设计思路#include #include unsigned char status;unsigned char status;bit flag;bit flag;void int1void int1(voidvoid) interrupt 2 using 2 interrupt 2 using 2 flag=1; / flag

32、=1; /* *设置标志设置标志* */ / status=P1; / status=P1; /* *存状态存状态* */ / 整理整理ppt35中断如何扩充中断如何扩充3 3软件设计思路软件设计思路void main(void)void main(void) PX1=1; / PX1=1; /* *置置INT1INT1高优先级中断高优先级中断* */ / EX1=1; EA=1 EX1=1; EA=1; / /* *INT1INT1开中断,开中断,CPUCPU开中断开中断* */ / while(1) while(1) if(flag) / if(flag) /* *有中断有中断* */ /

33、 switch(status) / switch(status) /* *根据中断源分支根据中断源分支* */ / case 0: break; / case 0: break; /* *处理处理0 0* */ / case 1: break; / case 1: break; /* *处理处理1 1* */ / case 2: break; case 2: break; case 3: break; case 3: break; default:; default:; flag=0; flag=0; 整理整理ppt368.2 8.2 定时器定时器整理整理ppt37问题提出void delay

34、(unsigned char n)unsigned char i;for(i=0;in;i+);void delay(unsigned int n)unsigned int i;for(i=0;in;i+);整理整理ppt38问题提出(fosc=11.0592MHz)delay(n) unsigned char(uS)unsigned int(uS)03443.6149.967.2267.293384.712041021465119.41726136.71977154.12248171.42499188.827610206.130211223.532712240.935413258.23801

35、4275.64061529343216310.245817327.64841834551019362.453620379.8562y1=32.82+17.34*y1(us)y2=41.79+26.01*x2(uS)整理整理ppt398051 定时定时/计数器计数器 80518051单片机内部有单片机内部有2 2个个1616位可编程的定位可编程的定时计数器,即时计数器,即T0T0和和T1(8052T1(8052提供提供3 3个,个,这第三个称为这第三个称为T2)T2)。 什么是内部定时、外部计数?什么是内部定时、外部计数? 80518051计数器的计数方式?递增、溢出计数器的计数方式?递增、溢出

36、整理整理ppt408051 定时定时/计数器计数器定时器定时器/ /计数器结构框图计数器结构框图内部定时:输入的时钟脉冲由晶振的输出经内部定时:输入的时钟脉冲由晶振的输出经1212分频后得到;分频后得到;外部计数:接相应的外部输入引脚外部计数:接相应的外部输入引脚T0(P3.4)T0(P3.4)或或T1(P3.5)T1(P3.5)。在这种。在这种情况下,当检测到输入引脚上的下降沿(电平由高跳变到低)时,情况下,当检测到输入引脚上的下降沿(电平由高跳变到低)时,计数器就加计数器就加1 1。整理整理ppt418051 定时定时/ /计数器工作机理计数器工作机理定时器:对机器周期计数,即定时器:对机

37、器周期计数,即n n12/fosc12/fosc计数器:对计数器:对T0T0引脚上的脉冲计数引脚上的脉冲计数定义定时器(定义定时器(T0T0)工作方式:)工作方式: 1313位、位、 1616位、位、8 8位位设置设置T0T0定时初使值,若为定时初使值,若为1616位定时方式,则定时初值可为位定时方式,则定时初值可为0 0(定时最(定时最大)大)6553565535(定时最小)。举(定时最小)。举n=50000,n=50000,则计数初值应为则计数初值应为65536-65536-50000=15536=0 x3CB0,50000=15536=0 x3CB0,需对需对TH0TH0、TL0TL0赋

38、计数初值:赋计数初值: TH0=0 x3C;TL0=0 xB0;TH0=0 x3C;TL0=0 xB0; TH0=(65536-50000)/256; TL0= (65536-50000)%256;TH0=(65536-50000)/256; TL0= (65536-50000)%256;整理整理ppt428051 定时定时/ /计数器工作机理计数器工作机理手工启动定时器(手工启动定时器(TR0=1TR0=1)后,)后,T0T0开始对机器周期计数(硬件对开始对机器周期计数(硬件对TH0TH0、TL0TL0构成的构成的1616位计数器位计数器递增递增计数);当计至计数);当计至TH0=0 xff

39、TH0=0 xff,TL0=0 xffTL0=0 xff后,后,再计一次则定时器产生溢出(溢出标志再计一次则定时器产生溢出(溢出标志TF0=1TF0=1):):此时此时 若若T0T0中断允许(使能中断允许(使能ET0=1ET0=1,EA=1EA=1),则),则CPUCPU立即停止当前程序,立即停止当前程序,跳转到跳转到T0T0对应的中断入口(对应的中断入口(ROMROM保留地址保留地址0 x000B0 x000B)执行中断服务)执行中断服务程序(中断服务程序后程序(中断服务程序后CPUCPU自动对溢出标志清零:自动对溢出标志清零:TF0=0TF0=0),待),待T0T0中断服务程序执行完毕后再

40、回原执行程序处;中断服务程序执行完毕后再回原执行程序处;void TIMER0_ISR(void) interrupt 1 void TIMER0_ISR(void) interrupt 1 / /定时器定时器0 0中断服务程序中断服务程序 若若T0T0中断未允许,则程序不能跳转到中断未允许,则程序不能跳转到T0T0中断入口,不执行中断服中断入口,不执行中断服务程序(中断标志此时务程序(中断标志此时TF0TF0不能自动清不能自动清0 0)。)。整理整理ppt438051定时/ /计数器计数器工作机理机理整理整理ppt448051 定时定时/ /计数器机理计数器机理进入定时器中断服务程序后,必须

41、重新对进入定时器中断服务程序后,必须重新对TH0TH0、TL0TL0赋初值(之前硬件赋初值(之前硬件已把已把TH0TH0、TL0TL0修改了):修改了):void TIMER0_ISR(void)interrupt 1void TIMER0_ISR(void)interrupt 1 TH0=(65536-COUNT)/256;TH0=(65536-COUNT)/256;TL0=(65536-COUNT)%256;TL0=(65536-COUNT)%256;/ void TIMER0_ISR(void)interrupt 1void TIMER0_ISR(void)interrupt 1 / T

42、H0=(65536-COUNT)/256;TH0=(65536-COUNT)/256;TL0=(65536-COUNT)%256;TL0=(65536-COUNT)%256; 问题:以上两种赋初值方式哪种更好?问题:以上两种赋初值方式哪种更好?整理整理ppt458051 定时定时/ /计数器中断方式编程计数器中断方式编程#define COUNT 50000#define COUNT 50000void main(void)void main(void) TMOD=0 x0 TMOD=0 x0; /定时定时/ /计数器方式定义计数器方式定义 TH0= (65536-COUNT)/256;TH0

43、= (65536-COUNT)/256; TL0= (65536-COUNT)%256; / TL0= (65536-COUNT)%256; /定时定时/ /计数器赋初值计数器赋初值 ET0=1; EA=1; /ET0=1; EA=1; /定时器定时器0 0中断允许中断允许 TR0=1; /TR0=1; /定时器定时器0 0定时开始定时开始 while(1); /while(1); /等待定时等待定时/ /计数器中断溢出计数器中断溢出(TF0)(TF0) void TIMER0_ISR(void) interrupt 1 using 1void TIMER0_ISR(void) interru

44、pt 1 using 1 / /进入中断服务程序后,进入中断服务程序后,CPUCPU自动清自动清TF0TF0溢出标志位溢出标志位 TH0= (65536-COUNT)/256; TL0= (65536-COUNT)%256; /TH0= (65536-COUNT)/256; TL0= (65536-COUNT)%256; /重新赋计数值重新赋计数值 /中断服务程序中断服务程序 整理整理ppt468051 定时定时/ /计数器查询方式编程计数器查询方式编程/中断方式中断方式#define COUNT 50000#define COUNT 50000void TIMER0_ISR(void) in

45、terrupt 1void TIMER0_ISR(void) interrupt 1 / /进入后,进入后,CPUCPU自动清自动清TF0TF0标志标志 TH0= (65536-COUNT)/256; TH0= (65536-COUNT)/256; TL0= (65536-COUNT)%256; TL0= (65536-COUNT)%256; / / void main(void)void main(void) TMOD=0 x0 TMOD=0 x0; TH0= (65536-COUNT)/256;TH0= (65536-COUNT)/256; TL0= (65536-COUNT)%256;

46、TL0= (65536-COUNT)%256; ET0=1; EA=1; ET0=1; EA=1; TR0=1; TR0=1; while(1) ; while(1) ; /查询方式查询方式#define COUNT 50000#define COUNT 50000/ /* *void TIMER0_ISR(void) interrupt 1void TIMER0_ISR(void) interrupt 1 / /进入后,进入后,CPUCPU自动清自动清TF0TF0标志标志 TH0= (65536-COUNT)/256; TH0= (65536-COUNT)/256; TL0= (65536-

47、COUNT)%256; TL0= (65536-COUNT)%256; / / * */ /void main(void)void main(void) TMOD=0 x0 TMOD=0 x0; TH0= (65536-COUNT)/256;TH0= (65536-COUNT)/256; TL0= (65536-COUNT)%256; TL0= (65536-COUNT)%256; /ET0=1; EA=1; ET0=1; EA=1; TR0=1; TR0=1; while(1) while(1) /添加查询语句添加查询语句; 整理整理ppt478051 定时定时/ /计数器查询方式编程计数器

48、查询方式编程/查询方式查询方式#define COUNT 50000#define COUNT 50000void main(void)void main(void) TMOD=0 x0 TMOD=0 x0; TH0= (65536-COUNT)/256;TH0= (65536-COUNT)/256; TL0= (65536-COUNT)%256; TL0= (65536-COUNT)%256; /ET0=1; EA=1; ET0=1; EA=1; TR0=1; TR0=1; while(1)while(1) /定时定时/ /计数器查询方式计数器查询方式1 1if(TF0= =1)if(TF0

49、= =1) TF0=0; /TF0=0; /手工清溢出标志手工清溢出标志 TH0= (65536-COUNT)/256;TH0= (65536-COUNT)/256;TL0= (65536-COUNT)%256; TL0= (65536-COUNT)%256; / while(1)while(1) /定时定时/ /计数器查询方式计数器查询方式2 2while(!TF0); /while(!TF0); /定时等待定时等待TF0=0; /TF0=0; /手工清溢出标志手工清溢出标志TH0= (65536-COUNT)/256;TH0= (65536-COUNT)/256;TL0= (65536-C

50、OUNT)%256; TL0= (65536-COUNT)%256; / 整理整理ppt488051定时器工作原理 将定时将定时/ /计数初使值载入计数初使值载入TH0TH0,TL0TL0 启动定时启动定时/ /计数器计数器 TR0=1TR0=1 定时定时/ /计数器溢出计数器溢出CPUCPU自动置位溢出标志自动置位溢出标志TF0TF0整理整理ppt498051 内部定时示例 例例1 1:设单片机:设单片机fosc=12MHzfosc=12MHz,要求在,要求在P1.0P1.0引引脚上输出周期为脚上输出周期为2ms2ms的方波。的方波。分析:分析:用用T0T0实现,采用中断方式实现,采用中断方

51、式机器周期:机器周期:T=1usT=1us计数值:每隔计数值:每隔1ms1ms进入一次进入一次T0T0中断,中断服务程序对中断,中断服务程序对P1_0P1_0取反。因此计数值取反。因此计数值n=1ms/1us=1000n=1ms/1us=1000次次TH0=(65536-1000)/256;TH0=(65536-1000)/256;TL0=(65536-1000)%256;TL0=(65536-1000)%256;整理整理ppt508051 内部定时示例 例例1 1:设单片机:设单片机fosc=12MHzfosc=12MHz,要求在,要求在P1.0P1.0引脚上输出周期为引脚上输出周期为2ms

52、2ms的方波。的方波。 程序基本框架程序基本框架#include reg51.hsbit P1_0=P10;void TIMER0_ISR (void) interrupt 1 void main (void) while (1) ; 整理整理ppt518051 内部定时示例 例例1 1:设单片机:设单片机fosc=12MHzfosc=12MHz,要求在,要求在P1.0P1.0引引脚上输出周期为脚上输出周期为2ms2ms的方波。的方波。定时器主函数初使化定时器主函数初使化TMODTMOD方式定义(方式定义(T0T0、1616位内部定时方式)位内部定时方式)确定计数初值确定计数初值TH0TH0、

53、TL0TL0T0T0中断使能中断使能T0T0启动启动等待等待T0T0定时中断定时中断void main (void) TMOD=0 x?; TH0=(65536-1000)/256; TL0=(65536-1000)%256; ET0=1; EA=1; TR0=1; while (1); 整理整理ppt528051 内部定时示例 例例1 1:设单片机:设单片机fosc=12MHzfosc=12MHz,要求在,要求在P1.0P1.0引引脚上输出周期为脚上输出周期为2ms2ms的方波。的方波。定时器中断服务程序定时器中断服务程序重新赋计数初值重新赋计数初值TH0TH0、TL0TL0对对P1_0P1

54、_0取反取反void TIMER0_ISR (void) interrupt 1 TH0=(65536-1000)/256; TL0=(65536-1000)%256; P1_0=P1_0;整理整理ppt538051 内部定时示例 例例1 1:设单片机:设单片机fosc=12MHzfosc=12MHz,要求在,要求在P1.0P1.0引脚上输出引脚上输出周期为周期为2ms2ms的方波。参考程序见的方波。参考程序见P172P172#include reg51.hsbit P1_0=P10;void TIMER0_ISR (void) interrupt 1 TH0=(65536-1000)/256

55、; TL0=(65536-1000)%256; P1_0=P1_0;void main (void) TMOD=0 x?; TH0=(65536-1000)/256; TL0=(65536-1000)%256; ET0=1; EA=1; TR0=1; while (1); 如何用查询方式实现?如何用查询方式实现?整理整理ppt548051 内部定时示例 例例2 2:设单片机:设单片机fosc=12MHzfosc=12MHz,要求在,要求在P1.0P1.0引脚上输出周期为引脚上输出周期为2ms2ms,占空比为占空比为7575的矩形波。在例的矩形波。在例1 1基础上应作何修改?基础上应作何修改?#

56、include reg51.hsbit P1_0=P10;void TIMER0_ISR (void) interrupt 1 TH0=(65536-1000)/256; TL0=(65536-1000)%256; P1_0=P1_0;void main (void) TMOD=0 x?; TH0=(65536-1000)/256; TL0=(65536-1000)%256; ET0=1; EA=1; TR0=1; while (1); 整理整理ppt558051 内部定时示例 例例2 2:设单片机:设单片机fosc=12MHzfosc=12MHz,要求在,要求在P1.0P1.0引脚上输出周期

57、为引脚上输出周期为2ms2ms,占空比为占空比为7575的矩形波。在例的矩形波。在例1 1基础上应作何修改?基础上应作何修改?#include reg51.hsbit P1_0=P10;unsigned char i=0;void TIMER0_ISR (void) interrupt 1 TH0=(65536-500)/256; TL0=(65536- 500)%256; i+; if(i= =3) P1_0=0; if(i= =4) P1_0=1; i=0; void main (void) TMOD=0 x?; TH0=(65536- 500)/256; TL0=(65536- 500)

58、%256; ET0=1; EA=1; TR0=1; while (1); #include reg51.h“#define COUNT 500sbit P1_0=P10;unsigned char i=0;void TIMER0_ISR (void) interrupt 1 TH0=(65536-COUNT)/256; TL0=(65536- COUNT)%256; i+; if(i= =3) P1_0=0; if(i= =4) P1_0=1; i=0; void main (void) TMOD=0 x?; TH0=(65536- COUNT)/256; TL0=(65536- COUNT)

59、%256; ET0=1; EA=1; TR0=1; while (1); 整理整理ppt568051 内部定时示例 例例3 3:设单片机:设单片机fosc=12MHzfosc=12MHz,要求在,要求在P1.0P1.0引脚上输出周期为引脚上输出周期为2S2S的方波。在例的方波。在例1 1基础上应作何修改?基础上应作何修改?#include reg51.hsbit P1_0=P10;void TIMER0_ISR (void) interrupt 1 TH0=(65536-1000)/256; TL0=(65536-1000)%256; P1_0=P1_0;void main (void) TM

60、OD=0 x?; TH0=(65536-1000)/256; TL0=(65536-1000)%256; ET0=1; EA=1; TR0=1; while (1); 整理整理ppt578051 内部定时示例 例4:循环点亮红、绿、黄灯,时间间隔为1秒。整理整理ppt588051 外部计数器应用示例外部计数器应用示例 例例1:外部中断扩充:外部中断扩充T0(P3.4)Vccvoid TIMER0_ISR (void) interrupt 1 TH0=0 xff; TL0=0 xff; /中断服务程序中断服务程序void main (void) TMOD=0 x?; /T0外部计数方式外部计数方式 TH0=0 xff

温馨提示

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

最新文档

评论

0/150

提交评论