- 1、本文档共90页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机最小系统及应用概论
第五章 C51单片机最小系统及应用;5.1 并行输入/输出接口;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;3.溢出:
计数器溢出时,将使标志位TF0/TF1置“1”。一旦TF0/TF1由0变1,就会引发中断处理事件。
如:定时时间到,闹钟会响。;51子系列单片机有两个16位的可编程定时/计数器:定时/计数器T0和定时/计数器T1;52子系列有三个,还有一个定时/计数器T2
每个定时/计数器既可以对系统时钟计数,实现定时;也可以对外部脉冲信号计数,实现计数功能,通过编程设定来实现。
每个定时/计数器都有多种工作方式,其中T0有四种工作方式;T1有三种工作方式,T2有三种工作方式。通过编程可设定工作方式。
每一个定时/计数器定时或计数时间到时,产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。;5.3.2 定时/计数器T0、T1的结构及工作原理;;计数过程:
在每一个机器周期的S5P2时刻对T0(P3.4)或T1(P3.5)上信号采样一次,如果上一个机器周期采样到高电平,下一个机器周期采样到低电平,则计数器在下一个机器周期的S3P2时刻加1计数。因而需要两个机器周期才能识别一个计数脉冲,所以外部计数脉冲的频率应小于振荡频率的1/24。;5.2.3 定时/计数器的方式和控制寄存器;2.定时/计数器的方式寄存器TMOD;C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0时工作于定时方式。 ;5.2.3 定时/计数器的工作方式;*;2.方式1;3.方式2;方式2是8位的定时/计数方式,最大计数值(满值)为2的8次幂,等于256。如计数值为N,则置入的初值X为:
X=256-N
如定时/计数器T0的计数值为100,则初值为256-100=156,转换成二进制数,则TH0= TL0。
优点:能够进行自动重装载。
缺点:定时/计数范围要小于方式0和方式1;;5.2.4 定时/计数器的初始化编程及应用
;二.定时/计数器的应用;汇编程序:
ORG 0000H
LJMP MAIN
ORG 000BH ;中断处理 CPL P1.0
RETI
ORG 0100H ;主程序
MAIN:
MOV TMOD,#02H
MOV TH0,#06H
MOV TL0,#06H
SETB EA
SETB ET0
SETB TR0
SJMP $
END;(2)采用查询方式处理程序;注意:
如果定时时间大于65536μs,用一个定时/计数器直接处理不能实现,可用两个定时/计数器共同处理或一个定时/计数器配合软件计数方式处理。 ;汇编程序:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0100H
MAIN:
MOV TMOD,#01H
MOV TH0,#0D8H
MOV TL0,#0F0H
MOV R2,#00H
SETB EA
SETB ET0
SETB TR0
SJMP $;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;}
};(2) 用定时/计数器T1计数实现; ORG 0100H
MAIN:
MOV TMOD,#61H
MOV TH0,#0D8H
MOV TL0,#0F0H
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()
{
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(v
文档评论(0)