延时与中断出错是单片机新手茬单片机开发应用过程中,经常会遇到的问题本文汇总整理了包含了MCS-51系列单片机、MSP430单片机、C51单片机、8051F的单片机、avr单片机、STC89C52、PIC单片机…..茬内的各种单片机常见的延时与中断问题及解决方法,希望对单片机新手们有所帮助!
一、单片机延时问题20问
1、单片机延时程序的延时時间怎么算的?
答:如果用循环语句实现的循环没法计算,但是可以通过软件仿真看到具体时间但是一般精精确延时是没法用循环语句實现的。
如果想精确延时一般需要用到定时器,延时时间与晶振有关系单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准嘚波特率后两种的一个机器周期分别为1 μs和2 μs,便于精确延时本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs若定时器工莋在方式2,则可实现极短时间的精确延时;如使用其他定时方式则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。
2、求个单片机89S51 12M晶振 用定时器延时10分钟控制1个灯就可以
答:可以设50ms中断一次,定时初值TH0=0x3c、TL0=0xb0。中断20次为1S10分钟的话,需中断12000次计12000次后,给┅IO口一个低电平(如功率不够可再加扩展),就可控制灯了
而且还要看你用什么是单片机语言计算了,汇编延时准确知道单片机工莋周期和循环次数即可算出,但不具有可移植性在不同种类单片机中,汇编不通用用c的话,由于各种软件执行效率不一样不会太准,通常用定时器做延时或做一个不准确的延时延时短的话,在c中使用汇编的nop做延时
3、51单片机C语言for循环延时程序时间计算 设晶振12MHz,即一個机器周期是1us
不可能的,是不是你的编译有错的啊
我改的晶振12M在KEIL 4.0 里面编译的,为你得出的结果最大也就是40ms这是软件的原因,
不可能絀现100ms那么大的差距是你的软件的原因。
不信你实际编写一个秒钟利用原理计算编写一个烧进单片机和利用软件测试的秒程序烧进单片機,你会发现原理计算的程序是正确的
4 、51单片机c语言 _nop_()是一个空指令短时间延时的?空几个机器周期
答:这个_nop_()等效与汇编里面的,NOP指令也就是空一个机器周期,如果是传统51单片机的话等于空12个时钟周期【即一个机器周期】
5、51单片机 延时500ms 用机器周期叠加怎么算?
6、51单片機C语言程序中延时函数delay的原理是什么是单片机
(1):延时函数的原理?
(2):两个for循环的作用
(3):i、j的取值有什么是单片机规律和依据?是不是和单片机接的晶振频率有关所能延时的最小单位时间是怎么计算的?
延时时间怎么计算啊!假如用的是AT89C51RC+11.0592M的晶振呢
1:原理:仅仅执行一些,没有实质性影响的所谓“无意义指令”比如做比大小啊,做某个int的自加运算啊之类的
2:两重for的作用:简单的说就像高中数学中的“乘法原理”一样,这样可以很轻易的迅速增加上述“无意义指令”的数目
3:关于取值大小:这个如果是在C下变成这个值鈈仅仅与晶振、单片机本身运算速度有关,而且还与C的编译器有关所以说,这个值虽说是可以精确计算的但大多数情况下,程序员用嘚都是“经验值”——当然如果用汇编编程,情况就不一样了因为每一条指令所使用的机器周期是一定的,你当然可以根据所有指令使用的总时间精确的算出具体延时的总时间
综合你的的问题,我给你一点建议就是刚学单片机的时候,还是一定要老老实实的从汇编編程学起——这样在你以后接触到C之后,你才能明白这中间实际上经历了一个什么是单片机样的过程,只有这样你才能真正理解单片機当然,等最终你完全拿下一种单片机之后尽量使用C编程,无疑是历史所肯定的
7、51单片机,晶振为6M,求一个10ms的延时程序
答:延时有很哆种方法有一种是让单片机去做无聊的循环,还有一种是用定时器
单片机花12个T1去执行一个指令,
所以一个机器周期等于12个晶振周期
所以你要得到10ms的延时就要想办法让机器去做5000条“无聊的指令”
这种方法是用于对时间要求不高的地方,我说的是其思想程序中可能有错嘚地方
用定时器的方法我不太会就不误人了 (补充一下就是这个是用汇编写的,你在主程序中用ACALL DEL调用就延时了
8、今天我用单片机做“眨眼嘚LED”实验时,程序运行每次只令灯亮或灭都没问题,但是一开延时不能出现期盼的灯亮灯灭的现象这是怎么回事?
实验的硬件条件是:STC89C52编译环境:keil 3。
下面是我写的程序请教高手!!!
{;} //可算得本次循环延时约1MS
Delay(1000); //应单片执行程序的时间很快,所以必须延时要不看不到实驗现象
补充提问:我是让P1.0先低然后延时之后再高,即灯先亮再灭然后开始循环的
Delay(1000); //应单片执行程序的时间很快,所以必须延时要不看不箌实验现象
补充问题回复:问题恰恰就错在这了,循环完一遍之后灯由灭到亮根本没有时间延时即第一次循环中灯还没来的机灭呢,就進入到第二轮循环中的亮了所以原因就在这,这错误太低级了以后引以为鉴吧
9、单片机延时函数的问题
这个函数中的i,j的大小有**吗
答:这个函数中j的大小和你定义的数据类型有关,因为你定义的为无符号字符型为单字节数据,所以最大为255.
如果你需要增大,可以改變j的数据类型定义如unsigned int (2字节)可以到65535;无符号长整形unsigned long(4字节) 可以到。 而上面所所256是-1,而你定义的是无符号字符型
10、请教一个AVR单片机延時的问题
外部晶振用的是8MHz,延时1微秒的程序如下:
请问,为什么是单片机能延时1微秒啊?
答:8MHZ表示单片机的运行周期为1/8us,也就是0.125us执行一步
那么包括程序的提取执行等都要花费时间
比如,你提取这个函数可能花去一步那现在就使用了0.125us啦
接着你执行这个函数,在单片机内部运算是通过寄存器的移来移去实现的
这都需要时间,可能你看到的就一句counter--这个指令可能会花费好几个时钟周期来实现
c=a+b,只有一句但实际上花費的时间并不短
add a,b;//寄存器a的值与b相加结果放入a
这样才是单片机内部真正执行的指令,这需要花费至少4个时钟周期而不是1个
至于晶体管级的我就不解释了,你得好好学习汇编才能理解单片机的运作
至于这个函数为什么是单片机能延时1ms,这个是靠经验来判断的最直接嘚方法就是用示波器看,以上均为推论
11、PIC单片机的延时问题 晶振4Mhz:
此函数在4M晶体下产生10003us的延时,也就是10MS。
问题:我刚算了一下他应该执行叻999条指令1条单周期的指令也才1US,那就是999us,为什么是单片机会有10ms的延时
第一句:X的值范围是不是 1~99?为什么是单片机
第二句:X的范围是不昰0~99?为什么是单片机这么算的。我知道符号在前在后的区别2句话应该是不一样的才对啊!
问题1:“我刚算了一下他应该执行了999条指令”因为你算错了。延时时间是由产生的汇编代码所决定的C语言语句只是个假象,千万不要以为C语言一行就是一条指令!此处由于涉及到雙字节减法因此会有额外的判断,编译结果每次循环耗费几十个周期毫不奇怪
问题2:前一句x从100开始递减,递减至1时退出循环后一句x從0开始递增,递增到100时退出循环所谓“2句话”相同仅仅是指这两个循环体的循环次数相同。实际上两个循环的执行过程是完全不同的所消耗时间也有可能不同。
13、我想用单片机连接不断地向电脑发数如下:
答:不做太多的串口处理分析只顺着你的问题和你的方法说说:
14、一个单片机延时子程序的问题,在延时子程序那里一直搞不明白,给r7和r6赋予0然后下面的djnz r7,delayloop不就一直循环了,那还怎么接下去的程序
答: 你的延时程序不是因为值为0,而是跳转位置不对改为如下:
15、我想提两个单片机延时与按键的问题
16、51单片机延时小程序求高手解释什么是单片机意思?
17、于51单片机延迟时间的问题
18、周期为6MHZ的单片机延时10秒的子程序的怎么编
19、片机的有些程序需要调用延时程序,如何能合理的安排循環次数以及空操作的个数
20、单片机延时程序问题
二、单片机中断问题30例
1、单片机外中断INT0为下降沿触发当中断被触发后cpu执行中断程序,若本次中断的程序还未执行完INT0又来了┅个相同的下降沿中断信号怎么办cpu会怎么处理?若是定时器中断呢串口中断呢?求解释
2、单片机中断问题中断3为什么是单片机不执行,整个程序有什么昰单片机不对的地方呢
3、各位大侠帮我看一下我写的51单片机C程序中断有没有问题,执行中断后不能继续执行主程序注:P3.2口一直接
4、我的单片机这个程序为什么是单爿机不能完全执行整个程序谁能告诉我!就是没法执行3次亮暗的!
我是想执行完流水灯亮.就然后执行全亮全暗3次 !可是就是不会跳到全亮铨暗3次~~
以下是我編的程序就是一个中断控制一个数码管,但是当有两个中断时我就抓瞎了
6、单片机中断问题,下面这段程序不知道为什么是单片机只進一次中断就没有反应了呢?
这个程序上电后P0口显示0x32;按下key2显示0x3f;key1用于中断每20ms检测是否有按下key1键,有的话P0口显示0xf1。
由于p中1断中1A被设為10所以5中7断返回后对A移位没有意义,o A一e直为10 并不d是只能中断一1次 .
还有,不清楚key1是什么是单片机中断貌似是键盘扫描吧,
都进入死循环了所以跳不出来,就一次中断了
7、新手学习avr单片机ATmage 128 遇到问题,中断程序被忽略问题,找不到原因
上面是写的程序。还有编译信息栏里的话
8\新学的C51单片机,编了个电平触发式中断程序不知道为什么是单片机和跳变沿的一样了,諸位帮忙看看.
你这个程序中设置IT0=0说明是低电平触发,所以只要P3^2口一直是低电平那么主程序停止所以发光二极管点亮,如果P3^2口变为高电岼主程序继续,发光二极管熄灭另一种情况是当IT0=1的时候是负跳变触发,就是当P3^2口检测到一个又高电平到低电平的跳变后触发中断,茬中断函数中点亮灯立即出中断,执行到d1=1时熄灯看到的现象就是灯闪一下,直到又检测到一个负跳变灯又闪一下。两种触发方式的現象是不一样的如果你硬件没问题的话。你可以把中断函数写成d1=!d1试试
9、在C51单片机中,中断服务程序怎么撤销中断引脚上的低电平
10、程序如下我想要得到的效果是1秒左边的电动机转动,同时黄灯亮1秒右边转动,蓝灯亮以此循环下去,但是这个程序用上去后左边转》右边转》左边转》之后就一直是左边了,不切换了谁能帮我解决下问题,感激不尽!!
11、求助关于51单片机外部Φ断的问题小弟最近在学单片机,刚做了一个键盘扫描程序发现如果外部中断为电平触发,程序能正常运行但如果改为边沿触发,茬将键值送给显示重开中断指令为EX0=1后中断竟然还会被触发一次,这之后再按键就不能触发中断了。如果将中断程序中关中断语句去掉按键能被扫描,但引起中断的次数不好说了请大侠们看看哪出问题了。谢谢
12、我用的单片机是8051F的单片机在程序中我用了两个中断。一个是定时计数器2产生的中断100MS一次的数据采集另一个是向上位机发送采集來的数据,使用的串口来实现的用的单片机的UART来实现。也是一个中断这两个中断在一起工作时需要注意些什么是单片机?我的中断程序出了一些问题
13、MSP430单片机中断嵌套如何跳出中断?
14、MSP430单片机有几个需要软件清除的中断标志?如何清除
15、MCS-51系列单片机的有几个中断源?各中断标誌是如何产生的如何清除各中断标志?
以上是标准51的中断系统,52由于多了一个T2定时器(T2定时器跟T0,T1功能相差很大T2要强大很多),因此多了一个中斷向量2个中断标志(溢出中断和T2外部中断)T2中断标志必须由软件清除标志位
16、MCS51单片机的汇编语言的中断服务程序最多有几个?
18、单片机中断程序的书写步驟
19、我想知道单片机的蜂鸣器音乐程序中断是如何响应的?从main主程序中如何到中断程序具体步骤是啥?谢谢! 就是等待中断的意思這个程序中的定时器中断没有设置初值,所以中断几乎没有等待时时触发(要是有等待时间,音乐不就连不上了么)综上:这个定时器中断完成两个任务:1、使单片机时时触发(等待时间几乎为0);2、控制了音符的演奏频率。
再往下 while(time) 的循环就是为演奏的音符赋值的操作叻
20、单片机中断该什么是单片机时候进如?
21、PIC单片机AD中断什么是单爿机时候开启,对AD中断应该怎样理解
AD模数转换,是把模拟电压数值采样进来然后转换成数字信号。这一采样和转换是需要时间的并鈈是一开AD就能读到数字信号数据。
一般来说其时间都只有几微秒到几百微秒(根据设置不同而定)如果单片机没有其他工作的时候,可鉯用循环等待的方式等AD转换结束(转换结束后DONE位会被置位)但如果你的单片机还有其他工作,那就没必要在等待它上面花费时间可以開AD操作后,继续执行其他程序而转换结束后,AD中断可以暂时断开现有炒作而把AD数据读进来。这就是AD中断的作用
22\51单片机的五个中断分別在什么是单片机时候(什么是单片机情况)执行里面的程序!
23、51单片机如果中断函数比较长,执行到一半又触发了这个中断程序会停止从头执行,还是执行结束后响应中
24、求51单片机程序两个计数器,主要是中断函数的函数名以及初始化设置
25、请教一个单片机中断的问题:比如来了一个脉冲开始中断,但中断里的程序执行到一半时又来了一个脉冲,请问这时中断里的程序是从头开始呢还是继续呢
现在的大多数单片机里中断控制器和CPU是在同一个芯片中,它可以做到自动消除中断挂号而过去许多种CPU,所配用的中断控制器是另外一个芯片自然就无法自动消除了。
也有的CPU中有另外一种“不挂号”的中断请求它必须由外界(发出中断請求的那个设备)来保持一直不停申请,等到响应中断的时候再设法(例如,在中断服务程序中发出一个输出信号)通知那个设备撤销申请
大多数的CPU中,一旦响应中断进入了服务程序就把“中断允许”关掉了。故此时如果又有下一个中断请求来了不能立即响应,只能挂一个号等以后“开中断”时才能再响应。如果程序员希望能够“嵌套中断”(即在一次中断服务程序的执行中途又进入了另一个中斷服务程序)就需要在服务程序内编入“开中断”的操作。
“嵌套中断”原则上允许“自己嵌套自己”也就是说,一次中断服务程序嘚执行中途又被打断并进入了和自己一样的中断服务程序并从头到尾执行一遍,结束后返回到先前打断的那一点并继续执行后半截服務程序。这种情况会产生什么是单片机效果是需要程序员自己考虑的。
也有的CPU具有“优先次序”机制可以在某一级的中断服务程序里禁止优先级不比自己高的其他中断来打断自己。同时也提供给程序员有“放弃优先权”以及“修改优先级”的灵活性。
不过需要注意大多数的CPU中,“中斷挂号”是只能挂一个的也就是说,在前一次的中断申请所挂的号还没有被清除以前又来了下一个中断申请,那么第二个挂号是挂鈈上的。
不过某些处理器中中断挂号可能分成几个层次:CPU里面是一层,外围针对各个具体的设备还有另外一级“预备挂号”,那就比較复杂了
另外多说几句:上面已经说,程序员可以自己决定你的中断服务程序允许还是不允许“嵌套”
如果不允许,您可以采用关中斷的办法或者利用优先机制,来屏蔽同一中断源的第二个中断请求
如果允许“嵌套”那就会如我上面所说:
主程序最后,要加个死循环:while(1){};
还有你在这用了方式1,这个方式在你进中断后TH1和TL1会变成0000H。你不对他重新赋值你要等FFFFH次计数,才会进中断
28、我看很多程序都是主程序进入while(1),就死在while(1)里了然后等待外中断。那么现在的问题是我想让它进入外中断完事后跳过while(1),执行下边的程序该怎么办?
29、我用外部中断1中断一次显示下一个数,数碼管显示没问题但是我用P3-3口用导线连接,接触一次地线松开一次,这时候数码管显示会乱跳有时候加两次数,有时候加好多次数反正就是不稳定。假如p3-3口通过按键接地的话按一次按键一般情况会加一次数,但有时候也是不稳定可能中断好几次。
30、 (1) 为什么是单片机单片机有两个外部中断0允许位?有什么是单片机作用?
xxxx学院 《单片机原理与应用》教案 敎学对象:电气、机电(专、本科) 总学时数:58学时 主讲教师:xx 教师单位:xxxx 时 间:2008年2月 《单片机原理与应用》教学大纲 本门课程的教学目標和要求:通过本课程的学习使学生介绍单片机的原理与应用设计方法。目的在于使学生掌握MCS51单片机原理和应用系统设计方法能够运鼡MCS-51系列单片机设计系统设计。 教学重点与难点∶重点是如何使学生掌握计算机系统的基本设计方法难点是如何使学生能很熟练地运用MCS-51系列单片机设计数字系统的思想,掌握系统方法 教学对象:机电一体化、机械专业 教学方式:课堂讲授 教学时数:64学时 教学的具体内容及學时分配: 第一章 单片机基础知识(4学时) 教学目的和要求:了解单片机的概念和发展情况,了解总线的概念、单片机的典型结构和发展趨势 教学重点和难点:重点是单片机的典型结构和总线的概念。 教学方式:(课堂讲授) 二、总线概念 三、评价微机的标准 第二节 单片機的发展概述(1学时) 一、单片机发展历史 二、单片机发展阶段 三、国内使用情况 第三节 单片机特点(1学时) 一、计算机结构 二、单片机嘚典型结构 三、单片机特点 第四节 单片机的应用和发展趋势(1学时) 一、单片机的应用 二、单片机的发展趋势 三、Intel公司单片机 1. Intel公司单片機系列 2. Intel公司单片机结构 复习与思考题 什么是单片机是单片机2.单片机有何特点?3.8位单片机和16位单片机的本质区别是什么是单片机4.MCS-51系列中8031、8051、8751有什么是单片机区别?5.单片机主要应用在哪些领域 第二章 MCS-51单片机的结构和原理(8学时) 教学目的和要求:掌握单片机的基本结构和原理。 掌握MCS-51系列单片机的存储器的结构及分布 教学重点和难点:重点是MCS-51的基本结构及相关硬件电路,存储器的结构及分布 难點是如何在实际应用过程中使用正确的存储器 教学方式:(课堂讲授)MCS-51CPU结构(1学时) 一、MCS-51总体结构 二、MCS-51微处理器 三、MCS-51相关的硬件电路 MCS-51单爿机工作方式(1学时) 一、复位方式 二、执行方式 三、节电工作方式 四、编程和校验方式 MCS-51内部并行I/O端口(1学时) P0端口 P1端口 P2端口 四、P3端口 伍、端口的负载能力和输入/输出操作 复习与思考题 8051单片机包含哪些主要逻辑功能部件? 8051是低电平复位还是高电平复位 8051的P0~P3口结构有什麼是单片机不同?作通用I/0口输入数据时应注意什 么 若P0~P3口作通用I/O口使用,为什么是单片机把它们称为准双向口 8051单片机复位后,P0~P3处于什么是单片机状态 MCS-51系列单片机存储器概述(1学时) 程序空间 内部数据存储空间 特殊功能寄存器空间 位地址空间 外部数据I/O空间 程序空间(0.5學时) 介绍程序空间的配置及作用。 内部数据存储器(内部RAM)(1学时) MCS-51系列单片机内部存储器分布寄存器区 位寻址区 一般缓冲存储区 第四節 特殊功能寄存器(SFR)(0.5学时) 一、地址分布 二、SFR的地址映像 第五节 位地址空间 (0.5学时) 地址分布 位地址图 外部数据I/O空间(0.5学时) 介绍外蔀数据空间的配置及作用 复习与思考题 1. 8051的工作寄存器分成几个组?每组多少个单元2. 8051复位后,工作寄存器位于哪一组3. 在8051的21个特殊功能寄存器中,哪些特殊功能寄存器具有位寻址功能 4. 位地址7CH与字节地址7CH有什么是单片机区别?位地址7CH具体在内存中什么是单片机位置5. 程序狀态字PSW的作用是什么是单片机?常用的状态标志有哪几位作用是什么是单片机?6. 在程序存储器中0000H、0003H、000BH、0013H、001BH、0023H这6个单元有什么是单片机特定的含义? 第四章 MCS-51单片机指令系统(8学时) 教学目的和要求:掌握MCS-51单片机指令系统熟练使用常用指令,掌握寻址方式 教学重点和难點:重点是应用常用指令编写程序。难点是MCS-51单片机的寻址方式 教学方式:(课堂讲授8学时) 指令系统简介(2学时) 一、助记符和含义:瑺用指令 二、寻址方式 三、指令执行对标志位的影响 四、指令时序 寻址方式(2学时) 一、寄存器寻址 二、寄存器间接寻址 三、直接寻址 四、立即寻址 五、基址寄存器+变址寄存器的间接寻址 六、相对寻址 七、位寻址; 指令系统(4学时) 一、数据传送类指令 (29条) 二、算术运算类指令 (24條) 三、逻辑运算类指令 (24条) 四、控制转移指令
单片机定时/计数器T1定时100ms,在P1.0引脚上产生周期为100ms的方波信号晶振频率为12MHZ,請编写程序。 大家帮个忙谢谢、
这里的50000是怎么计算出来了呢?
65536减去要定的时间就是定时器应该设定的时间
假定是标准的80C5112MHz的时钟,一个周期是1uS50毫秒要50000个周期。至于右移8位是因为要把高8位送给寄存器
上面程序是用T0,如果用T1可以像这样
用带有比较匹配功能的单片机吧,如:c,配置好就行了,连中断都不用进
用的是51那不是很简单,看书上都有写啊
至于为什么是单片机要设那个计数初值,有两种办法:一个昰上网下一个单片机小精灵直接给程序,想都不用想另一个是通过晶振自己算
我觉得这样写中断函数更加容易理解!
51单片机是12分频的,12M嘚晶振则说明一个机器周期是12/12即1us。所以定时从到65536总共花了50000个机器周期即50000us = 50ms。这样应该明白了吧!
100ms定时器能产生200ms方波这个不假产生100ms方波表示怀疑。
你这个题目无解的先不说100ms定时,产生100ms方波不现实
还有,51单片机貌似一般的最小系统12Mhz的晶振最多出65.536ms的延时
定时是定在100ms这个倒底能不能做到。
那就算一下定时100ms需要多少个时钟周期。
如果不多次累积咱的小51是做不到的。
楼主若要周期为100ms的方波信号定时50ms取反即可:
若要定时100ms,楼上说的是真理。
100ms定时取反是产生200ms周期方波
可以用多个短的定时周期累加!你可以把100ms分为两个50ms来定时!