定时器例题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
void main(void)
{ TMOD=0x01; //定时器0方式1
TH0=0xf8; TL0=0x30; //装入时间常数 TR0=1; //启动定时器
TF0=0; EA=1; //开全局中断 ET0=1; //开定时器0中断 while(1) ; //主程序死循环,空等待
}
第6章 MCS - 51单片机内部定时器/计数器及串行接口
第6章 MCS - 51单片机内部定时器/计数器及串行接口
3. 利用T0工作方式0,产生1ms的定时,在P1.0引脚上输出 周期为2ms的方波,设系统时钟频率为12MHz,采用查询 方式和中断方式两种方法实现。
由公式T=12/fosc*(213-a)us 计算得 a=7192=1C18H=11100000 11000B 所以TH0=0E0H, TL0=18H
MOV TL0, #18H
第6章 MCS - 51单片机内部定时器/计数器及串行接口
4.若单片机时钟频率为12MHZ,要求从 P1.1引脚输出周期为4ms的方波。
解:此处采用定时器0定时,通过查询TF0 状态检查定时时间是否已到。定时器定 时周期为2ms,TH0= F8H;TL=30H。
第6章 MCS - 51单片机内部定时器/计数器及串行接口
中断方式:
ORG 0000H
SETB TR0
LJMP MAIN
SJMP $
ORG 000BH
TOSER: CPL P1.0
LJMP TOSER
MOV TH0, #0E0H
ORG 0040H
MOV TL0, #18H
MAIN: SP, #60H
RETI
MOV TMOD, #00H
MOV TH0,#0E0H
(3)10次计数的实现 对于中断10次计数,可使T0工作在计数方式,也可用循环程 序的方法实现。本例采用循环程序法。
MOV B, #0AH MOV TMOD, #01H SETB TR0 LOOP: MOV TH0, #3CH MOV TL0, #0B0H
WAIT: JNB TF0, WAIT CLR TF0 DJNZ B, LOOP
MOV TH0,#0D8H
MOV TL0,#0F0H
MOV R2,#00H
MOV TH1,#0E7H
MOV TL1,#0E7H
SETB EA
SETB ET0
SETB ET1
SETB TR0
SETB TR1
SJMP $
END
C语言程序如下: # include <reg51.h> //包含特殊功能寄存器库 sbit P1_1=P1^1; sbit P3_5=P3^5; void main()
P1_0=!P1_0;
}
第6章 MCS - 51单片机内部定时器/计数器及串行接口 (2)采用查询方式处理的程序
汇编程序:
ORG 0000H LJMP MAIN ORG 0100H ;主程序 MAIN:MOV TMOD,#02H
MOV TH0,#06H MOV TL0,#06H SETB TR0 LOOP:JBC TF0,NEXT ;查询计数溢出
第6章 MCS - 51单片机内部定时器/计数器及串行接口
(2) 用定时/计数器T1计数实现,定时/计数器T1工作于计数方式时, 计数脉冲通过T1(P3.5)输入,设定时/计数器T0定时时间到对T1 (P3.5)取反一次,则T1(P3.5)每20ms产生一个计数脉冲,那么定 时500ms只须计数25次,设定时/计数器T1工作于方式2,初值X=25625=231= 11100111B=E7H,TH1=TL1=E7H。因为定时/计数器T0工 作于方式1,定时,则这时方式控制字为01100001B(61H)。定时/计 数器T0和T1都采用中断方式工作。
第6章 MCS - 51单片机内部定时器/计数器及串行接口
查询方式: MOV TMOD, #00H SETB TR0
LOOP: MOV TH0, #0E0H MOV TL0, #18H
WAIT: JNB TF0, WAIT CPL P1.0 CLR TF0 SJMP LOOP
第6章 MCS - 51单片机内部定时器/计数器及串行接口
CPL P1.0 MOV B, #0AH SJMP LOOP
第6章 MCS - 51单片机内部定时器/计数器及串行接口
2. 假设系统时钟为6MHz,编写定时器T0产生1秒定时的 程序。用中断方式。
ORG 0000H RST: LJMP MAIN
ORG 000BH LJMP IT0P
ORG 0100H MAIN: MOV SP,#60H
X=65536-10000=55536=1101100011110000B 则TH0=11011000B=D8H,TL0=11110000B=F0H。
第6章 MCS - 51单片机内部定时器/计数器及串行接口
(1)用寄存器R2作计数器软件计数,中断处理方式。
汇编程序:
ORG 0000H
MOV TL0,#0F0H
【5】 设系统时钟频率为12MHZ,用定时/计数器T0编程实现从 P1.0输出周期为500μs的方波。
分析:从P1.0输出周期为500μs的方波,只须P1.0每250μs取反一 次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式2时,最 大的定时时间为256μs,满足250μs的定时要求,方式控制字应设定 为00000010B(02H)。系统时钟为12MHZ,定时250μs,计数值N 为250,初值X=256-250=6,则TH0=TL0=06H。
#include<reg51.h> // 805I系列的寄存器头文件 sbit P1_1=P1^1; void main(void) {
TMOD=0x01; //定时器0方式1 TH0=0xf8; TL0=0x30; //装入时间常数 TR0=1; //启动定时器 while(1) {
while(!TF0); //查询TF0状态,时间未到则空等待 P1_1=!P1_1; //P1.1取反 TH0=0xf8; TL0=0x30; //装入时间常数 } }
第6章 MCS - 51单片机内部定时器/计数器及串行接口
【6】设系统时钟频率为12MHZ,编程实现从P1.1输出周期为1s的 方波。
根据例5-2的处理过程,这时应产生500ms的周期性的定时, 定时到则对P1.1取反就可实现。由于定时时间较长,一个定时/计数器 不能直接实现,可用定时/计数器T0产生周期性为10ms的定时,然后 用一个寄存器R2对10ms计数50次或用定时/计数器T1对10ms计数50 次实现。系统时钟为12MHZ,定时/计数器T0定时10ms,计数值N为 10000,只能选方式1,方式控制字为00000001B(01H),初值X:
SJMP LOOP NEXT:CPL P1.0
SJMP LOOP SJMP $ END
C语言程序: # include <reg51.h> //包含特殊功 能寄存器库
sbit P1_0=P1^0; void main() { char i; TMOD=0x02; TH0=0x06;TL0=0x06; TR0=1; for(;;) { if (TF0) { TF0=0;P1_0=! P1_0;} //查询计数溢出 } }
SETB ET0
SETB TR0
SJMP $
INTT0:MOV TH0,#0D8H
第6章 MCS - 51单片机内部定时器/计数器及串行接口
C语言程序: # include <reg51.h> //包含特殊功能寄存器库 sbit P1_1=P1^1; char i; void main() { TMOD=0x01; TH0=0xD8;TL0=0xf0; EA=1;ET0=1; i=0; TR0=1; while(1); } void time0_int(void) interrupt 1 //中断服务程序 { TH0=0xD8;TL0=0xf0; i++; if (i= =50) {P1_1=! P1_1;i=0;} }
SETB ET0
SETB TR0
SJMP $
END
sbit P1_0=P1^0; void main() { TMOD=0x02; TH0=0x06;TL0=0x06; EA=1;ET0=1; TR0=1; while(1); } void time0_int(void) interrupt 1 //中断服务程序 {
LJMP MAIN
INC R2
ORG 000BH
CJNE R2,#32H,NEXT
LJMP INTT0
CPL P1.1
ORG 0100H
MOV R2,#00H
MAIN:
MOV TMOD,#01HNEXT:RETI
MOV TH0,#0D8H
END
MOV TL0,#0F0H
MOV R2,#00H
SETB EA
方式0最长可定时16.384ms; 方式1最长可定时131.072ms; 方式2最长可定时512s。 选方式1,每隔100ms中断一次,中断10次为1s。
(2)计算计数初值 因为:(216-a)×2×10-6 = 10-1 所以:a=15536=3CB0H 因此:TH0=3CH,TL0=B0H
第6章 MCS - 51单片机内部定时器/计数器及串行接口
MOV B,#0AH
MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH
SETB TR0 SETB ET0 SETB EA HERE: SJMP HERE
ITOP: MOV TL0,#0B0H MOV TH0,#3CH DJNZ B,LOOP
CLR TR0 LOOP:RETI
第6章 MCS - 51单片机内部定时器/计数器及串行接口
练习
1. 设fosc=6MHz,要求P1.0上输出周期为2s的方波,用定时 器T0。采用查询方式。
(1)定时器T0工作方式的确定 因定时时间较长,采用哪一种工作方式?由定时器各种工 作方式的特性,可计算出:因定时时间较长,采用哪一种 工作方式?由定时器各种工作方式的特性,可计算出:
第6章 MCS - 51单片机内部定时器/计数器及串行接口
(1)采用中断处理方式的程序:
汇编程序: ORG 0000H
C语言程序: # include <reg51.h> //包含特殊 功能寄存器库
LJMP MAIN ORG 000BH ;中断处理程序 CPL P1.0
RETI ORG 0100H ;主程序 MAIN:MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB EA
Fra Baidu bibliotek
第6章 MCS - 51单片机内部定时器/计数器及串行接口
采用中断方式编程
#include<reg51.h>
sbit P1_1=P1^1; void timer0(void) interrupt 1 //定时器0中断服务程序
{
TH0=0xf8; TL0=0x30; //装入时间常数
P1_1=!P1_1;//P1.1取反
第6章 MCS - 51单片机内部定时器/计数器及串行接口
{ TMOD=0x61; TH0=0xD8;TL0=0xf0; TH1=0xE7; TL1=0xE7; EA=1; ET0=1;ET1=1; TR0=1;TR1=1; while(1); } void time0_int(void) interrupt 1 //T0中断服务程序 { TH0=0xD8;TL0=0xf0; P3_5=!P3_5; } void time1_int(void) interrupt 3 //T1中断服务程序 { P1_1=! P1_1; }
汇编程序如下:
ORG 0000H LJMP MAIN ORG 000BH MOV TH0,#0D8H MOV TL0,#0F0H CPL P3.5 RETI
ORG 001BH CPL P1.1 RETI
第6章 OMRCGS -05110单0H片机内部定时器/计数器及串行接口
MAIN:
MOV TMOD,#61H
相关文档
最新文档