导航:首页 > 操作系统 > 单片机下降沿计数误差分析

单片机下降沿计数误差分析

发布时间:2023-03-21 05:17:52

‘壹’ 51单片机内置定时器制作计时的误差怎么产生的。

首先,单片机定时器的记数的频率是由单片机的时钟频率所决定的,而单片机的时钟频率是由外部晶振或内部震荡电路所决定的。不管是外部晶振还是内部晶振,本身都是有误差的!然后又受外部的温度、湿度、电磁干扰的影响,他们的频率也是在变化的。这是无法避免的。然后,人在操作时也是有误差的,例如51单片机工作在模式1的16位的定时器。当发生定时中断后,要重装定时器的初值,而执行这两条指令也是要花时间的。这个误差很小,可以忽略。最后就是当你 的中断函数过长,其执行时间已经超过了定时周期,这时候将会丢失中断。因为在发生下一次中断的时候,而CPU还在执行本次的中断服务程序。由于同优先级的中断不能被打断,所以就会丢失中断信号,这是产生了错误,而非误差,所以中断函数尽量短!

‘贰’ 用51单片机汇编语言检测上升沿和下降沿

这里只讲原理,不关注速度。实际设计工作中,已经有很多单片机能够识别io端口上升沿和下降沿中断,且方式不止一种。

sbit

io_inp=p2^1;输入端

bit

old_bit;输入端电平记忆

unsigned

char

low_high;上升下降沿标志,0=无变化,1=上升沿,2、下降沿

void

io_rest(void)

{

if(old_bit=!io_inp)

{

old_bit=io_inp;

if(io_inp=1)

low_high=1;

else

low_high=2;

}

}

void

main(void)

{

old_bit=io_inp=p2^1;

while(1)

{

low_high=0;

io_rest(void);

//在此应用

}

}

(2)单片机下降沿计数误差分析扩展阅读:

直接使用肢猛汇编指令编写单片机程序,对硬件的控制更加直接,可以直接操作物理地址,寄存器,端口等;历坦桥其它更高级的语言(如:C语言)对硬件的控制是依赖于类库来实现的。并且,对于一些对程序大小和运行速度有非常严苛要求的项目而言,都必须使用汇编指令。

C语言只是为了方便编写,与机器打交道的信山其实都是2进制得代码,汇编语言就是这些代码好记忆的名称和规则,只是比C语言难理解些。

‘叁’ 单片机怎么检测上升沿与下降沿

您是问硬件的方式?还是软件的方式?

如果是硬件的方式,那么,各种兄岁单片机很不相同,需要具体看它的资料。
一般来说,某些引脚,例如:外中断引脚、定时器的计数触发引脚、捕获引脚等等,都可以用来检测上升沿与下降沿。

以捕获(有的单片机资料如80196,将它称作“高速输入”)引脚为例:
捕获引脚可以与某个定时器相关联,在捕获引脚上遇到上升沿或下降沿时,硬件就自动记录下当时定时器的读数,并产生中断请求。您可以在中断服务程序中做所需的相应操作。
至于是上升沿捕获,还是下降沿捕获,还是二者都能捕获,可以由用户自己选择配置。

如果是用软件的方式来检测,那道理就简清败单了。用查询方式:只要将要检测的信号接到某个输入端口的某个位,在程序中反复读取该位的输入,一旦遇到“上次是0此次羡正睁是1”的情况,就说明检测到了上升沿,遇到“上次是1此次是0”的情况,就说明检测到了下降沿。

‘肆’ 单片机外部中断0接收外部脉冲的问题。。

单片机外部中断0, 有两种情况
1 是 设置错配和误 如果设置 成低电平 中断 那么 只要 低电平 进入中断服务程序,中断结束
还是 低电平 继续 进入中断服务程序,产生重复计数,检查中断设野卖盯置。
2 脉冲信号波形不好,产生多个下降沿, 可以加滤波电容 (颂和103 & 104 )

‘伍’ 基于51单片机的频率测量及测量误差

可以用对单位时间内 脉冲个计数的方法来实现,用2个 定时/计数器 ,一个作为定时器,定时50 ms,累积10次或20次,即0.5S或1S
另外一个作为计数器,对外部脉冲计数
误差与晶振频率准确度有关,测量与时间有关的量,你本身的时间当然要准确。如果所测信号频率高,可以测0.2s或0.5S内的脉冲数,可以防止溢出,如果频率低,可以测1S或2S内的脉冲数,以减小误差,但响应速度慢一些。
程序比较简单,以下供参考
void init()//初始化设置
{
TMOD=0x15;//定时器0作为计数器,定时器1作为定时器用
TH0=0;//计数器清0
TL0=0;
EA=1;//开总中断
ET1=1;//允许定时器1中断
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR0=1;//启动计数器
TR1=1;//启动定时器
aa=0;
}

void main()//主程序
{
init();//初始化
while(1)//循环程序
{
dd=bb*256+cc;//0.5S的计数值
ee=2*dd;//换算为1秒钟的计数值
if(aa==1)
{
if(TH0>12)//预判断,50ms内TH0>12,1s内计数值将超过可计数的最大值65535
fm=1;//报警
}
display4(ee);//显示
fm=0;//报警停止
}
}

void timer1()interrupt 3//注意:定时器1的中断序号为3
{
aa++;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;

if(aa==10)//中断10次,共0.5S
{
TR0=0;//暂停计数
aa=0;
bb=TH0;//读出计数器数据
cc=TL0;
TL0=0;//计数器清0
TH0=0;
TR0=1;//重新启动计数器
}
}

‘陆’ 单片机,什么是下降沿

单片机中的下降沿,并非是一般意义的下降沿。

单片机工作时,它会自动的,每隔一个机器周期,检测一次引脚上的电压。

当,前一次检测,是高电平,后一次,却检测到了低电平,
单片机,就认为是收到了一个《下降沿》。

在单片机中,所说的《下降沿滑滑散》,必须有一个高电平、有一个低电平。
高电平、信氏低电平的持续时间,都必须超过一个机器周期。
否则,单片机就检测不到。

高、低之间的《斜坡》,不要超过一个机器周期,让液否则,单片机就难以检测。

‘柒’ 谁能详细说一下单片机中误差怎么产生的,要非常详细的

不知道你说的是什么误差?如果是时间或执行时间上的误差,一般应该是晶振造成的,晶振频率会有误差,这就造成了延时和指令执行时间的误差。

阅读全文

与单片机下降沿计数误差分析相关的资料

热点内容
如何用python写vlookup函数 浏览:796
社保加密狗厂商 浏览:214
php编译运行说法 浏览:955
程序员说喂 浏览:246
抖音直播云服务器 浏览:627
一加7pro文件夹data 浏览:424
程序员淋雨 浏览:955
python输出数字序列中的空格 浏览:78
怎么将pdf文件大小 浏览:734
氧原子相对分子量算法 浏览:988
加密机为什么是安全的 浏览:451
单片机拼音输入法 浏览:797
苹果笔记本t2加密芯片怎么打开 浏览:796
安卓如何把手机投屏至电视 浏览:747
方舟编译器现在可提速哪些软件 浏览:61
微信加密为什么是黑屏 浏览:473
android去电状态 浏览:612
苹果13如何加密视频 浏览:815
linuxweblogic缓存 浏览:75
云服务器不同地域 浏览:947