第5章 定时器计数器2(1)
第5章习题解答

第5章思考题及习题5参考答案一、填空1.如果采用晶振的频率为3MHz,定时器/计数器T x(x=0,1)工作在方式0、1、2下,其方式0的最大定时时间为,方式1的最大定时时间为,方式2的最大定时时间为。
答:32.768ms,262.144ms,1024µs2.定时器/计数器用作计数器模式时,外部输入的计数脉冲的最高频率为系统时钟频率的。
答:1/243.定时器/计数器用作定时器模式时,其计数脉冲由提供,定时时间与有关。
答:系统时钟信号12分频后,定时器初值4.定时器/计数器T1测量某正单脉冲的宽度,采用方式可得到最大量程?若时钟频率为6MHz,求允许测量的最大脉冲宽度为。
答:方式1定时,131.072ms。
5. 定时器T2 有3种工作方式:、和,可通过对寄存器中的相关位进行软件设置来选择。
答:捕捉,重新装载(增计数或减计数),波特率发生器,T2CON6. AT89S52单片机的晶振为6MHz,若利用定时器T1的方式1定时2ms,则(TH1)= ,(TL1)= 。
答:FCH,18H。
二、单选1.定时器T0工作在方式3时,定时器T1有种工作方式。
A.1种B.2种 C.3种D.4种答:C2. 定时器T0、T1工作于方式1时,其计数器为位。
A.8位B.16位C.14位D.13位答:B3. 定时器T0、T1的GATE x=1时,其计数器是否计数的条件。
A. 仅取决于TR x状态B. 仅取决于GATE位状态C. 是由TR x和INT x两个条件来共同控制D. 仅取决于INT x的状态答:C4. 定时器T2工作在自动重装载方式时,其计数器为位。
A.8位B. 13位C.14位D. 16位答:D5. 要想测量INT0引脚上的正单脉冲的宽度,特殊功能寄存器TMOD的内容应为。
A.87HB. 09HC.80HD. 00H答:B三、判断对错1.下列关于T0、T1的哪些说法是正确的。
A.特殊功能寄存器SCON,与定时器/计数器的控制无关。
单片机 第五章2 单片机的定时器计数器

若晶振频率为6MHz,1个机器周期为1/6 x 10-6 x12=2μs 则最小定时时间为:[213 –(213 -1)]x2μs=2μs 最大定时时间为:[213 –0] x2μs=16384μs =16.384ms
2、 方式1 (T1,T0) 当M1M0两位为 01时,定时 /计数器被选为工作方式 1,16位计数器,其逻辑结构 如图 所示。
8FH TCON TF1 8EH TR1 8DH TF0 8CH TR0 8BH IE1 8AH IT1 89H IE0 88H IT0
TF1(TCON.7, 8FH位)----定时器T1中断请求溢出标志位。 TF0(TCON.5, 8DH位)----定时器T0中断请求溢出标志位。 TR1(TCON.6, 8EH位)----T1运行控制位。 0:关闭T1;1:启动T1运行。只由软件置位或清零。 TR0(TCON.4, 8CH位)----T0运行控制位。 0:关闭T0;1:启动T0运行。只由软件置位或清零。
1、 方式0 (T1,T0)
当 M1M0两位为 00时,定时 /计数器被选为工作方式 0, 13位计数器,其逻辑结 构如图所示。
振荡器 ÷12 C/ T = 0 TL0 低5位 C/ T = 1 控制 T0 端 TR0 GATE INT0 端 TH0 高8 位 TF0 中断
+
在方式0下,计数工作方式时,计数值的范围是: 1~8192(213 ) 定时工作方式时,定时时间的计算公式为: (213一计数初值)×晶振周期×12 或(213一计数初值)×机器周期
例4:用定时器l 以工作方式2计数,每计100次进行累计器加1操作.
(1)计算计数初值. 28—100=156D=9CH TH1=9CH,TL1=9CH TMOD寄存器初始化:MlM0=10,C/T=1,GATE=0 因此 TMOD=60H (2)程序设计序设计
第五章 定时-计数器

t:设定的定时时间—uS 设定的定时时间— P:分频器的分频比--2~256 分频器的分频比--2 取值为2 16、32、64、128、256。 取值为2、4、8、16、32、64、128、256。 X:TMR0的计数初值--0~255 TMR0的计数初值 0 的计数初值-T:指令周期—uS 指令周期—
#include <pic.h> void init(); //I/O口初始化函数 //I/O口初始化函数 void tmint(); //定时器初始化函数 //定时器初始化函数 void main() { init(); tmint(); while(1) { if(T0IF) { T0IF=0; TMR0=100; RC0=!RC0; } } }
(5)当使用内部触发信号,即指令周期作为时钟信号 当使用内部触发信号, 源时,模块TMR0工作于定时方式, TMR0工作于定时方式 源时,模块TMR0工作于定时方式,触发方式为固 定上升沿触发有效。在计数器溢出时, 定上升沿触发有效。在计数器溢出时,相应的溢 出中断标志T0IF自动置位,并可产生溢出中断。 T0IF自动置位 出中断标志T0IF自动置位,并可产生溢出中断。 (6)当外部时钟信号源时,模块TMR0工作于计数方 当外部时钟信号源时,模块TMR0工作于计数方 TMR0 式,触发方式可由程序设置位上升沿触发或下降 沿触发有效。在计数器溢出时, 沿触发有效。在计数器溢出时,也可产生溢出中 断。
2.与定时器/计数器TMR0模块相关的寄存器 与定时器/计数器TMR0模块相关的寄存器 TMR0
(1)选项寄存器 OPTION_REG (1)是作为定时器还是作为计数器 (1)是作为定时器还是作为计数器 (2)决定分频器的分频系数 (2)决定分频器的分频系数 (3)时钟是上升沿 时钟是上升沿/ (3)时钟是上升沿/下降沿触发 (2)中断控制寄存器 INTCON (1)中断总控制--允许 中断总控制--允许/ (1)中断总控制--允许/禁止 (2)各类中断的控制 (2)各类中断的控制 (3)各类中断的标志 (3)各类中断的标志 RA口方向寄存器 (3)RA口方向寄存器 TRISA TMR0工作于计数器时,RA4必须设为输入 工作于计数器时,RA4必须设为输入, 当TMR0工作于计数器时,RA4必须设为输入,以便从该脚输 入时钟脉冲信号。 入时钟脉冲信号。 定时器/ (4)定时器/计数器 TMR0 8位累加计数寄存器
MCS51单片机第5章

中断优先级处理原则
同时发生多个中断申请时 多个中断申请时: 对同时发生多个中断申请时: 不同优先级的中断同时申请(很难遇到) ☞不同优先级的中断同时申请(很难遇到) ——先高后低 先高后低 相同优先级的中断同时申请(很难遇到) ☞相同优先级的中断同时申请(很难遇到) ——按序执行 按序执行 ☞正处理低优先级中断又接到高级别中断 ——高打断低 高打断低 ☞正处理高优先级中断又接到低级别中断 ——高不理低 高不理低
MCS-51单片机的中断系统 MCS-51单片机的中断系统 计算机与外设之间交换信息的方式: 计算机与外设之间交换信息的方式: 无条件传送方式:外设对计算机来说总是准备好的。 (1)无条件传送方式:外设对计算机来说总是准备好的。 (2)查询传送方式:传送前计算机先查询外设的状态, 查询传送方式:传送前计算机先查询外设的状态, 若已经准备好就传送,否则就继续查询/等待。 若已经准备好就传送,否则就继续查询/等待。 中断传送方式: (3)中断传送方式:外设通过申请中断的方式与计算 机进行数据传送。 机进行数据传送。 直接存储器存取方式(DMA) (DMA): (4)直接存储器存取方式(DMA):传送数据的双方直 接通过总线传送数据, 不经CPU中转。 CPU中转 接通过总线传送数据, 不经CPU中转。
中断请求的撤除
为了避免中断请求标志没有及时撤除而造成的重复响应同一中 断请求的错误, CPU在响应中断时必须及时将其中断请求标志 断请求的错误, CPU在响应中断时必须及时将其中断请求标志 位撤除。 位撤除。
申请标志 IE0 TF0 IE1 TF1 RI/TI TF2
中断矢量 0003H 000BH 0013H 001BH 0023H 002BH
中断优先级 最高优先级
最低优先级
第5章AT89S52定时器计数器

图5-2 TMOD格式
8位分为两组,高4位控制T1,低4位控制T0。 TMOD各位的功能。 (1)GATE———门控位。
0:仅由运行控制位TRx(x = 0,1)来控制定时器/计数器运 行。
1:用外中断引脚( INT0*或 INT1*)上的电平与运行控制 位TRx共同来控制定时器/计数器运行。
9
5
5.1 定时器/计数器的结构 定时器/计数器T1、T0结构如图5-1所示,T0由特殊功能
寄存器TH0、TL0构成,T1由特殊功能寄存器TH1、TL1构成。
图5-1 定时器/计数器T0、T1结构框图
6
具有定时器和计数器2种工作模式,4种工作方式(方式0、 方式1、方式2和方式3)。属于增1计数器。
定时器/计数器T0分为两个独立的8位计数器TL0和TH0, TL0使用T0的状态控制位C/T*、GATE、TR0、TF0 ,而TH0
23
被固定为一个8位定时器(不能作为外部计数模式),并使用 定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断 请求源TF1。 2.T0工作在方式3时T1的各种工作方式
P1.0输出;T2OE=0,禁止定时时钟从P1.0输出。 DCEN(D0):计数方式选择。DCEN=1,T2的计数方式
由P1.1引脚状态决定。P1.1=1,T2减计数,P1.1=0,T2加 计数;DCEN=0,计数方式与P1.1无关,同T1和T0一样,采 用增1计数。
31
2. 特殊功能寄存器T2CON T2的功能选择由特殊功能控制寄存器T2CON来设定,
(2)M1、M0——工作方式选择位 M1、M0共有4种编码,对应于4种工作方式的选择,如
表6-1所示。
10
(3)C/T*—计数器模式和定时器模式选择位 0:为定时器工作模式,对单片机的晶体振荡器12分频后的
第5章 MCS-51的定时计数器

电气与信息工程学院
2011/3/26
安徽理工大学
5.2 工作方式
(1) 方式0 方式0
位和TL 的低5位组成13 13位计数器 由THX的8位和TLX的低5位组成13位计数器 13位计数加 到全“1”,再加 就产生溢出, 位计数加1到全 就产生溢出, 位计数加 到全“ ,再加1就产生溢出 位为1,同时计数器全变为“ 置TCON的TFX位为 ,同时计数器全变为“0” 的
电气与信息工程学院
2011/3/26
安徽理工大学
(2) 方式1 方式1
唯一的差别是TH 组成一个16位计数器。 16位计数器 唯一的差别是THX和TLX组成一个16位计数器。
振荡器 ÷12
C /T=0 C /T=1 T0 TR0 GATE INT0 1 > 1 & 控制
TL0 TH0 (8位)(8位)
TF0
中断
定时/计数方式1 定时/计数方式1时的逻辑电路结构图 上例中
第五章-MCS-51单中断系统习题答案.doc

第五章MCS-51单片机中断系统习题答案一、填空题1、中断允许寄存器,中断优先级寄存器。
2、电平触发,边沿触发(或答跳变触发)。
二简答题1、写出8052的中断源和相应的中断入口。
INT0 0003HT0 000BHINT1 0013HT1 001BHTI或RI 0023H2、8051单片机的中断优先级是如何排列的?硬件INT0 T0 INT1 T1 TI或RI软件通过IP定义两个优先级3、外部中断有哪几种触发方式?边沿触发和电平触发。
4、8052单片机程序存储器中的六个特殊单元是什么,各有何用途?0000H(PC),0003H(int0),000BH(c/T0),0013H(int1),001BH(c/T1),0023H(s口)。
4、三、程序设计1、8031芯片的INT0、INT1引脚分别输入压力超限及温度超限中断请求信号,定时器/计数器0作定时检测的实时时钟,用户规定的中断优先权排队次序为:压力超限温度超限定时检测要求确定IE、IP的内容,以实现上述要求。
解:(1)中断控制寄存器各位定义:D7:CPU中断允许位EA,应设为1D6:未定义,可为随意量,取为0D5:定时器/计数器2中断允许位ET2,可取0D4:串行口中断允许位ES, 可取0D3:定时器/计数器1中断允许位ET1, 应取0D2:外部中断1中断允许位EX1, 应取1D1:定时器/计数器0中断允许位ET0, 应取1D0:外部中断0中断允许位EX0, 应取1故IE=87H(2)由硬件确定的同一优先级中断源的优先权排队顺序如下:INT0-C/T0-INT1-C/T1-串行口中断-c/2MCS-51有两个中断优先级,中断优先权选择寄存器IP可对各中断源用软件进行编程,确定为高优先级中断还是低优先级中断。
因些可以用硬件与软件相结合的方法对中断源的优先级进行排序。
由题意,根据IP各位的定义:D7:未定义,可为随意量,取为0D6:未定义,可为随意量,取为0D5:定时器/计数器2优先权选择位PT2,可取0D4:串行口优先权选择位PS, 可取0D3:定时器/计数器1优先权选择位PT1, 应取0 D2:外部中断1优先权选择位PX1, 应取1,应接温度超限信号。
第5章定时计数器 (2)

5.4 8XX51定时/计数器的应用程序设计
5.4.3 应用编程举例 例1 如图所示,
P1中接有八个发光二极管, 编程使八个管轮流点亮,每 个管亮100ms,设晶振为 6MHz。 分析利用T1完成100ms的定时、 当P1口线输出“1”时,发光二 极管亮,每隔100ms”1”左移一 次,采用定时方式1,先计算计 数初值: MC=2μs 100ms/2μs =50000=C350H C =10000H-C350H=3CB0H
★若将T0设置为模式3,TL0和TH0被分成为两个互相独立的8位计数器
TH0和 TL0 。
★TL0可工作为定时方式或计数方式。占用原T0的各控制位、引脚和 中断源。即C/T、GATE、TR0、TF0和T0 (P3.4)引脚、INT0 (P3.2) 引脚。 TH0只可用作定时功能,占用定时器T1的控制位TR1和T1的中断标 志位TF1,其启动和关闭仅受TRl的控制。
ORG 0000H
AJMP
AJMP
MAIN
;T0中断服务程序入口 ;主程序开始 ;T0定时100ms IP0
ORG 000BH ORG 0030H MAIN:CLR P1.7
MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H
SETB
SETB
ET0
EA
5.4 8XX51定时/计数器的应用程序设计
本章介绍的主要内容
★ ★
★
定时计数器结构和工作原理 定时计数器的控制寄存器
定时计数器的应用编程
5· 1 8XX51定时/计数器结构和工作原理
★51系列单片机片内有两个十六位定时/计数器:定时器0(T0) 和定时器1(T1)。 ★两个定时器都有定时或事件计数的功能,可用于定时控制、 延时、对外部事件计数和检测等场合。 ★定时/计数器实际上是16位加1计数器。 T0由2个8位持殊功能寄存器TH0和TL0构成, T1由2个8位持殊功能寄存器TH1和TL1构成。 ★每个定时器都可由软件设置为定时工作方式或 计数工作方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、模式1模式1(M1M0=01)除了使用了THn和TLn全部16位外,其它与模式0相同。
(1)计数工作方式由于定时器/计数器以加1方式计数,假定计数值为X,则应装入定时器/计数器的初值为:初值=216-计数值【216=初值+计数值】所以方式1的计数值范围是:1~65536(216=65536),最大值为:65536(2)定时工作方式定时时间t的计算公式为:【t的时间单位为微秒(µs)】计数值=216-初值定时时间t=计数值×机器周期=(216-初值)×(1/晶体振荡频率)×12在模式1下的情况下,如果fosc=12MHz,最大定时时间为:t=(65536-初值)×(1/12)×12=65536-0=65.536ms在模式1下的情况下,如果fosc=6MHz,最大定时时间为:t=(65536-初值)×(1/6)×12=(65536-0)×2=131.072 ms。
【例如】:若晶体振荡为12MHz,要定时2.5ms,计算初值。
要定时2.5ms,也可以用模式1。
2500=(216-初值)×(1/12)×12初值=65536-2500=63036=32768+16384+8192+4096+1024+512+32+16+8+4=1111 0110 0011 1100――> THn =0xF6 和TLn=0x3C在fosc=12MHz时,如果定时时间大于65.536ms,这时用一个定时/计数器直接处理不能实现,这时可用:1、2个定时/计数器共同处理;2、1个定时/计数器配合软件计数方式处理。
3、模式2方式0和方式1的最大特点是计数溢出后,计数器为全0。
因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题。
这不仅影响定时精度,也给程序设计带来麻烦。
方式2就是针对此问题而设置的。
该方式可省去用户软件中重装初值的指令执行时间,简化定时初值的计算方法,可以相当精确地确定定时时间。
此模式下定时器寄存器作为可自动重装载的8位计数器(TLn),如下图所示。
以T0为例,模式2把寄存器TH0作为一个存放初值的常数寄存器,TL0则成为一个可以自动重装载的8位计数器。
TL0计数溢出时,不仅置位溢出标志TF0向CPU提出中断申请,同时还自动把TH0中的初值重新装载到TL0中。
TH0中的内容靠软件预置,重新装载后其内容不变。
模式2的操作对于定时器0及定时器1是相同的。
假定计数值为X,则应装入定时器/计数器的初值为:初值=28-计数值【28=初值+计数值】所以方式2的计数值范围是:1~256(28=256),最大值为:256定时时间t的计算公式为:【t的时间单位为微秒(µs)】计数值=28-初值定时时间t=计数值×机器周期=(28-初值)×(1/晶体振荡频率)×12在模式2下的情况下,如果fosc=12MHz,最大定时时间为:t=(256-初值)×(1/12)×12=256µs在模式2下的情况下,如果fosc=6MHz,最大定时时间为:t=(256-初值)×(1/6)×12=(256-0)×2=512µs。
4、模式3方式3只适用于定时/计数器T0,T1不能工作在方式3。
方式3将T0分成为两个独立的8位计数器TL0和TH0。
模式3对定时器/计数器0和定时器/计数器1是不同的。
将T/C0设置为模式3时,将使TH0和TL0成为2个互相独立的8位定时器/计数器。
如上图所示。
由于TL0利用了定时器/计数器0的全部控制位:/C T 、TR0、GATE 、0INT 和TF0,它的操作情况与模式0、1类同,不同的仅为8位。
TH0则被固定作为一个8位定时器(计数机器周期),不能作为计数器方式,它使用定时器/计数器1的运行控制位TR1作为运行控制唯一条件,同时占用它的中断标志位TF1。
一般来说,当系统需要增加一个额外的8位定时器时,才设置定时器/计数器0工作于模式3。
当定时器/计数器0工作于模式3时,由于TH0占用了定时器1的TR1的控制位和中断标志,虽然定时器/计数器1仍可定义为模式0、1和2,但只能用在不需要中断的场合。
例如,工作于自动装载模式(模式2),作串行口的波特率发生器使用等等。
5.1.4 定时器/计数器T0和T1应用举例定时器/计数器的编程注意点:一是能正确写入控制字(初始化),二是计算定时和计数常数。
一般情况下,初始化程序应完成如下工作:1.根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD ,以确定T0和T1的工作方式;2.根据要求计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器TH0、TL0或TH1、TL1;3.如果采用中断方式,则须编写中断服务程序,并且需要:①对IE 寄存器的ETx 置位,允许定时/计数器中断;②置位EA ,使CPU 开放总中断。
4.设置定时/计数器控制寄存器TCON 的值,启动定时/计数器开始工作。
5.等待定时/计数时间到,如果采用中断,则执行中断服务程序;如采用查询方式处理,则编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。
【例1】在AT89C51的P1口上接8个LED 。
下面采用定时器T0的方式1的定时中断方式,使P1口外接的8只LED每0.5s闪亮一次。
(1)设置TMOD寄存器定时器T0工作在方式1,应使TMOD寄存器的M1、M0=01;定时器模式,C T=0;如果对T0的运行控制仅由TR0来控制,那么应使GATE0=0。
应设置/定时器T1不使用,各相关位均设为0。
所以,TMOD寄存器应初始化为0x01。
(2)计算定时器T0的计数初值定时采用定时器和软件的方法,0.5s=500ms=5ms×100。
设定时时间5ms(即5000µs),设定时器T0的初值为X,假设晶振的频率为11.0592MHz,则定时时间为:定时时间=(216−X)⨯12/晶振频率则5000=(216−X)⨯12/11.0592得:X=60928,转换成十六进制后为:0xee00,其中0xee装入TH0,0x00装入TL0。
【最大定时71.11µs,最小定时1.085069444µs】【注:60928=32768+16384+8192+2048+1024+512=1110111000000000】(3)设置IE寄存器由于采用定时器T0中断,因此需将IE寄存器中的EA、ET0位置1。
(4)启动和停止定时器T0在GATE0=0的条件下,将定时器控制寄存器TCON中的TR0=1,则启动定时器T0;TR0=0,则停止定时器T0定时。
定时器T0方式1中断定时的参考程序:#include<reg51.h>unsigned char i=100; //给变量i赋初值void main(){TMOD=0x01; //设置定时器T0为方式1TH0=0xee; //向TH0写入定时初值的高8位TL0=0x00;//向TL0写入定时初值的低8位P1=0x00;//P1口8只LED点亮,共阴极接法EA=1;//总中断允许ET0=1;//定时器T0中断允许TR0=1;//启动定时器T0,GATE=0,由TR0决定启动while(1) ; //循环等待{ ;}}void T0_int(void) interrupt 1 //定时器T0中断服务程序{TH0=0xee; //给T0重新装入16位初值,计数4608后,T0溢出TL0=0x00; //计数4608后,即定时5ms到,100次,即500msi--; //循环次数减【4608=65536-60928】if(i< =0) //如果到了100次的5ms,即500ms{ P1=~ P1; //P1口按位取反i =100; //重新设置循环次数}}【例2】设单片机系统时钟频率为12MHz,试编程使P1.2引脚输出周期为5ms的方波。
当系统时钟为12MHz时,若定时/计数器工作于模式0,则最大定时时间为213=8192µs(8.192ms),满足周期为5ms的要求,可选用定时器T0,工作于模式0,定时时间为2.5ms。
首先计算定时器的初值,根据下式:定时时间t=计数值×机器周期=(213-初值)×(1/晶体振荡频率)×122500=(213-初值)×(1/12)×12可计算出定时器的初值为5692,换算成二进制数为TCB=1011000111100B,由于模式0用到了TH0的8位和TL0的低5位,于是可计算出TH0=10110001B=B1H,TL0=00011100B=1CH。
程序如下:#include<reg51.h>sbit p1_2=P1^2; //应该可以直接用位INT0变量,因为reg51.h中有void main(){TMOD=0x00; //GATE=0,定时器的启动由TR0决定TH0=0xb1; //赋定时时间常数TL0=0x1c;TR0=1; //启动定时器while(1) // TH0溢出时,置位TCON中的TF0标志{while(TF0==1)//while(TF0==0); 等待定时器溢出,查询方式{ TF0=0;//如果采用中断,则不需清零,可以自动清零TH0=0xb1; //重新赋定时时间常数TL0=0x1c;p1_2=!p1_2;}}}TF0没有定义,但可以使用,因为在“reg51.h”中已定义。
INT)引【例3】利用定时器T0测量正脉冲的宽度(时间),脉冲从P3.2(0脚输入,设脉冲宽度不超过定时器的定时范围,且系统时钟为12MHz,要求把该脉冲宽度值存入变量pul_width中。
在模式0的介绍中提到过,利用门控位GATE可以测量外部脉冲的宽度。
图6-16 利用GATE位测量正脉冲的宽度INT为1时(外部具体方法是:设GATE=1,然后软件置位TR0,这时当0INT变为0时(外部脉冲的下降沿)脉冲的上升沿)就会自动启动定时器,当0关闭定时器,于是定时器中的计数值就体现了外部脉冲的宽度。
程序如下:#include<reg51.h>sbit p3_2=P3^2; /*定义定时器0的外部引脚*/unsigned int pul_width; /*定义全局变量以保存脉宽结果*/void main() /*主程序*/{unsigned char a; /*定义中间变量*/TMOD=0x09; //T0工作为16位计数器方式1,GATE置1*/C T=0定时,M1M0=01,方式1//ox09=0000 1001 GATE=1,/TL0=0x00; //计数器装入初值,相当于最大定时时间TH0=0x00;while(1){ // 单片机复位后,P3口都是高电平INT变低,启动定时器while(p3_2= =1); //等待0INT的上升沿就启动TR0=1; //定时器准备好,等待0INT的上升沿,开始计时while(p3_2= =0); //等待0INT上变为低电平时,为完整的正脉冲while(p3_2= =1); //在0TR0=0; //测量结束,停止计时间,再来脉冲也不会测量了Pul_width= TH0*256+TL0; //计算脉宽的时间宽度// Pul_width= (TH0*256+TL0) *(12/晶体振荡频率)}}【应该为:Pul_width=(TH0*256+TL0)*(12/晶体振荡频率); a变量可以不要】【和晶体振荡频率有关】如果定时时间大于65536µs,这时用一个定时/计数器直接处理不能实现,这时可用:【武汉纺织大学】(1)2个定时/计数器共同处理;(2)1个定时/计数器配合软件计数方式处理。