用单片机的外部中断来测频率

合集下载

STC单片机采集计算瞬时频率和总脉冲数

STC单片机采集计算瞬时频率和总脉冲数

STC单片机采集计算瞬时频率和总脉冲数首先,我们需要明确一些概念。

瞬时频率是指在其中一时间段内脉冲信号的频率,可以通过计算单位时间内的脉冲数来得到;总脉冲数是指在一段时间内脉冲信号的总数目。

为了进行这些测量,我们需要将脉冲信号连接到单片机的引脚上,并编写相应的程序进行采集和计算。

首先,我们需要配置STC单片机的引脚作为输入模式,并使能外部中断。

具体的配置方法可以参考STC单片机的数据手册。

接下来,我们需要编写中断服务例程,用于处理外部中断。

中断服务例程可以在每次触发外部中断时被调用,通过对计数器进行加减操作,来计算瞬时频率和总脉冲数。

中断服务例程的大致流程如下:1.中断服务例程被调用时,先保存当前的计数值。

2.计数器加一(或减一),表示接收到了一个脉冲信号。

3.判断是否超过了设定的时间段。

如果超过了,则将计数器的值保存到另一个变量中,并将计数器清零,表示开始下一个时间段的计数。

4.根据计数器的值和时间段的长度,计算瞬时频率。

5.将计数器的值加到总脉冲数中。

6.恢复计数值,以便下一次中断服务例程被调用时能够正确计数。

在主程序中,我们可以使用定时器来定时触发外部中断。

通过设置定时器的参数和中断相关的寄存器,可以实现定时触发中断的功能。

具体的方式可以参考STC单片机的数据手册。

通过以上的步骤,我们可以实现对脉冲信号的瞬时频率和总脉冲数的采集和计算。

可以将这些数据发送到显示屏上,或者保存到存储设备中,以便后续处理和分析。

总结起来,STC单片机可以通过配置引脚、使能外部中断,编写中断服务例程和设置定时器等步骤,实现对脉冲信号的瞬时频率和总脉冲数的采集和计算。

这是完成该任务的基本步骤,具体的实现方式可以根据实际需求和具体的单片机型号进行调整和优化。

51单片机外部脉冲计数程序

51单片机外部脉冲计数程序

51单片机外部脉冲计数程序51单片机外部脉冲计数程序是一种常见的嵌入式应用程序,它可以通过计数外部脉冲信号来实现各种功能,如测量速度、记录行程、控制电机等。

在本文中,我们将介绍如何编写一个简单的51单片机外部脉冲计数程序,供初学者参考。

一、程序框架```c#include <reg52.h>sbit PulsePin = P1^0; //定义脉冲信号输入引脚unsigned long cnt = 0; //计数器void ExternalInterrupt0() interrupt 0 //外部中断0的中断服务程序{cnt++; //计数器加一}```程序中定义了一个脉冲信号输入引脚PulsePin,一个计数器cnt,并在主程序中开启了全局中断和外部中断0,并设置外部中断0为下降沿触发。

在外部中断0的中断服务程序中,计数器cnt会加一。

二、程序解析1. 硬件连接将需要计数的脉冲信号输入引脚连接到单片机的P1.0引脚上,并连接好单片机的电源和地线。

2. 宏定义和全局变量首先定义了PulsePin引脚为输入模式,并定义了计数器cnt为无符号长整型变量。

3. 主程序在主程序中,首先开启了全局中断和外部中断0,然后设置外部中断0为下降沿触发。

最后加入一个无限循环,等待外部中断的触发。

4. 外部中断0的中断服务程序在外部中断0的中断服务程序中,计数器cnt会加一。

三、总结本文介绍了如何编写一个简单的51单片机外部脉冲计数程序。

通过外部中断0的中断服务程序,可以实现对外部脉冲信号的计数。

本程序只是一个简单的例子,读者可以根据自己的需求对其进行改进和优化。

STM32单片机测量方波频率方法总结

STM32单片机测量方波频率方法总结

STM32单片机测量方波频率方法总结一、测周法:通过一个方波的两个上升沿或下降沿触发中断,然后定时器计数,计数的总个数乘以计数单位时间即该方波的周期,具体可通过单片机输入捕获功能实现,以下为参考代码//输入捕获初始化函数void input_frequent_init(void) //采用TIM4的Channel_1通道作为输入捕获通道{//声明结构体变量,用来初始化定时器TIM_TimeBaseInitTypeDef TIM4_TimeBaseInitStructure;TIM_ICInitTypeDef TIM4_ICInitStructure;NVIC_InitTypeDef TIM4_NVIC_InitStructure;/* 开启定时器4时钟 */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);TIM_ClearITPendingBit(TIM4,TIM_IT_Update|TIM_IT_CC1); //清除捕获和中断标志位TIM4_TimeBaseInitStructure.TIM_Period = 0xffff;//设定计数器自动重装值(设置为最大)TIM4_TimeBaseInitStructure.TIM_Prescaler = 1; //设置分频系数TIM4_TimeBaseInitStructure.TIM_ClockDivision = TIM_C KD_DIV1; //设置时钟分割:TDTS = Tck_timTIM4_TimeBaseInitStructure.TIM_CounterMode = TIM_Cou nterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM4,&TIM4_TimeBaseInitStructure);/ /根据结构体参量初始化定时器TIM4_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择输入捕获的输入端,IC1映射到TI1上TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity _Rising; //设置为上升沿捕获TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelecti on_DirectTI; //映射到TI1上TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV 1; //配置输入分频,不分频TIM4_ICInitStructure.TIM_ICFilter = 0x00; //IC1F=000 0 配置输入滤波器,此处不滤波TIM_ICInit(TIM4, &TIM4_ICInitStructure); //初始化TIM 4通道1//中断分组初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);TIM4_NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;//打开TIM4的全局中断TIM4_NVIC_InitStructure.NVIC_IRQChannelPreemptionPri ority=1; //抢占优先级配置为1TIM4_NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //响应优先级配置为1TIM4_NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能NVIC_Init(&TIM4_NVIC_InitStructure); //初始化中断TIM_Cmd(TIM4,ENABLE); //使能中断TIM_ITConfig(TIM4, TIM_IT_Update|TIM_IT_CC1, ENABLE ); //使能捕获和更新中断}需要注意的是,如果所测信号中存在尖峰干扰信号,则TIM4_ICInitStructure.TIM_ICFilter = 0x00; //IC1F=0000 配置输入滤波器,此处不滤波这一行应根据干扰信号的高电平时间来赋予合适的滤波器的值,具体计算方法参考芯片手册或自行百度。

单片机中的中断与定时器的原理与应用

单片机中的中断与定时器的原理与应用

单片机中的中断与定时器的原理与应用在单片机(Microcontroller)中,中断(Interrupt)和定时器(Timer)是重要的功能模块,广泛应用于各种嵌入式系统和电子设备中。

本文将介绍中断和定时器的基本原理,并探讨它们在单片机中的应用。

一、中断的原理与应用中断是指在程序执行过程中,当发生某个特定事件时,暂停当前任务的执行,转而执行与该事件相关的任务。

这样可以提高系统的响应能力和实时性。

单片机中的中断通常有外部中断和定时中断两种类型。

1. 外部中断外部中断是通过外部触发器(如按钮、传感器等)来触发的中断事件。

当外部触发器发生状态变化时,单片机会响应中断请求,并执行相应的中断服务程序。

外部中断通常用于处理实时性要求较高的事件,如按键检测、紧急报警等。

2. 定时中断定时中断是通过定时器来触发的中断事件。

定时器是一种特殊的计时设备,可以按照设定的时间周期产生中断信号。

当定时器倒计时完成时,单片机会响应中断请求,并执行相应的中断服务程序。

定时中断常用于处理需要精确计时和时序控制的任务,如脉冲计数、PWM波形生成等。

中断的应用具体取决于具体的工程需求,例如在电梯控制系统中,可以使用外部中断来响应紧急停车按钮;在家电控制系统中,可以利用定时中断来实现定时开关机功能。

二、定时器的原理与应用定时器是单片机中的一个重要模块,可以用于计时、延时、频率测量等多种应用。

下面将介绍定时器的工作原理和几种常见的应用场景。

1. 定时器的工作原理定时器是通过内部时钟源来进行计时的。

它通常由一个计数器和若干个控制寄存器组成。

计数器可以递增或递减,当计数值达到设定值时,会产生中断信号或触发其他相关操作。

2. 延时应用延时是定时器最常见的应用之一。

通过设定一个合适的计时器参数,实现程序的精确延时。

例如,在蜂鸣器控制中,可以使用定时器来生成特定频率和持续时间的方波信号,从而产生不同的声音效果。

3. 频率测量应用定时器还可以用于频率测量。

用 单片机的外部中断来测频率

用 单片机的外部中断来测频率

作者:佚名来源:本站原创点击数: 302 更新时间:2010年08月08日【字体:大中小】//晶振:12M//实验方法:首先要把51hei单片机开发板上的ne555的方波输出信号J7的第一脚用杜邦线// 引入P3.2口,数码管即可显示ne555震荡电路当前的频率值,旋动PR1电位器可// 发现数字有变化.//原理:1秒钟内计数外部脉冲个数,如计数1000次,则表示频率为1000Hz//1秒钟定时采用51单片机定时器0实现,外部脉冲由外部中断0引脚接入#include<reg51.h>#include"51hei.h"#define uchar unsigned charuchar counter1;sbit duan=P2^6; //74HC573的LE端 U5 LED的段选端sbit wei=P2^7; //74HC573的LE端 U4 LED的位选端unsigned int counter2,tmp;uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 共阳型数码管0—9显示unsigned int dis[6];uchar con[]={0xfe,0xfd,0xfb,0xf7,0xef}; //共阳型数码管控制端init();delay(uchar);display();jishu();void main(){guandz();init();while(1){jishu();}}//定时器0和外部中断0的初始化init(){EA=1;EX0=1;ET0=1;IT0=1;TMOD=0x01;TH0=0x3c;TL0=0xaf;TR0=1;}//延时程序delay(uchar x){uchar a,b;for(a=x;a>0;a--)for(b=20;b>0;b--);}//外部中断0中断程序void external0() interrupt 0{tmp ;}//定时器0中断程序void timer0() interrupt 1{TH0=0x3c;TL0=0xaf;counter1 ;}//显示程序display(){uchar i;dis[0]=counter2/10000; //获取计数值的万位 dis[5]=counter2000;dis[1]=dis[5]/1000; // 获取计数值的千位 dis[5]=dis[5]00;dis[2]=dis[5]/100; // 获取计数值的百位dis[5]=dis[5]0;dis[3]=dis[5]/10; // 获取计数值的十位dis[4]=dis[5]; // 获取计数值的个位for(i=0;i<5;i ) //依次显示万、千、百、十、个位,动态显示{// P0=0xff;P0=con[i];wei=1;wei=0;P0=table[dis[i]];duan=1;duan=0;delay(1);P0=0;duan=1;duan=0;}}jishu(){if(counter1==20) //定时器定时50ms,故20次中断就表示1秒钟到达{counter2=tmp;display();tmp=0;counter1=0;}elsedisplay();}/计数器(Timer/counter)是单片机芯片中最基本的外围接口,它的用途非常广泛,常用于测量时间、速度、频率、脉宽、提供定时脉冲信号等。

用51单片机的外部中断来测频率

用51单片机的外部中断来测频率

用51单片机的外部中断来测频率//晶振:12M//实验方法:首先要把51hei单片机开发板上的ne555的方波输出信号J7的第一脚用杜邦线//引入P3.2口,数码管即可显示ne555震荡电路当前的频率值,旋动PR1电位器可//发现数字有变化.//原理:1秒钟内计数外部脉冲个数,如计数1000次,则表示频率为1000Hz//1秒钟定时采用51单片机定时器0实现,外部脉冲由外部中断0引脚接入#includereg51.h#include51hei.h#define uchar unsigned charuchar counter1;sbit duan=P2 ;//74HC573的LE端U5 LED的段选端sbit wei=P2 ;//74HC573的LE端U4 LED的位选端unsigned int counter2,tmp; uchar table[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 共阳型数码管09显示unsigned int dis[6]; uchar con[]={0xfe,0xfd,0xfb,0xf7,0xef}; //共阳型数码管控制端init();delay(uchar);display(); jishu(); void main(){guandz();init();while(1){ jishu(); } }//定时器0和外部中断0的初始化init(){ EA=1;EX0=1;ET0=1;IT0=1; TMOD=0x01;TH0=0x3c;TL0=0xaf;TR0=1;} //延时程序delay(uchar x){uchar a,b;for(a=x;a0;a--) for(b=20;b0;b--);}//外部中断0中断程序void external0() interrupt 0{ tmp++; } //定时器0中断程序void timer0() interrupt 1{ TH0=0x3c;TL0=0xaf;counter1++; } //显示程序display(){uchar i; dis[0]=counter2/10000; //获取计数值的万位dis[5] =counter2%10000;dis[1]=dis[5]/1000; // 获取计数值的千位dis[5]=dis[5]% 1000;dis[2]=dis[5]/100; // 获取计数值的百位dis[5]=dis[5]%100;dis[3]=dis[5]/10; // 获取计数值的十位dis[4]=dis[5]%10; // 获取计数值的个位for(i=0;i5;i++) //依次显示万、千、百、十、个位,动态显示{ // P0=0xff; P0=con[i]; wei=1; wei=0; P0=table[dis[i]]; duan=1; duan=0; delay(1); P0=0; duan=1; duan=0; } }。

51单片机的边沿触发及电平触发简介及测量

51单片机的边沿触发及电平触发简介及测量

51单片机的边沿触发及电平触发简介及测量51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。

选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。

选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。

这个原理很好理解。

但应用时需要特别注意的几点:1)电平触发方式时,中断标志寄存器不锁存中断请求信号。

也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。

标志寄存器对于请求信号来说是透明的。

这样当中断请求被阻塞而没有得到及时响应时,将被丢失。

换句话说,要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行为止。

因此当CPU正在执行同级中断或更高级中断期间,产生的外部中断源(产生低电平)如果在该中断执行完毕之前撤销(变为高电平)了,那么将得不到响应,就如同没发生一样。

同样,当CPU在执行不可被中断的指令(如RETI)时,产生的电平触发中断如果时间太短,也得不到执行。

2)边沿触发方式时,中断标志寄存器锁存了中断请求。

中断口线上一个从高到低的跳变将记录在标志寄存器中,直到CPU响应并转向该中断服务程序时,由硬件自动清除。

因此当CPU正在执行同级中断(甚至是外部中断本身)或高级中断时,产生的外部中断(负跳变)同样将被记录在中断标志寄存器中。

在该中断退出后,将被响应执行。

如果你不希望这样,必须在中断退出之前,手工清除外部中断标志。

3)中断标志可以手工清除。

一个中断如果在没有得到响应之前就已经被手工清除,则该中断将被CPU忽略。

就如同没有发生一样。

4)选择电平触发还是边沿触发方式应从系统使用外部中断的目的上去考虑,而不是如许多资料上说的根据中断源信号的特性来取舍。

比如,有的书上说(《Keil C51使用技巧及实战》),就有类似的观点。

单片机的频率计原理

单片机的频率计原理

单片机的频率计原理
频率计是一种测量信号频率的仪器,而单片机频率计则是利用单片机来实现频率计的原理。

单片机频率计的原理可以分为三个步骤:输入信号采样、计数和计算频率。

首先,需要对输入信号进行采样。

单片机频率计通常使用外部中断来采样输入信号。

外部中断允许单片机在检测到信号边沿时立即中断当前的任务并执行中断服务程序,以保证采样的准确性和实时性。

通过外部中断引脚,将输入信号连接到单片机的中断输入引脚。

在信号采样的同时,需要进行计数操作。

计数器是单片机内部的一个重要组件,它可以记录输入信号的脉冲数量。

在每次外部中断触发时,计数器会自动加一,从而实现对信号脉冲的计数。

计数器有不同的位数,可以根据需要选择合适的计数范围。

采样和计数之后,就可以通过计算来得到信号的频率。

频率是指在单位时间内发生的信号周期的次数。

以时间为单位,频率的计算公式为f=1/T,其中f为频率,T为周期。

在单片机中,周期可以通过计数器的值来表示。

假设计数器的位数为n,计数器的值为cnt,输入信号的周期为T,则频率f可以通过以下公式计算得到:
f = 1/(cnt * T)
计算出的频率可以通过串口或者LCD等输出设备来显示出来。

同时,可以使用按键来选择不同的计数范围和显示格式,以提高频率计的灵活性和便捷性。

总结起来,单片机频率计的工作原理是通过外部中断来采样输入信号,将采样到的信号脉冲数量记录在计数器中,然后根据计数器的值和输入信号的周期计算出频率,并将结果显示出来。

这种原理使得单片机频率计具有了高精度和高可靠性的特点,在实际应用中得到了广泛的应用。

实验四-MCS-51单片机外部中断实验

实验四-MCS-51单片机外部中断实验

实验四-MCS-51单片机外部中断实验实验目的:1. 学习MCS-51单片机的外部中断原理和使用方法;2. 掌握如何通过硬件中断和软件中断实现MCS-51单片机的响应机制;3. 了解MCS-51单片机外部中断的实际应用。

实验器材:MCS-51单片机开发板、按键开关、调试器。

实验原理:MCS-51单片机通过INT0和INT1两个硬件中断引脚实现外部中断。

当INT0外部中断线检测到低电平信号时,中断向量为0x0003;当INT1外部中断线检测到低电平信号时,中断向量为0x0013。

通过配置中断控制寄存器IE和TCON,可以实现对外部中断的使能、触发方式和优先级等的控制。

MCS-51单片机还可以通过软件方式实现外部中断,即通过软件方式扫描外部信号,并在检测到信号发生变化时触发相应的中断处理程序。

实现软件中断的方法是使用定时器功能,通过定时器中断触发中断服务程序,该程序扫描外部信号,并根据需要触发软件中断。

实验步骤:1. 将开发板上的按键开关连接到开发板的P3.2引脚。

按键开关按下时,P3.2引脚被拉低,可以触发外部中断。

2. 打开Keil μVision5软件,新建工程,选择芯片型号为STC89C52,保存并命名为“Exp4”。

3. 在主函数中声明中断函数,并在中断函数中打印提示信息。

4. 在主函数中初始化中断控制寄存器IE和TCON,开启INT0外部中断,并将中断优先级设置为最高。

5. 在主函数中使用无限循环,来保持程序一直运行,并定时打印提示信息,以验证程序是否正常运行。

6. 烧录程序到开发板上,先在开发板上不按下按键,观察是否正常打印提示信息。

然后按下按键,观察是否触发外部中断,进入中断函数并打印提示信息。

实验代码:#include<STC89C52.h>#include<stdio.h>// 定义外部中断0的中断服务函数void Interrupt0() interrupt 0{printf("External interrupt 0 has occured!\n");}// 打印提示信息printf("Program is running...\n");while(1){// 定时打印提示信息printf("Hello!\n");delay_ms(1000);}}注意事项:1. 写中断程序时,一定要注意将中断函数的声明放在程序开头,否则可能会出现中断无法触发的情况;2. 在使用中断相关功能的时候,务必仔细阅读数据手册中的相关章节,以确保正确使用并且避免出现不必要的错误;3. 在进行外部中断实验的时候,可以使用按键开关、光敏电阻等外部器件来模拟外部信号的变化,以测试程序的正确性。

单片机测量信号频率的方法

单片机测量信号频率的方法

单片机测量信号频率的方法
单片机是一种功能强大的电子控制器,可以用于测量和控制各种物理量。

在测量信号频率方面,单片机可以使用定时器和计数器模块来实现。

测量信号频率的方法主要有两种:时间测量法和计数测量法。

时间测量法是利用定时器模块测量信号周期的时间,再通过计算得出信号频率。

具体实现方法是,将信号输入到单片机的外部中断口,每当信号变化时触发定时器中断,记录时间,并清零计数器。

当定时器达到指定时间后,再记录时间,并计算时间差。

由于信号周期等于两次时间差之和,因此可以得到信号频率。

计数测量法是利用计数器模块统计信号的脉冲数,再通过计算得出信号频率。

具体实现方法是,将信号输入到单片机的计数器输入端,设置计数器为上升沿触发或下降沿触发,当计数器达到指定的计数值后,再记录时间并计算信号频率。

在实际应用中,两种方法可以根据实际需要进行选择。

时间测量法适用于频率较低的信号,计数测量法适用于频率较高的信号。

同时,还需要考虑单片机的时钟精度和计算复杂度等因素,选择合适的测量方法。

总之,单片机测量信号频率的方法可以帮助我们实现精确的信号测量和控制,具有广泛的应用前景。

- 1 -。

单片机中的计数器与脉冲宽度测量

单片机中的计数器与脉冲宽度测量

单片机中的计数器与脉冲宽度测量计数器和脉冲宽度测量是单片机中常用的功能模块之一。

计数器可以用于对信号的计数和计时,而脉冲宽度测量可以用于测量信号的高电平或低电平脉冲宽度。

本文将介绍计数器的原理和应用,以及脉冲宽度测量的方法和技巧。

一、计数器的原理与应用计数器是一种用于计数和计时的电子器件,广泛应用于单片机系统中。

单片机中常用的计数器有定时器/计数器模块,可以通过编程来控制计数器的功能和工作方式。

计数器的原理是基于时钟信号进行计数。

时钟信号可以是外部信号源,也可以是内部时钟源。

计数器在每次接收到时钟信号时,根据设定的计数方式进行计数。

计数可以是递增也可以是递减,根据具体应用的需求进行选择。

计数器的应用非常广泛,常见的应用场景包括:1. 频率测量:通过计数器来测量信号的频率。

2. 周期测量:通过计数器来测量信号的周期。

3. 脉冲宽度测量:通过计数器来测量信号的高电平或低电平脉冲宽度。

4. 脉冲个数测量:通过计数器来测量信号的脉冲个数。

5. 定时器:通过计数器来实现精确的定时功能。

二、脉冲宽度测量的方法和技巧脉冲宽度测量是单片机中常用的应用之一,可以用于测量信号的高电平或低电平脉冲宽度。

下面介绍两种常用的脉冲宽度测量方法和技巧。

1. 利用捕获/比较模式:现代的单片机通常会配备捕获/比较模块,可以用于测量信号的脉冲宽度。

通过设置定时器的计数方式和捕获/比较模式,可以实现对信号脉冲宽度的测量。

2. 利用外部中断:单片机通常具有外部中断功能,可以用于检测外部信号的边沿触发。

通过设置外部中断的触发方式和中断服务程序,可以实现对信号脉冲宽度的测量。

中断服务程序可以在触发边沿时开始计时,直到下一个触发边沿时停止计时,得到信号的脉冲宽度。

脉冲宽度测量的技巧包括:1. 选择适当的计数精度:计数器的精度越高,脉冲宽度测量的准确性越高。

根据具体应用需求,选择适当的计数精度。

2. 注意信号的稳定性:脉冲宽度测量需要信号稳定,避免信号发生抖动或干扰。

51单片机板子功能测试

51单片机板子功能测试

51单片机板子功能测试
1.芯片检测:通过读取板子上的芯片信息,确认是否使用了正确的
51单片机芯片,以及芯片的版本信息。

2.闪存测试:通过在闪存中写入测试代码,然后执行代码,验证闪存
的可读写性以及执行功能正常。

3.存储器测试:包括片内RAM和片外扩展存储器的测试,通过写入和
读取随机数据,并进行校验,验证存储器的可靠性。

4.输入输出测试:测试板子上的各种输入输出接口是否能正常工作,
包括数字输入输出口、模拟输入输出口、通信接口(如串口、I2C、SPI
等)等。

5.定时器测试:通过配置定时器,产生不同频率和占空比的脉冲信号,来测试定时器的准确性和稳定性。

6.PWM测试:通过配置PWM输出,测量占空比和频率,并验证输出的
正常性。

7.中断测试:通过外部中断引脚或定时器中断,测试中断的触发和处
理功能是否正常。

8.ADC/DAC测试:测试模拟输入输出的精度和准确性,通过模拟信号
输入和输出,验证ADC和DAC的功能。

9.LCD测试:测试板子上的LCD接口是否能正常显示字符或图形,并
验证显示的准确性。

10.通信测试:测试板子上的通信接口(如串口、I2C、SPI)是否能
与其他设备进行正常通信,并检查通信的准确性和稳定性。

通过以上这些功能测试,可以全面验证51单片机板子的各项功能是否正常,确保板子的质量和可靠性。

同时可以帮助开发人员在开发过程中排查和解决各种问题,提高开发效率。

单片机 外部中断 程序设计

单片机 外部中断 程序设计

单片机外部中断程序设计一、引言在单片机应用系统中,外部中断是一个非常重要的功能。

当外部事件发生时,中断系统可以打断正在执行的程序,转而执行相应的中断服务程序(ISR)。

本指南将详细介绍如何进行单片机外部中断的程序设计,主要包括以下五个方面:配置中断控制器、定义中断服务程序、设置中断触发方式、开启外部中断以及测试与调试。

二、配置中断控制器中断控制器是单片机的核心部件之一,它负责管理中断的优先级、触发方式以及处理方式。

在进行外部中断程序设计之前,需要先配置中断控制器。

根据所使用的单片机型号和中断控制器的不同,配置方法会有所差异。

一般情况下,需要设置以下几个参数:1.中断触发方式:电平触发或边沿触发。

2.中断优先级:多个中断源的情况下,需要确定每个中断源的优先级。

3.中断处理方式:通常有向量中断和非向量中断两种处理方式,需要根据具体硬件平台进行选择。

三、定义中断服务程序中断服务程序(ISR)是当外部中断触发时,单片机执行的一段程序代码。

在定义ISR时,需要注意以下几点:1.ISR的入口和出口参数:一般情况下,单片机厂商会提供相应的库函数,用于定义ISR的入口和出口参数。

2.ISR的执行时间:为了保证系统的实时性,ISR的执行时间应尽可能短,避免长时间的操作导致系统响应延迟。

3.ISR的返回值:根据需要,ISR可以返回一定的状态信息或处理结果。

四、设置中断触发方式根据具体应用需求,需要设置外部中断的触发方式。

常见的触发方式包括电平触发和边沿触发。

电平触发是指当外部信号电平发生变化时,触发中断请求;边沿触发则是在信号电平由低变高或由高变低时触发中断请求。

选择合适的触发方式可以提高系统的响应速度和准确性。

五、开启外部中断完成以上步骤后,最后一步是开启外部中断。

具体方法取决于所使用的单片机型号和编译器。

一般来说,需要使用相应的指令或函数来开启外部中断。

在开启外部中断时,需要注意以下几点:1.中断使能:需要开启单片机的中断使能开关。

单片机外部中断实验

单片机外部中断实验

单片机外部中断实验 Document number【980KGB-6898YT-769T8CB-246UT-18GG08】实验6 外部中断实验(仿真部分)一、实验目的1. 学习外部中断技术的基本使用方法。

2. 学习中断处理程序的编程方法。

二、实验内容在INT0和INT1上分别接了两个可回复式按钮,其中INT0上的按钮每按下一次则计数加一,其中INT1上的按钮每按下一次则计数减一。

P1.0~ P1.3接LED 灯,以显示计数信号。

三、实验说明编写中断处理程序需要注意的问题是:1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。

2.必须在中断处理程序中设定是否允许中断重入,即设置EX0位。

3.INT0和INT1分别接单次脉冲发生器。

P1.0~ P1.3接LED灯,以查看计数信号.四、硬件设计利用以下元件:AT89C51、BOTTON、CAP、CAP-POL、CRYSTAL、RES、NOT、LED-Yellow。

设计出如下的硬件电路。

晶振频率为12MHz。

五、参考程序框图1.实验目的学会asm和C512.实验原理【硬件接法】控制LED,低电平点亮INT1接按键,按下时产生低电平【运行效果】程序工作于中断方式,按下按键K2后,LED点亮,秒后自动熄灭。

8051单片机有/INT0和/INT1两条外部中断请求输入线,用于输入两个外部中断源的中断请求信号,并允许外部中断源以低电平或下降沿触发方式来输入中断请求信号。

/INT0和/INT1中断的入口地址分别是0003H和0013H。

TCON寄存器(SFR地址:88H)中的IT0和IT1位分别决定/INT0和/INT1的触发方式,置位时为下降沿触发,清零时为低电平触发。

实际应用时,如果外部的中断请求信号在产生后能够在较短时间内自动撤销,则可以选择低电平触发。

在中断服务程序里要等待其变高后才能返回主程序,否则会再次触发中断,产生不必要的麻烦。

如果外部的中断请求信号产生后可能长时间后才能撤销,则为了避免在中断服务程序里长时间无谓等待,可以选择下降沿触发。

单片机外部中断讲解

单片机外部中断讲解

单片机外部中断讲解在单片机的世界里,外部中断就像是一位“紧急事务专员”,能够在关键时刻打断单片机正在进行的工作,让其优先处理更为重要和紧急的任务。

这一特性使得单片机在应对复杂多变的外部环境时变得更加灵活和高效。

首先,咱们来理解一下什么是外部中断。

简单来说,外部中断就是单片机从外部接收的一种信号,这个信号告诉单片机:“嘿,有重要的事情发生啦,你得马上停下来处理!”这个信号可以来自各种各样的外部设备,比如按键、传感器等等。

那么,单片机是如何感知到这些外部中断信号的呢?这就涉及到单片机的引脚配置。

通常,单片机都会有专门的引脚用于接收外部中断信号。

当外部设备产生中断信号并通过这些引脚输入到单片机时,单片机会立即响应。

外部中断有它自己的触发方式,常见的有边沿触发和电平触发。

边沿触发就像是一个瞬间的“脉冲”,可以是上升沿触发(也就是从低电平变为高电平的那一瞬间),也可以是下降沿触发(从高电平变为低电平的瞬间)。

而电平触发呢,则是根据引脚的高电平或者低电平状态来触发中断。

比如说,设置为高电平触发,那么只要引脚保持高电平,就会一直触发中断。

为了更好地管理外部中断,单片机一般都会有相应的中断控制寄存器。

通过对这些寄存器的配置,我们可以决定是否允许某个外部中断、选择触发方式、设置中断的优先级等等。

接下来,咱们说说外部中断的优先级。

想象一下,如果同时有多个外部中断信号来了,单片机该先处理谁呢?这就需要靠优先级来决定。

优先级高的中断会先得到处理,处理完后再去处理优先级低的中断。

在实际编程中,使用外部中断需要经过一系列的步骤。

首先,要对单片机进行初始化,包括设置中断相关的寄存器。

然后,编写中断服务函数。

这个函数就是单片机在响应中断后要执行的具体任务。

比如说,我们有一个基于单片机的温度监测系统,使用了一个温度传感器。

当温度超过设定的阈值时,传感器会给单片机发送一个外部中断信号。

在中断服务函数里,单片机可能会执行报警操作,比如点亮一个指示灯或者发出声音警报。

单片机外部中断方式精确测频率,误差1HZ

单片机外部中断方式精确测频率,误差1HZ
void delay(void)
{
unsigned char a,b;
for(b=200;b>0;b--)
for(a=10;a>0;a--);
}
void display()
{uchar k=0xfe;
P2=0xff;
P0=display_code[10];//显示H标志
P2=k;
delay();
k=(k<<1)+1;
P2=k;
delay();
k=(k<<1)+1;
P2=0xff;
P0=display_code[f%10000/1000];
if((f%10000/1000==0)&&(f/10000==0))
P2=0XFF;
else
P2=k;
delay();
k=(k<<1)+1;
P2=0xff;
P2=0xff;
P0=display_code[f/10000];
{ f4++;
}
P2=0xff;
}
main()
{//T2MOD=0X00;
T2CON=0X00; //16位自动重装,定时中断,TR2先置0
RCAP2H=0X4c;
RCAP2L=0X00;//定时50ms,晶振11.0592
EX1=1;
IT1=1;//外部中断下降沿触发
ET2=1;
TR2=1;
EA=1;
while(1)
k=(k<<1)+1;
P2=0xff;
P0=display_code[(f%100)/10];
P2=k;

stm32正弦波频率计算

stm32正弦波频率计算

stm32正弦波频率计算摘要:I.简介- 引入STM32 正弦波频率计算的主题II.STM32 简介- 介绍STM32 单片机- 讲解STM32 定时器功能III.正弦波频率计算方法- 测周期法- 等精度测频法- 方波频率测量法IV.STM32 测量正弦波频率- 使用STM32 定时器捕获输入模式- 使用外部中断输入- 使用DAC 生成正弦波数据V.总结- 总结STM32 正弦波频率计算的方法和应用正文:I.简介STM32 单片机是一种广泛应用的嵌入式系统,具有高性能、低功耗、多功能等特点。

在实际应用中,经常需要对正弦波的频率进行测量。

本篇文章将介绍STM32 正弦波频率计算的方法。

II.STM32 简介STM32 单片机是意法半导体公司推出的一款基于ARM Cortex-M 内核的32 位单片机。

它具有丰富的外设资源,包括定时器、中断控制器、DAC 等。

在这些外设中,定时器在测量正弦波频率方面起着重要作用。

STM32 定时器功能强大,可以实现定时、计数、捕获等多种功能。

在测量正弦波频率时,可以利用定时器的捕获输入模式,对正弦波的周期进行计数,从而计算出频率。

III.正弦波频率计算方法在测量正弦波频率时,有多种计算方法,包括测周期法、等精度测频法和方波频率测量法。

1.测周期法测周期法是一种简单的测量正弦波频率的方法。

它通过计数器对正弦波的周期进行计数,然后用总周期数除以时间,得到正弦波的频率。

这种方法的优点是简单易实现,缺点是测量精度较低。

2.等精度测频法等精度测频法是一种高精度的测量正弦波频率的方法。

它使用两个计数器,一个用于计数正弦波的上升沿,另一个用于计数正弦波的下降沿。

通过比较两个计数器的值,可以消除计数器正负一个脉冲的误差,从而提高测量精度。

3.方波频率测量法方波频率测量法是一种通过将正弦波转换为方波,然后测量方波频率的方法。

首先,使用滞回比较器将正弦波转换为方波。

然后,使用定时器的捕获输入模式对方波进行计数,得到方波的周期。

单片机软件系统的设计—频率和相位的测量.

单片机软件系统的设计—频率和相位的测量.

单片机软件系统的设计—频率和相位的测量单片机软件系统的设计—频率和相位的测量1、测量频率参数测量频率参数只需要一个通道(电压或电流)的脉冲信号,设选用电压通道,由于是低频50Hz左右,因此要采用测周期的方案来换算出频率参数(低频测周期比较精确,高频测频率比较精确)。

由于电压通道接到单片机的外部中断INT0,只要计数两次INT0中断的间隔时间便可换算出频率。

间隔时间采用定时器1统计,设晶体振荡器为12MHz,则一个机器周期为1μS,测量的结果保存在75H、74H中,程序如下:测频准备阶段的程序:SETB EX0;允许外部中断0中断,以便于测频MOV TH1,#0原文请找腾讯3249114六,维^论~文.网MOV TL1,#0MOV TMOD,#10H 外部中断0中断服务程序:SETB TR1JNB P3.2,$JB P3.2,$CLR TR1MOV 74H,TL1MOV 75H,TH1RETI 2、测量相位参数在测频的基础上,利用另外一个通道即电流通道产生的外部中断1中断信号,我们只要统计两个通道的中断间隔时间即得到两个通道相位之间的误差时间,再除以一个周期(测频率时已经测出)的时间,再乘以360,即为相位差。

设测量结果报存在77H、76H中,程序如下:测相准备阶段的程序:SETB EX0;允许外部中断0中断SETB EX1;允许外部中断0中断 MOVTH1,#0MOV TL1,#0MOV TMOD,#10H 外部中断0中断服务程序:SETB TR1RETI外部中断1中断服务程序:CLR TR1MOV 76H,TL1MOV 77H,TH1RETI测频用到了外部中断0,测相也用到了外部中断0,要区别两个含义不同的外部中断0,需要用一个标志位加以区别。

以上检测程序就基本完成了,下面的就是关于这批数据的计算和换算程序了。

现在从70H~77H中均保存了有效数据,这些数据还都没有经过计算和换算,还都是“半成品”,但是我们要清除这里边都是什么数据。

基于单片机的具有语音功能的万用表的设计

基于单片机的具有语音功能的万用表的设计

基于单片机的具有语音功能的万用表的设计【摘要】本文主要介绍了以羚羊的16位单片机SPCE061A为核心,将待测电子元件的参数R、L、C转换成电路的频率,通过单片机的外部中断测量此振荡电路的频率实现对各个参数的测量。

此系统具有测量精度较高、便于使仪器仪表自动化、还能加入语音播报的功能使其更加智能化。

【关键词】SPCE061A单片机;三点式振荡电路;555多谐振荡电路;语音播放1.设计方案对电子元器件集总参数R、C、L的测量种类很多,方法也各有不同,但都有其优缺点。

一般的测量方法都存在误差较大、不易实现自动测量以及缺少报警机制,因而不能实现智能化测量。

这里我们在测量电阻R和电容C时采用单片机和555数字集成芯片结合的方式,将待测电阻R或电容C接入555数字集成芯片的外围电路中构成多谐振荡电路;在测量电感L时将待测电感L接入外围电路中构成电容三点式振荡电路。

上面三种测量电路都会产生频率为f的振荡信号,由于单片机的外部终端由低电平时触发,所以我们便可以将555数字集成芯片或电容三点式振荡电路产生的频率输入到单片机SPCE061A的外部中断入口,这样就可以将模拟量近似的转换为数字量,然后单片机通过内部公式计算将最终的电阻R的阻值、电容C 的电容值以及电感C的电感值输出到LED数码管上显示出来,这种数字化的处理使得仪表实现智能化。

不仅如此,我们还可以对超过量程的情况进行语音报警,单片机通过计数获得待测元件产生的频率f,如果频率f不在该量程所对应的频率f的取值范围,则单片机会产生语音播报,提醒用户更换量程。

2.系统各部分功能设计框图图1 系统各部分功能设计框图3.各部分电路设计3.1 电阻测量电路采用脉冲计数法对电阻进行测量,如图2(a)所示,将待测电阻接入555定时器构成多谐振荡电路通过计算振荡输出的频率来计算被测电阻的大小,具体参数见表1。

其振荡周期为(以量程一为例):由上式得出待测电阻计算公式为:3.2 电容测量电路采用脉冲计数法对电容进行测量,如图2(b)所示,将待测电容接入555定时器构成多谐振荡电路通过计算振荡输出的频率来计算被测电容的大小,具体参数见表1。

单片机利用管脚中断来捕获编码器的方法

单片机利用管脚中断来捕获编码器的方法

单片机利用管脚中断来捕获编码器的方法单片机利用管脚中断来捕获编码器的方法引言编码器是一种常用的传感器,用于测量运动或位置。

在许多应用中,单片机需要能够准确地读取编码器的信号。

本文将介绍利用管脚中断来捕获编码器信号的几种常见方法。

方法一:外部中断外部中断是一种常用的捕获编码器信号的方法。

通过配置单片机的外部中断引脚,可以在编码器信号发生变化时触发中断服务程序。

以下是使用外部中断捕获编码器信号的步骤: 1. 配置外部中断引脚的触发方式,可以是边沿触发或电平触发,取决于编码器的输出信号特点。

2. 编写中断服务程序,在中断服务程序中读取编码器的状态并进行相应的处理。

3. 在主程序中初始化外部中断,并等待中断的触发。

方法二:定时器中断定时器中断也可以用于捕获编码器信号。

通过配置定时器,在固定的时间间隔内读取编码器的状态,并与上一次的状态进行比较,可以判断编码器信号的变化情况。

以下是使用定时器中断捕获编码器信号的步骤: 1. 配置定时器的计数方式和中断触发条件,一般选择固定时间间隔进行中断触发。

2. 在定时器中断服务程序中读取编码器的状态并进行相应的处理。

3. 在主程序中初始化定时器,并等待定时器中断的触发。

方法三:硬件捕获某些单片机具有硬件捕获功能,可以直接捕获外部信号的状态变化,并记录下时间戳。

这种方法可以提供更精确的编码器信号捕获,但需要单片机硬件的支持。

以下是使用硬件捕获捕获编码器信号的步骤: 1. 配置硬件捕获模块的触发条件和记录方式,一般选择触发条件为边沿触发。

2. 在硬件捕获中断服务程序中读取捕获的时间戳并进行相应的处理。

3. 在主程序中初始化硬件捕获模块,并等待捕获中断的触发。

结论通过使用外部中断、定时器中断或硬件捕获等方法,单片机可以方便地捕获编码器信号。

选择合适的方法取决于编码器信号的特点和应用的实际需求。

需要注意的是,在实际应用中,还需要考虑信号滤波、采样率等因素,以确保捕获到准确的编码器信号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
jishu(); } } // 定时器 0 和外部中断 0 的初始化 init()
{ EA=1; EX0=1; ET0=1; IT0=1; TMOD=0x01; TH0=0x3c; TL0=0xaf; TR0=1; }
// 延时程序 delay(uchar x) { uchar a,b; for(a=x;a>0;a--)
5.9.2 输入捕捉功能 ATmega128 的两个 16 位定时 / 计数器( T/C1、T/C3)具有输入捕捉功能,它是
AVR定时 / 计数器的又一个显著的特点。其基本作用是当一个事件发生时,立即将 定时 / 计数器的值锁定在输入捕捉寄存器中(定时 / 计数器保持继续运行)。利用输 入捕捉功能,可以对一个事件从发生到结束的时间进行更加精确,如下面的示例中 精确测量一个脉数字有变化 .
// 原理: 1 秒钟内计数外部脉冲个数,如计数 1000 次,则表示频率为 1000Hz
//1 秒钟定时采用 51 单片机定时器 0 实现,外部脉冲由外部中断 0 引脚接入
#include<reg51.h>
#include"51hei.h"
#define uchar unsigned char
可以看到,使用定时 / 计数器以及配合它的捕捉功能测量脉冲宽度,不仅节省系 统的硬件资源,编写程序简单,而且精度也高,因为读到的上升沿和下降沿的时间 就是其实际发生的时间。
5.9.3 比较匹配输出和脉冲宽度调制 PWM (见已发表的主题)
AVR 单片机的每一个定时 / 计数器都配备独立的、多达 10 位的预分频器,由软件 设定分频系数,与 8/16 位定时 / 计数器配合,可以提供多种档次的定时时间。使用 时可选取最接近的定时档次,即选 8/16 位定时 / 计数器与分频系数的最优组合,减 少了定时误差。所以, AVR定时 / 计数器的显著特点之一是:高精度和宽时范围, 使得用户应用起来更加灵活和方便。此外, AVR的 USAR、T SPI、I2C、WDT等都不 占用这些定时 / 计数器。
for(b=20;b>0;b--); } // 外部中断 0 中断程序 void external0() interrupt 0 {
tmp ;
}
// 定时器 0 中断程序 void timer0() interrupt 1 { TH0=0x3c; TL0=0xaf; counter1 ; }
// 显示程序 display() { uchar i;
作者 : 佚名 来源 : 本站原创 【字体:大 中 小】
点击数 : 302
更新时间: 2010 年 08 月 08 日
// 晶振 :12M
// 实验方法 : 首先要把 51hei 单片机开发板上的 ne555 的方波输出信号 J7 的第一脚
用杜邦线
//
引入 P3.2 口, 数码管即可显示 ne555 震荡电路当前的频率值 , 旋动 PR1
// P0=0xff; P0=con[i]; wei=1; wei=0; P0=table[dis[i]]; duan=1; duan=0; delay(1); P0=0; duan=1; duan=0; } }
获取计数值的百位
获取计数值的十位 获取计数值的个位 依次显示万、千、百、十、个位,动态显示
测量一个脉冲的宽度,就是测量脉冲上升沿到下降之间的时间。不使用输入捕捉 功能,一般情况往往需要使用两个外围部件才能完成和实现。如使用 1 个定时 / 计 数器加 1 个外部中断(或模拟比较器):定时 / 计数器用于计时;而外部中断方式 设置成电平变化触发方式,用于检测脉冲的上升和下降沿。当外部中断输入电平由 低变高,触发中断,读取时间 1;等到输入电平由高变低时,再次触发中断,读取 时间 2;两次时间差既为脉冲宽度。这种实现方式不仅多占用了一个单片机的内部 资源,而且精度也受到中断响应时间的限制。因为一旦中断发生, MCU响应中断需 要时间,在中断中可能要进行适当的中断现场保护,才能读取时间值。而此时的时 间值比中断发生的时间已经滞后了。
上升沿中断
rising_edge = ICR1; //
记录上升沿开始时间
TCCR1B = TCCR1B & 0xBF; // 设置 T/C1 为下降沿触发捕捉
ov_counter = 0; // 清零溢出计数器
}
else
{ //
下降沿中断
falling_edge = ICR1; //
记录下降沿时间
TCCR1B = TCCR1B | 0x40; // 设置 T/C1 为上升沿触发捕捉
初始化 T/C1,1/8 分频,上升沿触发捕捉 允许 T/C1 溢出和捕捉中断
while (1) { ………
}; }
这段程序是在 CVAVR中实现的。在 T/C1 的捕捉中断中,先检查 ICP1 的实际状 态,以确定是出现了上升沿还是下降沿信号。如果中断是由上升沿触发的( ICP1 为高电平),程序便开始一次脉冲宽度的测量:记录下上升沿出现的时间,把 T/C1 的捕捉触发方式改为下降沿触发,并清空溢出计数器。如果中断由下降沿触 发( ICP1 为低电平),表示到达脉冲的未端,程序记录下降沿出现时间,计算出 脉冲的宽度,再将 T/C1 的捕捉触发方式改为上升沿触发,以开始下一次的测量。
uchar counter1;
sbit duan=P2^6; //74HC573 的 LE 端 U5 LED 的段选端
sbit wei=P2^7; //74HC573
的 LE 端 U4 LED 的位选端
unsigned int counter2,tmp;
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //
interrupt [TIM1_OVF] void timer1_ovf_isr(void) // T/C1
{
ov_counter ; //
记录溢出次数
}
溢出中断
interrupt [TIM1_CAPT] void timer1_capt_isr(void) // T/C1
{
if (ICP1)
{ //
表 5-1 T/C0 计时精度和时宽(系统时钟 4MHz)
分频系数 计时频率 最高计时精度( TCNT0=25)5
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.192ms
泛,常用于测量时间、速度、频率、脉宽、提供定时脉冲信号等。相对于一般
8位
单片机而言, AVR不仅配备了更多的定时 / 计数器接口,而且还是增强型的,功能
非常强大。 ATmega128一共配置了 2 个 8 位和 2 个 16 位,共 4 个定时 / 计数器,本
小节重点对它的一些增强功能的应用做基本的介绍。
dis[0]=counter2/10000; // dis[5]=counter2000; dis[1]=dis[5]/1000; // dis[5]=dis[5]00;
获取计数值的万位 获取计数值的千位
dis[2]=dis[5]/100; // dis[5]=dis[5]0; dis[3]=dis[5]/10; // dis[4]=dis[5]; // for(i=0;i<5;i ) // {
256 15.625KHz 64us
16.384ms
1024 3906.25Hz 256us
65.536ms
最宽时宽( TCNT0=)0
从表中看出,在系统时钟为 4MHz时, 8 位的 T/C0 最高计时精度为 0.25us ,最长 的时宽可达到 65.536ms。而使用 16 位的定时 / 计数器时,不需要辅助的软件计数 器,就可以非常方便的设计一个时间长达 16.777216 秒(精度为 256us)的定时 器,这对于其它的 8 位单片机是做不到的。

阳型数码管 0—9 显示
unsigned int dis[6];
uchar con[]={0xfe,0xfd,0xfb,0xf7,0xef}; //
共阳型数码管控制端
init();
delay(uchar);
display();
jishu();
void main() {guandz(); init(); while(1) {
pulse_clocks = (unsigned long)falling_edge - (unsigned long)rising_edge
(unsigned long)ov_counter * 0x10000 / 500; //
计算脉冲宽度
}
}
捕捉中断
void main(void) { TCCR1B=0x42; // TIMSK=0x24; // #asm("sei")
脉冲的实际宽度(毫秒格式)是根据 T/C1 的计数时钟个数来计算的。本例中 T/C1 的计数时钟是系统时钟( 4MHz)的 8 分频,即 500KHz,相应的计数脉冲宽度 为 2us。因此计算出从上升沿和下降沿之间总的计数脉冲个数,除以 500 个脉冲 (为 1ms)即得到以毫秒为单位的被测脉冲宽度了。
而使用 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;
相关文档
最新文档