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

下载本文档

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

文档简介

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

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

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

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

5、00ms 用机器周期叠 加怎么算答: DELAY:MOV R7,#4D2:MOV R6,#250D1:MOV R5,#250 DJNZ 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;f

6、or(i=0;i<k;i+) for(j=0;j<121;j+);现有几个疑问:(1):延时函数的原理(2)(3)两个 for 循环的作用i、j 的取值有什么规律和依据是不 是和单片机接的晶振频率有关所能延时 的最小单位时间是怎么计算的 延时时间怎么计算啊!假如用的是AT89C51RC的晶振呢答:“经验 情况就不1 :原理:仅仅执行一些,没有实质性影 响的所谓 “无意义指令 ”,比如做比大小啊, 做某个 int 的自加运算啊之类的 2:两重 for 的作用:简单的说,就像高中 数学中的 “乘法原理 ”一样,这样可以很轻 易的迅速增加上述 “无意义指令 ”的数目 3:关于取值大小:这

7、个如果是在 C 下变 成,这个值不仅仅与晶振、单片机本身运 算速度有关,而且还与 C的编译器有关, 所以说,这个值虽说是可以精确计算的, 但大多数情况下,程序员用的都是 值”当然,如果用汇编编程, 一样了,因为每一条指令所使用的机器周期是一定的,你当然可以根据所有指令使 用的总时间,精确的算出具体延时的总时 间 综合你的的问题,我给你一点建议,就是 刚学单片机的时候,还是一定要老老实实 的从汇编编程学起 这样,在你以后接 触到 C 之后,你才能明白,这中间实际上 经历了一个什么样的过程,只有这样你才 能真正理解单片机。当然,等最终你完全 拿下一种单片机之后,尽量使用 C 编程, 无疑是历史所肯

8、定的。7、51 单片机,晶振为 6M, 求一个 10ms 的延时程序 答:延时有很多种方法,有一种是让单片 机去做无聊的循环,还有一种是用定时 器。第一种的算法是:晶振的周期T1 = 1/f;这里f=6MHz所以个 T1 去执行个指令T1= 1/6 us;(微秒) 单片机花 12所以一个机器周期等于 12 个晶振周期,T2= 12*T1=2us10ms=1000 0us 所以你要得到 10ms 的延时就要想办法让 机器去做 5000 条“无聊的指令 ” 所以DEL: MOV R5,#05HF1: MOV R6,#05HF2: MOV R7,#32HF3: DJNZ R7,F3DJNZ R6,F

9、2DJNZ R5,F1RET这种方法是用于对时间要求不高的地方, 我说的是其思想,程序中可能有错的地方 用定时器的方法我不太会就不误人了(补充一下就是这个是用汇编写的,你在主程 序中用ACALL DE调用就延时了。8、今天我用单片机做眨眼的LED”实验时,程序运行,每次只令灯亮或灭都没问题,但是一开延时不能出现期盼的灯亮灯 灭的现象,这是怎么回事实验的硬件条件是:STC89C52编译环境:keil 3。F面是我写的程序,请教高手!#include <>如果你需要增大,可以改变j号长整形 unsigned 可以到95。的数据类型定义,如 unsigned int ( 2字 节)可以到

10、65535;无符耳乖上面所所long( 4 字节)256是-1,而你定义的是无符号字符型。10、请教一个 AVR单片机延时的问题 外部晶振用的是8MHz,延时1微秒的程序 如下:intvoiddelay_us( un sig neddelay_counter)/ 延时 1us dodelay_counter-;while(delay_counter>1);请问,为什么能延时 1 微秒啊 答: 8MHZ 表示单片机 的运 行 周期为 1/8us ,也就是执行一步 你使用的是软件延时 那么包括程序的提取,执行等都要花费时 间 比如,你提取这个函数可能花去一步,那 现在就使用了啦 接着你执行这个函数,在单片机内部,运 算是通过寄存器的移来移去实现的 这都需要时间,可能你看到的就一句 counter- 这个指令,可能会花费好几个时 钟周期来实现 举个例子:c=a+b,只有一句,但实际上花费的时间并 不短mov a,#data1;/ 数据 data1 放入 a 寄存 器b;/ 寄存器 a 的值与 b 相加,结 aa; / 将 a 的值放入 cmov b ,#data2

温馨提示

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

评论

0/150

提交评论