AVR单片机判断脉冲宽度地方法
- 格式:doc
- 大小:21.00 KB
- 文档页数:3
电子科技大学综合课程设计报告基于单片机门控位的脉冲宽度测量与显示think2011/5/4一、 可行性分析及其原理:该项目是要实现脉冲宽度的测量,再把测量值用数码管显示。
为了实现这一功能我们大致把整个系统分为以下几个模块:1. 振荡器模块:产生某一特定振荡频率的时钟,一般要求这一频率较高,本题要求精度为10us ,所以采用100kHZ 的振荡频率即可。
2. 计数器模块:对振荡脉冲进行计数,用待测脉冲信号作为使能输入(或开关),这样就可以记录下脉冲有效的时间,计数值乘以10us 即为待测脉冲宽度。
3. 译码显示模块:题目中要求用数码管显示6位测量值,分别完成译码和数码管的静态显示或是动态扫描输出即可。
框图如下:二、 本次设计构思了两个方案:方案一:运用CD4518(BCD 码全加器)的级联来实现计数,CD4511七段译码,555多谐振荡器提供100kHZ 频率,待测信号输入到计数器使能。
电路连接图如下:上述方案为数码管静态显示。
优点为方案简单无需编程,只需要组合逻辑与时序逻辑即可完成。
缺点为硬件电路的连线过于复杂上容易出错且很难排除故障,另一个问题在于使用的外接振荡源精度不是很高,势必带来不小的误差。
此方案理论上可行,由于实际操作带来的不方便,我们考虑了后面一种方案。
方案二:利用单片机门控位实现脉冲宽度测量。
基本思路为:利用单片机内部定时器的GATE信号,对于定时器T0来讲,如果GATE=1,则用软件把TR0置1,且INT0为高电平时可以启动定时器T0,所以我们就把被测脉冲信号从INT0端输入,使其上升沿触发启动T0计数,下降沿停止T0计数。
定时器数值乘以机器周期即为脉冲宽度。
电路连接图如下:可以看出,电路结构由以下部分构成:1.振荡模块:12MHZ晶体振荡器,由XTAL1和XTAL2接入单片机。
2.单片机控制模块:AT89S51单片机实现控制,主要任务是对其进行必要的编程设计。
3.输出显示模块:由数码管动态扫描显示,注意P0需要外接上拉电阻。
单片机定时器判断脉宽单片机定时器是一种常见的硬件模块,用于计时和生成精确的时间延时。
在许多应用中,我们需要对输入信号的脉冲宽度进行测量和判断,单片机定时器可以很好地实现这一功能。
脉宽是指脉冲信号的高电平或低电平持续的时间长度。
在电子电路中,我们经常需要测量脉冲信号的脉宽,以判断信号的稳定性和正确性。
单片机定时器可以通过计时来测量脉宽,从而实现对信号的判断和处理。
单片机定时器通常具有多个计数器和计时模式,可以根据需要选择合适的模式进行脉宽测量。
其中,常用的模式有输入捕获模式和输出比较模式。
在输入捕获模式下,单片机定时器可以通过捕获输入信号的边沿来记录计数器的值,从而得到脉宽信息。
当输入信号的边沿触发定时器时,定时器会立即记录当前的计数器值,并将其保存在寄存器中。
我们可以通过读取寄存器的数值来得到脉宽的计数值,进而转换为实际的时间长度。
在输出比较模式下,单片机定时器可以设置一个比较值,当计数器的值达到或超过比较值时,定时器会触发一个输出信号。
我们可以通过测量输出信号的脉宽来得到输入信号的脉宽。
这种方法需要事先设置比较值,并确保定时器的计数范围足够大,以适应要测量的脉宽范围。
在使用单片机定时器进行脉宽测量时,需要注意一些细节和技巧。
首先,需要选择合适的计时模式和参数,以适应要测量的脉宽范围和精度要求。
其次,需要正确配置定时器的工作模式和输入输出引脚的功能,确保信号能够正确地输入和输出。
此外,还需要注意定时器的计数范围和溢出处理,以避免计数值溢出导致测量结果的错误。
除了测量脉宽,单片机定时器还可以用于生成精确的时间延时。
通过设置定时器的计数值和工作模式,可以实现不同的延时功能。
这在许多应用中非常有用,如控制设备的启动时间、实现精确的定时任务等。
单片机定时器是一种非常有用的硬件模块,可以实现对脉宽的测量和判断,以及生成精确的时间延时。
通过合理地配置和使用定时器,我们可以实现各种复杂的定时控制和计时功能,为电子系统的设计和开发提供了便利和灵活性。
基于单片机的正脉冲宽度检测 一.设计要求:使用80C51单片机,利用定时器T0门控GATE 的功能,测量引脚 上 出现的正脉冲宽度,并用LED 数码管显示出来。
设计要完成的任务有硬件设计和软件设计。
硬件方面, 80C51单片机的P3.2口测试外部脉冲。
P1口可以接LED 数码管。
软件方面,利用单片机的定时完成正脉冲宽度的读取,然后用到P1口使LED 数码管显示。
二. 系统硬件设计1》根据所学知识和查资料,可以知道脉冲的发生电路可以有很多,可以用555定时器来做一个脉冲发生器。
其电路图如下:可以知道如图所示的脉冲发生器其占空比 q=R1/(R1+R2);1INT其占空比可以通过调节变位器改变。
80C51单片机及其引脚图80C51 RST VCCP1.7P1.6P1.5P1.4 P3.3 +5Vc 573.B .A .……+5VC 573 .B .A .……+5V573管脚图HC573引脚功能表:三.系统主程序设计通过外部脉冲输入到P3.2口。
当 引脚上出现高电平时,定时器T1即开始对12分频时钟周期计数,直到 引脚变低电平为止,然后读出T1计数器的值并显示。
脉冲源1INT 1INT系统源程序设计:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit WL=P2^0;sbit DL=P2^1;sbit cl=P3^2;long xx=0;uint cc,wan,qian,bai,shi,ge,bb;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(uint z);void display(uchar wan,uchar qian,uchar bai,uchar shi,uchar ge);void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){TMOD=0x09;TH0=0;TL0=0;TR0=0;EA=1;while(cl);while(cl==0);TR0=1;while(cl);TR0=0;xx=cc*65536+TH0*256+TL0;wan=xx/10000;qian=xx%10000/1000;bai=xx%10000%1000/100;shi=xx%10000%1000%100/10;ge=xx%10;display(wan,qian,bai,shi,ge);}void timer0() interrupt 0{cc++;}void display(uchar wan,uchar qian,uchar bai,uchar shi,uchar ge)//显示程序{WL=1;P1=0xfe;WL=0;DL=1;P1=table[wan];delay(1);WL=1;P1=0xfd;WL=0;DL=1;P1=table[qian];delay(1);WL=1;P1=0xfb;WL=0;DL=1;P1=table[bai];delay(1);WL=1;P1=0xf7;WL=0;DL=1;P1=table[shi];delay(1);WL=1;P1=0xef;WL=0;DL=1;P1=table[ge];delay(1);}四.系统调试与测试结果分析把脉冲产生电路产生的脉冲送入单片机,检测其正脉冲宽度,并与其用示波器测量值比较。
摘要二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
但是,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用P4吗?应用的关键是看是否够用,是否有很好的性能价格比。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
自从1976年问世以来,单片机获得了巨大的发展。
现在比较流行的单片机是美国Intel的MCS51/96以及Motorola的MC系列,Zilog的Z8系列,同时还有更多新型的、功能更强的单片机不断出现。
Abstract:Twentieth century across the three “power” of the era, that the age of electricity, the electronic age and has now entered the computer age. However, the actual work where the computer is not any need to require a high performance computer, a control fridge temperature P4 computer do you use? The key is to see whether the application of adequate, whether there is a very good cost performance. Single chip, also known as single-chip microcontroller, it is not the completion of a logic function of the chip, but a computer system integrated into a chip. Speaking in general terms: a single chip into a computer. Its small size, light weight, cheap, for learning, application and development of facilities provided. Since its inception in 1976, SCM was a great development. SCM is now more popular in the United States, and Motorola, Intel’s MCS51/96 MC series, Zilog’s Z8 series, as wel l as more new, more powerful microcontrollers continue to emerge.关键字:单片机,脉冲宽度,系统设计。
单片机中的计数器与脉冲宽度测量计数器和脉冲宽度测量是单片机中常用的功能模块之一。
计数器可以用于对信号的计数和计时,而脉冲宽度测量可以用于测量信号的高电平或低电平脉冲宽度。
本文将介绍计数器的原理和应用,以及脉冲宽度测量的方法和技巧。
一、计数器的原理与应用计数器是一种用于计数和计时的电子器件,广泛应用于单片机系统中。
单片机中常用的计数器有定时器/计数器模块,可以通过编程来控制计数器的功能和工作方式。
计数器的原理是基于时钟信号进行计数。
时钟信号可以是外部信号源,也可以是内部时钟源。
计数器在每次接收到时钟信号时,根据设定的计数方式进行计数。
计数可以是递增也可以是递减,根据具体应用的需求进行选择。
计数器的应用非常广泛,常见的应用场景包括:1. 频率测量:通过计数器来测量信号的频率。
2. 周期测量:通过计数器来测量信号的周期。
3. 脉冲宽度测量:通过计数器来测量信号的高电平或低电平脉冲宽度。
4. 脉冲个数测量:通过计数器来测量信号的脉冲个数。
5. 定时器:通过计数器来实现精确的定时功能。
二、脉冲宽度测量的方法和技巧脉冲宽度测量是单片机中常用的应用之一,可以用于测量信号的高电平或低电平脉冲宽度。
下面介绍两种常用的脉冲宽度测量方法和技巧。
1. 利用捕获/比较模式:现代的单片机通常会配备捕获/比较模块,可以用于测量信号的脉冲宽度。
通过设置定时器的计数方式和捕获/比较模式,可以实现对信号脉冲宽度的测量。
2. 利用外部中断:单片机通常具有外部中断功能,可以用于检测外部信号的边沿触发。
通过设置外部中断的触发方式和中断服务程序,可以实现对信号脉冲宽度的测量。
中断服务程序可以在触发边沿时开始计时,直到下一个触发边沿时停止计时,得到信号的脉冲宽度。
脉冲宽度测量的技巧包括:1. 选择适当的计数精度:计数器的精度越高,脉冲宽度测量的准确性越高。
根据具体应用需求,选择适当的计数精度。
2. 注意信号的稳定性:脉冲宽度测量需要信号稳定,避免信号发生抖动或干扰。
单片机课程设计报告设计课题:脉冲宽度测量学院:物理与电气工程学院年级专业:10级自动化3班小组成员姓名:金祁平、胡坤云、刘兵剑、王文建小组成员学号:080310173、080310176、080310139、080310132指导老师:丁文祥设计时间:2012年12月摘要二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
但是,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用P4吗?应用的关键是看是否够用,是否有很好的性能价格比。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
自从1976年问世以来,单片机获得了巨大的发展。
现在比较流行的单片机是美国Intel的MCS51/96以及Motorola的MC系列,Zilog的Z8系列,同时还有更多新型的、功能更强的单片机不断出现。
Abstract:Twentieth century across the three “power” of the era, that the age of electricity, the electronic age and has now entered the computer age. However, the actual work where the computer is not any need to require a high performance computer, a control fridge temperature P4 computer do you use? The key is to see whether the application of adequate, whether there is a very good cost performance. Single chip, also known as single-chip microcontroller, it is not the completion of a logic function of the chip, but a computer system integrated into a chip. Speaking in general terms: a single chip into a computer. Its small size, light weight, cheap, for learning, application and development of facilities provided. Since its inception in 1976, SCM was a great development. SCM is now more popular in the United States, and Motorola, Intel’s MCS51/96 MC series, Zilog’s Z8 series, as well as more new, more powerful microcontrollers continue to emerge.关键字:单片机,脉冲宽度,系统设计。
单片机小系统之脉冲宽度测量一、功能说明该系统可以测试出按键按下的时间长短即脉冲宽度。
二、参数精度:0.01s量程:20s显示位数:四位数字显示测试实例用时:25.88ms三、方案论证和比较使用方案:使用单片机--延时程序--完成,用汇编语言编写软件程序并连接硬件电路。
将mini 80E升级版单片机板块与计算机连接通讯,从而大到测量脉冲宽度的目的。
其他方案:<一>、利用8051单片机定时器T0测量某正脉冲的宽度原理:分别用脉冲的上升沿和下降沿出发单片机,上升沿给出中断1开始计数,下降沿给出中断2停止计数,最后换算出高电平宽度=计数周期数×一个计数的时间。
<二>、利用泰伯效应的测量方法将待测激光光源发射的激光脉冲通过光栅后到达置放在距光栅为n倍泰伯距的探测器。
探测器测得通过光栅透明部分和不透明部分两者衍射光强的比值S(T),再由S(T)与T之间的关系曲线求得脉冲时间宽度T的值。
现用方案的优点:○1无需使用定时器;○2操作简单现用方案的缺点:有误差,程序繁琐。
四、硬件电路(如下图所示)五、软件程序及其流程图ORG 0000HLJMP STARTORG 0003HSTART:MOV R0,#40H LOOP1:MOV @R0,#00HINC R0CJNE R0,45H,LOOP1MOV A,#10SETBP3.0SETB P3.1↓ MOV TMOD,#00HMOV TH0,#0F0HMOV TL0,#0CHSETB TR0ACALL NEXTJB P3.0,$LP1: JBC TF0,LP2JB P3.1,LP1MOV R0,#40HLOOP2:MOV @R0,#00HINC R0CJNE R0,45H,LOOP2ACALL NEXT LP2:INC 45HCJNE A,45H,L1MOV 45H,#0INC 44HCJNE A,44H,L1MOV 44H,#0INC 43HCJNE A,43H,L1MOV 43H,#0INC 42HCJNE A,42H,L1MOV 42H,#0INC 41HCJNE A,41H,L1MOV 41H,#0INC 40HL1: MOV TH0,#0F0H MOV TL0,#0CHLCALL NEXTJNB P3.0,LP1L2:LCALL NEXTJMP L2NEXT:PUSH ACCMOV R7,#6MOV R1,#40H MOV R0,#0 LOOP:MOV A,@R1MOV DPTR,#TAB MOVC A,@A+DPTR CJNE R1,#43H,L4 XRL A,#80HL4: MOV P0,AMOV P2,R0 ACALL DELAY INC R0INC R1JB P3.1,NEXT1MOV R0,#40HLOOP3:MOV @R0,#00HINC R0CJNE R0,45H,LOOP3ACALL NEXTLJMP L3NEXT1:DJNZ R7,LOOPPOP ACCL3: RETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DELAY:MOV R3,#0FFHLOOP4:MOV R4,#0FFHLOOP5: NOPDJNZ R4, LOOP5DJNZ R3, LOOP4RETEND六、最终结果(图片展示)七、参考文献 单片机原理10级电信(二)班宋李,赵伟,周建,张锦。
第一章概述脉冲信号测量仪是一种常用的设备,它可以测量脉冲信号的脉冲宽度,频率等参数,并用十进制数字显示出来。
利用定时器的门控信号GATE进行控制可以实现脉冲宽度的测量。
在单片机应用系统中,为了便于对LED显示器进行管理,需要建立一个显示缓冲区。
本文介绍了基于单片机AT89C51的脉冲信号参数测量仪的设计。
该设计可以对脉冲信号的宽度,频率等参数进行测量。
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
由于单片机稳定可靠、物美价廉、功耗低,所以单片机的应用日益广泛深入,涉及到各行各业,如工业自动化、智能仪表与集成智能传感器、家用电器等领域。
单片机应用的意义绝不仅限于它的广阔范围以及带来的经济效益,更重要的意义在于,单片机的应用正从根本上改变着传统的控制系统的设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分控制功能,现在使用单片机通过软件就能实现了。
随着单片机应用的推广普及,单片机控制技术将不断发展,日益完善。
因此,本课程设计旨在巩固所学的关于单片机的软件及硬件方面的知识,激发广大学生对单片机的兴趣,提高学生的创造能力,动手能力和将所学知识运用于实践的能力。
中断功能是一种应用比较广泛的功能,它指的是当CPU正在处理某件事情的时候,外部发生了某一件事(如一个电平的变化,一个脉冲沿的发生或定时器计数溢出等)请求CPU迅速去处理,于是,CPU暂时终止当前的工作,转去处理所发生的事件。
中断服务处理完该事件以后,再回到原来被中止的地方继续原来的工作,这样的过程称为中断。
本文中用到了定时器T0溢出中断,以实现软件延时。
脉冲信号测量仪是一种常用的设备,它可以测量脉冲信号的脉冲宽度,脉冲频率等参数。
目录第1节引言 (1)1.1 系统概述 (1)1.2 设计任务 (1)第2节系统硬件设计 (2)2.1系统的硬件构成及功能 (2)2.2AT89C2051单片机及其引脚说明 (2)2.3CD4511芯片说明 (3)2.4LED数码管显示说明 (4)2.5硬件电路 (6)第3节系统软件设计 (7)3.1系统的主程序设计 (7)3.2系统的源程序设计 (7)第4节系统调试与测试结果分析 (9)第5节结束语 (10)参考文献 (11)基于单片机的窄带脉冲宽度检测第1节 引 言一般单片机能够检测较宽的脉冲,但很难检测窄带脉冲,该系统只要是用于检测窄带脉冲,并显示其宽度的功能。
1.1 系统概述本系统使用AT89C2051单片机,利用定时器T1门控GATE 的功能,测量引脚 上 出现的正脉冲宽度,并用LED 数码管显示出来。
1.2 设计任务设计要完成的任务有硬件设计和软件设计。
硬件方面,AT89C2051单片机的P3.3口测试外部脉冲。
P1口可以接LED 数码管。
软件方面,利用单片机的定时完成正脉冲宽度的读取,然后用到P1口使LED 数码管显示。
1INT第2节系统硬件设计硬件电路关系到软件的编程,也要有利用系统的实际应用。
2.1 系统的硬件构成及功能本系统有以下几个部件组成:单片机AT89C2051,CD4511芯片电源,LED数码管等。
单片机即单片微型计算机,是集CPU,ROM,RAM,I/O口,内部总线及中断系统于一体的微控制器,它体积小,重量轻,功能强,广泛应用于智能产品及工业自动控制上,而51单片机是各单片机最为典型和最有代表性的一种。
电源提供单片机正常工作,单片机只需+5V的电压,可以通过220V的市电通过变压、整流稳压来得到,维持系统的正常工作。
LED数码管用于显示所检测外部输入脉冲的宽度,直观2.2 AT89C2051单片机及其引脚说明AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。
AVR单片机判断脉冲宽度的方法(转)
默认分类 2011-02-22 15:33:43 阅读190 评论0 字号:大中小订阅
定时/计数器(Timer/counter)是单片机芯片中最基本的外围接口,它的用途非常广泛,常用于测量时间、速度、频率、脉宽、提供定时脉冲信号等。
相对于一般8位单片机而言,AVR 不仅配备了更多的定时/计数器接口,而且还是增强型的,功能非常强大。
ATmega128一共配置了2个8位和2个16位,共4个定时/计数器,本小节重点对它的一些增强功能的应用做基本的介绍。
5.9.1 预分频器
定时/计数器最基本的功能就是对脉冲信号计数,当计数器计满后(8位为255,16位为65535),再来一个脉冲它就翻转到0,并产生中断信号。
同其他单片机类似,AVR的定时/计数器的计数脉冲可以来自外部的引脚,也可以由从内部系统时钟获得;但AVR的定时/计数器在内部系统时钟和计数单元之间增加了一个预分频器,利用预分频器,定时/计数器可以从内部系统时钟获得不同频率的信号。
表5-1为系统时钟为4MHz使用定时/计数器0的最高计时精度和时宽范围。
表5-1 T/C0计时精度和时宽(系统时钟4MHz)
分频系数计时频率最高计时精度(TCNT0=255)最宽时宽(TCNT0=0)
1 4MHz 0.25us
64us
8 500KHz 2us
512us
32 125KHz 8us
2.048ms
64 62.5KHz 16us 4 .096ms
128 31.25KHz 32us 8.1 92ms
256 15.625KHz 64us 16.384ms
1024 3906.25Hz 256us 65.536ms
从表中看出,在系统时钟为4MHz时,8位的T/C0最高计时精度为0.25us,最长的时宽可达到65.536ms。
而使用16位的定时/计数器时,不需要辅助的软件计数器,就可以非常方便的设计一个时间长达16.777216秒(精度为256us)的定时器,这对于其它的8位单片机是做不到的。
AVR单片机的每一个定时/计数器都配备独立的、多达10位的预分频器,由软件设定分频系数,与8/16位定时/计数器配合,可以提供多种档次的定时时间。
使用时可选取最接近的定时档次,即选8/16位定时/计数器与分频系数的最优组合,减少了定时误差。
所以,AVR 定时/计数器的显著特点之一是:高精度和宽时范围,使得用户应用起来更加灵活和方便。
此外,AVR的USART、SPI、I2C、WDT等都不占用这些定时/计数器。
5.9.2 输入捕捉功能
ATmega128的两个16位定时/计数器(T/C1、T/C3)具有输入捕捉功能,它是AVR定时/计数器的又一个显著的特点。
其基本作用是当一个事件发生时,立即将定时/计数器的值锁定在输入捕捉寄存器中(定时/计数器保持继续运行)。
利用输入捕捉功能,可以对一个事件从发生到结束的时间进行更加精确,如下面的示例中精确测量一个脉冲的宽度。
测量一个脉冲的宽度,就是测量脉冲上升沿到下降之间的时间。
不使用输入捕捉功能,一般情况往往需要使用两个外围部件才能完成和实现。
如使用1个定时/计数器加1个外部中断(或模拟比较器):定时/计数器用于计时;而外部中断方式设置成电平变化触发方式,用于检测脉冲的上升和下降沿。
当外部中断输入电平由低变高,触发中断,读取时间1;等到输入电平由高变低时,再次触发中断,读取时间2;两次时间差既为脉冲宽度。
这种实现方式不仅多占用了一个单片机的内部资源,而且精度也受到中断响应时间的限制。
因为一旦中断发生,MCU响应中断需要时间,在中断中可能要进行适当的中断现场保护,才能读取时间值。
而此时的时间值比中断发生的时间已经滞后了。
而使用ATmega128的1个定时/计数器,再配合其输入捕捉功能来测量脉冲的宽度就非常方便,下面是实现的程序示例。
#include <mega128.h>
#define ICP1 PIND.4 //脉冲输入由ICP1(Pind.4)输入
unsigned char ov_counter;
unsigned int rising_edge,falling_edge;
unsigned long pulse_clocks;
interrupt [TIM1_OVF] void timer1_ovf_isr(void) // T/C1溢出中断
{
ov_counter++; //记录溢出次数
}
interrupt [TIM1_CAPT] void timer1_capt_isr(void) // T/C1捕捉中断
{
if (ICP1)
{ //上升沿中断
rising_edge = ICR1; //记录上升沿开始时间
TCCR1B = TCCR1B & 0xBF; //设置T/C1为下降沿触发捕捉
ov_counter = 0; //清零溢出计数器
}
else
{ //下降沿中断
falling_edge = ICR1; //记录下降沿时间
TCCR1B = TCCR1B | 0x40; //设置T/C1为上升沿触发捕捉
pulse_clocks = (unsigned long)falling_edge - (unsigned long)rising_edge
+ (unsigned long)ov_counter * 0x10000 / 500; //计算脉冲宽度
}
}
void main(void)
{
TCCR1B=0x42; //初始化T/C1,1/8分频,上升沿触发捕捉
TIMSK=0x24; //允许T/C1溢出和捕捉中断
#asm("sei")
while (1)
{………
};
}
这段程序是在CVAVR中实现的。
在T/C1的捕捉中断中,先检查ICP1的实际状态,以确定是出现了上升沿还是下降沿信号。
如果中断是由上升沿触发的(ICP1为高电平),程序便开始一次脉冲宽度的测量:记录下上升沿出现的时间,把T/C1的捕捉触发方式改为下降沿触发,并清空溢出计数器。
如果中断由下降沿触发(ICP1为低电平),表示到达脉冲的未端,程序记录下降沿出现时间,计算出脉冲的宽度,再将T/C1的捕捉触发方式改为上升沿触发,以开始下一次的测量。
脉冲的实际宽度(毫秒格式)是根据T/C1的计数时钟个数来计算的。
本例中T/C1的计数时钟是系统时钟(4MHz)的8分频,即500KHz,相应的计数脉冲宽度为2us。
因此计算出从上升沿和下降沿之间总的计数脉冲个数,除以500个脉冲(为1ms)即得到以毫秒为单位的被测脉冲宽度了。
可以看到,使用定时/计数器以及配合它的捕捉功能测量脉冲宽度,不仅节省系统的硬件资源,编写程序简单,而且精度也高,因为读到的上升沿和下降沿的时间就是其实际发生的时间。