单片机一些常用的延时与中断问题及解决方法_第1页
单片机一些常用的延时与中断问题及解决方法_第2页
单片机一些常用的延时与中断问题及解决方法_第3页
单片机一些常用的延时与中断问题及解决方法_第4页
单片机一些常用的延时与中断问题及解决方法_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机一些常用的延时与中断问题及解决方法延时与中断出错,是单片机新手在单片机 开发应用过程中,经常会遇到的问题,本 文汇总整理了包含了 MCS 51系列单片 机、MSP430单片机、机1单片机、8051F 的单片机、avr单片机、STC89C52 PIC单 片机 .在内的各种单片机常见的延时与 中断问题及解决方法,希望对单片机新手 们,有所帮助!一、单片机延时问题20问1、单片机延时程序的延时时间怎么算的 答:如果用循环语句实现的循环,没法计 算,但是可以通过软件仿真看到具体时 间,但是一般精精确延时是没法用循环语 句实现的.如果想精确延时,一般需要用到定时器, 延时时间与晶振有关系,单片机系

2、统一般 常选用 2 MHz、12 MHz或6 MHz晶振. 第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为 1以和12以广 便于精确延时.本程序中假设使用频率为 12 MHz的晶振.最长的延时时间可达 216=65 53648假设定时器工作在方式 2, 那么可实现极短时间的精确延时;如使用其 他定时方式,那么要考虑重装定时初值的时间重装定时器初值占用2个机器周期.2、求个单片机89S51 12M晶振用定时器 延时10分钟,限制1个灯就可以答:可以设50ms中断一次,定时初值, TH0=0x3g TL0=0xbOb 中断 20 次为 1S, 10分钟的话,需中断12000次.计12

3、000 次后,给一 IO 口一个低电平如功率不够, 可再加扩展,就可限制灯了.而且还要看你用什么语言计算了,汇编延 时准确,知道单片机工作周期和循环次数 即可算出,但不具有可移植性,在不同种 类单片机中,汇编不通用.用 c的话,由 于各种软件执行效率不一样,不会太准, 通常用定时器做延时或做一个不准确的延时,延时短的话,在c中使用汇编的nop 做延时3、51单片机C语言for循环延时程序时 间计算,设晶振12MHz,即一个机器周 期是1us.for(i=0,i<100;i+)for(j=0,j<100;j+)我觉得时间是100*100*1us=10ms ,怎么会是 100ms答:不

4、可能的,是不是你的编译有错的啊我改的晶振12M,在KEIL里面编译的,为你得出的结果最大也就是 40ms,这是软 件的原因,不可能出现100ms那么大的差距,是你的 软件的原因.不信你实际编写一个秒钟,利用原理计算 编写一个烧进单片机和利用软件测试的 秒程序烧进单片机,你会发现原理计算的 程序是正确的4、51单片机c语言_nop_()是一个空指 令短时间延时的空几个标器周期答:这个_nop_()等效与汇编里面的,NOP 指令,也薪是空一个机器周期,如果是传统51单片机的话,等于空12个时钟周期 【即一个机器周期】5、51单片机延时500ms用机器周期叠 加怎么算答:DELAY:MOV R7,#

5、4D2:MOV R6,#250D1:MOV R5,#250DJNZ R5,$DJNZ R6,D1DJNZ R7,D2RET假设晶振为12MHz刚延时时间为:250*250*4*2=500MS 6、51单片机C语言程序中延时函数delay 的原理是什么现在找到两个函数第一:void delay(void)unsigned int i,j;for(i=0;i<500;i+) for(j=0;j<121;j+);第二:void delay(unsigned int k)unsigned int i,j;for(i=0;i<k;i+)for(j=0;j<121;j+);现有几个

6、疑问:(1):延时函数的原理(2):两个for循环的作用(3) : i、j的取值有什么规律和依据是不 是和单片机接的晶振频率有关所能延时 的最小单位时间是怎么计算的延时时间怎么计算啊!假设用的是 AT89C51RC的晶振呢答:1:原理:仅仅执行一些,没有实质性影 响的所谓 无意义指令,比方做比大小啊, 做某个int的自加运算啊之类的2:两重for的作用:简单的说,就像高中 数学中的 乘法原理一样,这样可以很轻 易的迅速增加上述 无意义指令的数目3:关于取值大小:这个如果是在 C下变 成,这个值不仅仅与晶振、单片机本身运 算速度有关,而且还与 C的编译器有关, 所以说,这个值虽说是可以精确计算的

7、, 但大多数情况下,程序员用的都是经验值-当然,如果用汇编编程,情况就不 一样了,由于每一条指令所使用的机器周期是一定的,你当然可以根据所有指令使 用的总时间,精确的算出具体延时的总时 间综合你的的问题,我给你一点建议,就是 刚学单片机的时候,还是一定要老老实实 的从汇编编程学起一一这样,在你以后接 触到C之后,你才能明白,这中间实际上 经历了一个什么样的过程,只有这样你才 能真正理解单片机.当然,等最终你完全 拿下一种单片机之后,尽量使用 C编程, 无疑是历史所肯定的.7、51单片机,晶振为 6M,求一个10ms 的延时程序答:延时有很多种方法,有一种是让单片 机去做无聊的循环,还有一种是用

8、定时 器.第一种的算法是:晶振的周期T1 = 1/f;这里f=6MHz所以T1=1/6 us;微秒单片机花12个T1去执行一个指令,所以一个机器周期等于12个晶振周期,T2= 12*T1=2us 10ms=1000 0us 所以你要得到10ms的延时就要想方法让 机器去做5000条无聊的指令 所以DEL: MOV R5,#05HF1: MOV R6,#05HF2: MOV R7,#32HF3: DJNZ R7,F3DJNZ R6,F2DJNZ R5,F1RET这种方法是用于对时间要求不高的地方, 我说的是其思想,程序中可能有错的地方 用定时器的方法我不太会就不误人了补充一下就是这个是用汇编写的

9、,你在主程 序中用ACALL DE调用就延时了.8、今天我用单片机做 眨眼的LED实验 时,程序运行,每次只令灯亮或灭都没问题,但是一开延时不能出现期盼的灯亮灯 灭的现象,这是怎么回事实验的硬件条件是:STC89C52编译环境:keil 3.下面是我写的程序,请教高手! ! !#include <>如果你需要增大,可以改变 j 的数据类型定义,如 unsigned int 2字 节可以到65535;无符号长整形unsigned long 4字节 可以到95.而上面所所 256是-1,而你定义的是无符号字符型.10、请教一个AVR单片机 延时的问题 外部晶振用的是8MHz,延时1微秒

10、的程序 如下:void delay_usunsigned int delay_counter 延时 1usdodelay_counter-;)while(delay_counter>1);)请问,为什么能延时1微秒啊答:8MHZ表示单片机的运行周期为1/8us,也就是执行一步你使用的是软件延时那么包括程序的提取,执行等都要花费时间比方,你提取这个函数可能花去一步,那现在就使用了啦接着你执行这个函数,在单片机内部,运 算是通过存放器的移来移去实现的这都需要时间,可能你看到的就一句 counter-这个指令,可能会花费好几个时 钟周期来实现举个例子:c=a+b,只有一句,但实际上花费的时间并 不短mov a, #data1; / 数据 datal 放入 a 存放 器mov b , #data2; 数据 data2 放入 b 存放 器add a,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论