51单片机内部资源及编程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第6章 MCS-51单片机内部资源及编程
TF0:定时/计数器T0的溢出标志位,当定时/计数器T0计满时,由硬 件使它置位,如中断允许则触发T0中断。进入中断处理后由内部硬件 电路自动清除。 TR0:定时/计数器T0的启动位,可由软件置位或清零,当TR0=1时启 动;TR0=0时停止。
6.2.3 定时/计数器的工作方式 一.方式0
第6章 MCS-51单片机内部资源及编程
(1)采用中断处理方式的程序: 汇编程序: 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 C语言程序: #include <reg51.h> //包含特殊功 能寄存器库 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 //中断服务程序 { P1_0=!P1_0; }
振荡器 12 Tcy S2 TLx THx (低5位) (高8位) 中断请 求 TFx
C/T S1
Tx TRx GATE INTx 或

第6章 MCS-51单片机内部资源及编程
方式1是13位的定时/计数方式,因而最大计数值(满值)为2的13次 幂,等于8192。如计数值为N,则置入的初值X为: X=8192-N 如定时/计数器T0的计数值为1000,则初值为7192,转换成二进 制数为1110000011000B,则TH0=11100000B,TL0=00011000B。
第6章 MCS-51单片机内部资源及编程
6.2.2 定时/计数器的方式和控制寄存器 一.定时/计数器的方式寄存器TMOD
TMOD (89H) D7 GATE ← D6 C/T D5 M1 D4 M0 → D3 GATE ← D2 C/T 定时器0 D1 M1 D0 M0 →
定时器1
其中: M1、M0为工作方式选择位 ,用于对T0的四种工作方式,T1的三 种工作方式进行选择,选择情况如下
第6章 MCS-51单片机内部资源及编程
;中断处理程
第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 ;查询计数溢出 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;} //查询计数溢出 } }
第6章 MCS-51单片机内部资源及编程
如果定时时间大于65536μs,这时用一个定时/计数器直接处理不能实 现,这时可用两个定时/计数器共同处理或一个定时/计数器配合软件计 数方式处理。 【例6-3】设系统时钟频率为12MHZ,编程实现从P1.1输出周期为 1s的方波。 根据例6-2的处理过程,这时应产生500ms的周期性的定时, 定时到则对P1.1取反就可实现。由于定时时间较长,一个定时/计数器 不能直接实现,可用定时/计数器T0产生周期性为10ms的定时,然后 用一个寄存器R2对10ms计数50次或用定时/计数器T1对10ms计数50 次实现。系统时钟为12MHZ,定时/计数器T0定时10ms,计数值N为 10000,只能选方式1,方式控制字为00000001B(01H),初值X: X=65536-10000=55536=1101100011110000B 则TH0=11011000B=D8H,TL0=11110000B=F0H。
第6章 MCS-51单片机内部资源及编程
加法计数器在使用时注意两个方面。 第一,由于它是加法计数器,每来一个计数脉冲,加法器中的内 容加1个单位,当由全1加到全0时计满溢出,因而,如果要计N个单 位,则首先应向计数器置初值为X,且有: 初值X=最大计数值(满值)M-计数值N 在不同的计数方式下,最大计数值(满值)不一样,一般来说, 当定时器/计数器工作于R位计数方式时,它的最大计数值(满值) 为2的R次幂。 第二,当定时/计数器工作于计数方式时,对芯片引脚T0(P3.4) 或T1(P3.5)上的输入脉冲计数,计数过程如下:在每一个机器周 期的S5P2时刻对T0(P3.4)或T1(P3.5)上信号采样一次,如果 上一个机器周期采样到高电平,下一个机器周期采样到低电平,则 计数器在下一个机器周期的S3P2时刻加1计数一次。因而需要两个 机器周期才能识别一个计数脉冲,所以外部计数脉冲的频率应小于 振荡频率的1/24。
第6章 MCS-51单片机内部资源及编程
(1)用寄存器R2作计数器软件计数,中断处理方式。 汇编程序: ORG 0000H MOV TL0,#0F0H LJMP MAIN INC R2 ORG 000BH CJNE R2,#32H,NEXT LJMP INTT0 CPL P1.1 ORG 0100H MOV R2,#00H MAIN:MOV TMOD,#01H NEXT:RETI MOV TH0,#0D8H END MOV TL0,#0F0H MOV R2,#00H SETB EA SETB ET0 SETB TR0 SJMP $ INTT0:MOV TH0,#0D8H
第6章 MCS-51单片机内部资源及编程
6.2 定时/计数器接口
6.2.1 定时/计数器的主要特性 1.MCS-51系列中51子系列有两个16位的可编程定时/计数器: 定时/计数器T0和定时/计数器T1,52子系列有三个,还有一个定时/ 计数器T2。 2.每个定时/计数器既可以对系统时钟计数实现定时,也可以对 外部信号计数实现计数功能,通过编程设定来实现。 3.每个定时/计数器都有多种工作方式,其中T0有四种工作方式; T1有三种工作方式,T2有三种工作方式。通过编程可设定工作于某 种方式。 4.每一个定时/计数器定时计数时间到时产生溢出,使相应的溢 出位置位,溢出可通过查询或中断方式处理。
第6章 MCS-51单片机内部资源及编程
二.定时/计数器的应用 通常利用定时/计数器来产生周期性的波形。利用定时/计数器产生 周期性波形的基本思想是:利用定时/计数器产生周期性的定时,定时 时间到则对输出端进行相应的处理。如产生周期性的方波只须定时时 间到对输出端取反一次即可。 【例6-2】 设系统时钟频率为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。
二.定时/计数器的控制寄存器TCON
TCON
(88H)
D7
TF1
D6
TR1
D5
TF0
D4
TR0
D3
IE1
D2
IT1
D1
IE0
D0
IT0
其中: TF1:定时/计数器T1的溢出标志位,当定时/计数器T1计满时,由 硬件使它置位,如中断允许则触发T1中断。进入中断处理后由内部硬 件电路自动清除。 TR1:定时/计数器T1的启动位,可由软件置位或清零,当TR1=1时 启动;TR1=0时停止。
M1 0 0 1 1 M0 0 1 0 1 工作方式 0 1 2 3 方式说明 13位定时/计数器 16位定时/计数器 8位自动重置定时/计数器 两个8位定时/计数器(只有T0有)
第6章 MCS-51单片机内部资源及编程
C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0 时工作于定时方式。 GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号 的影响。
第6章 MCS-51单片机内部资源及编程
由于是8位的定时/计数方式,因而最大计数值(满值)为2的8 次幂,等于256。如计数值为N,则置入的初值X为: X=256-N 如定时/计数器T0的计数值为100,则初值为256-100=156,转 换成二进制数为10011100B,则TH0= TL0=10011100B。 注意: 由于方式2计满后,溢出信号会触发三态门自动地把TH0(或 TH1)的值装入TL0(或TL1)中,因而如果要重新实现N个单位的 计数,不用重新置入初值。
第6章 MCS-51单片机内部资源及编程
三.方式2
振荡器 12
S1 Tx TRx GATE INTx 或 Tcy C/T
S2ห้องสมุดไป่ตู้
TLx (8位) 中断请 求 TFx 重装初值 8 THx (8位)

方式2下,16位的计数器只用了8位来计数,用的是TL0(或TL1) 的8位来进行计数,而TH0(或TH1)用于保存初值。当TL0(或TL1) 计满时则溢出,一方面使TF0(或TF1)置位,另一方面溢出信号又会 触发图6.5上的三态门,使三态门导通,TH0(或TH1)的值就自动装 入TL0(或TL1)。
四.方式3 方式3只有定时/计数器T0才有,当M1M0两位为11时,定时/计数 器T0工作于方式3,方式3的结构如下图. 方式3下,定时/计数器T0被分为两个部分TL0和TH0,其中,TL0 可作为定时/计数器使用,占用T0的全部控制位:GATE、C/T、TR0 和TF0;而TH0固定只能作定时器使用,对机器周期进行计数,这时 它占用定时/计数器T1的TR1位、TF1位和T1的中断资源。
第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;} }
第6章 MCS-51单片机内部资源及编程
6.2.4 定时/计数器的初始化编程及应用 一.定时/计数器的编程
MCS-51单片机定时/计数器初始化过程如下: 1.根据要求选择方式,确定方式控制字,写入方式控制寄存器 TMOD。 2.根据要求计算定时/计数器的计数值,再由计数值求得初值,写 入初值寄存器。 3.根据需要开放定时/计数器中断(后面须编写中断服务程序)。 4.设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始 工作。 5.等待定时/计数时间到,到则执行中断服务程序;如用查询处理则 编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。
二.方式1 方式1的结构与方式0结构相同,只是把13位变成16位, 16位的加 法计数器被全部用上。
由于是16位的定时/计数方式,因而最大计数值(满值)为2的16 次幂,等于65536。如计数值为N,则置入的初值X为: X=65536-N 如定时/计数器T0的计数值为1000,则初值为655361000=64536,转换成二进制数为1111110000011000B,则 TH0=11111100B,TL0=00011000B。
相关文档
最新文档