① 51单片机中断程序服务时间长好还是短好
通常情况下越短越好。因为进入中断以后,主程序停止运行,再来中断可能会导致堆栈溢出。
看具体应用,有的程序一生都在等待那个唯一的中断,主程序就一句while(1){.....}
② 单片机中断有什么作用
51单片机中的外部中断有什么作用?
可以打个比方,每天上班你都随时需要知道你同事的工作进度情况,你是希望你不停地打个电话去问“你做完了吗”,还是希望他做完了主动打个电话给你讲“我做完了,我们谈谈吧”。这就是中断的意义,在不需要的时候不影响处理 器做其它的事情,提高效率,增强程序的实时性。
51单片机中什么是中断?其作用是什么?怎么用?用自己的理解回答把
中断就是中途打断。
通俗解释:
你在看影碟,有人敲门(中断源),中断了你看影碟,观看暂停。处理敲门的事宜(中断目的),处理完成(中断结束),继续看影碟(继续执行原来的任务)。
再比如:你在看电视,水开了(中断源),把水灌到暖瓶里(中断目的),再烧上一壶(继续开中断),回去看电视。水又开了。。。。。。。。(循环中断)
以51单片机16位定时计数器0(T0)来讲,
计数是T1是一个能盛65536(十六位时)滴水的水盆,在水龙头下水一滴滴地滴入盆中。如果盆是空的那水在滴完65536滴水时盆子的水就满了再滴一滴的时候就溢出了。这时就会产生中断。
如果盆里面已经装入65500滴水(即初装值),那么只需要36滴水后就溢出了。
每一个水滴计数时即一个脉冲(高低电平变换一次)。
定时时每一个水滴即一个机器周期,水滴的速度即机器周期,等于12个振荡周期(晶振的振荡频率除以12),直接影响到溢出的时间。
51单片机中断系统的作用?
如果没有中断系统,就只能由 CPU 按照程序编写的先后次序,对各个外设,进行巡回检查与处理。
这就是查询式工作方式。
貌似公平,实际效率却不高。
如果有了中断系统,整个计算机系统,就具有了应付突发事件的处理能力。
这就是中断式工作方式。
单片机的中断标志位是有什么作用?
四个问号分为四点一一解答:
1、一般来说单片机的中断发生有两个条件,一是中断标志位置位,二是中断允许,如果这两个条件都满足则进入中断,因为正常情况下中断一直是允许的,那么只能通过标志位来区分是否有中断挂起,
2、如果进入中断不清除标志位,那么这一中断服务程序结束后由于标志位还是置位的并且中断是允许的,那么还会再次进入该中断,就会发生一直在执行中断程序的情况
3、周期性中断是由定时器辅助完成的,只要定时时间到,硬件就会自动置位标志位,这时中断发生,定时器还在运行,与中断处理是并行的没有冲突,因此周期性的中断不是从中断标志位清零开始的。
4、如果中断程序没有执行完并且一下个中断又来了,那么硬件还是会自动置位标志位的,如果在这之前已经清零标志位那么中断结束后会再进入一次该中断,如果这时还没有清除中断标志位,则第二个1毫秒中断无效。
单片机全局中断有什么用
本人觉得是因为现在有中断正在执行,为了不让高优先级的中断使现在的中断发生中断,而采取的保护程序
51单片机中断有什么作用
打个比方,你在房间看书,看书这个事是持久性的,拖延几分钟也没事。突然淘宝买的衣服送到了,镖局的人敲门,你用书签做好标记去开门。拿回衣服,回去继续看书。这个事的发生过程很正常。
同样的,看书就像单片机的一般事务处理,收快递就像中断。主要是应对紧急的,有时效要求的事件的发生。书签就是进出中断相关的现场保护。
具体点,主程序中有LED不停的闪烁,由于外部按键的触发,告诉你该发个字节出去。这时,可以产生个按键相关的中断(引脚电平中断),去中断发个字节,然后赶紧回来继续闪烁LED。
重要总结:就这么回事!
单片机程序什么作用啊 尤其是X++作用 定时器中断作用是什么呢?
x应该是一个全局变量,每次中断函数都会将x加1,程序的其余函数会扫描x的值来做出相应的动作,
interrupt 1 是计时器中断,这里应该是用一个全局变量计时,main函数或者其他中断函数检查x的数值做到定时的响应,如闪灯或者屏幕刷新又或者PWM输出 ,
定时器中断的作用是在CPU运行期间 ,定时器在不干扰CPU正常运行的情况下不停地将自身寄存器(从你的函数初始化看是TH0和TL0并起来的一个16位值)减一,当寄存器值为0时候发起中断(从1减去1开始到寄存器值为0之间发起的),这样可以做到CPU不用一直等待一个时间的到来而空转,或者运行一个程序的过程中计算运行的时间并定时插入一个额外的工作,
C51的计时器有4个工作模式(对于At89S51或者STC89C52及以上型号来说)不同的模式有不同的功能,这个网络文库能看到的,另外TMOD寄存器和其他寄存器还设定了计时器是外部的跳变信号或者单片机内部时钟来引起计时器的一次减1动作(计时动作)。
另外计时器可以设置为外部输入模式,这样就能作为计数器,比如说一个外接的按键,按10次后才触发中断,如果用外中断处理,那么整个主函数会被中断九次做无效中断才能等到第十次按键执行需要的中断处理动作。
这一点在操作系统中也用到了,比如我们的PC的多任务操作系统,就是用时钟中断来把一个程序中断执行另一个程序(比如操作系统和应用程序间)实现了时间片轮转,不过PC的操作系统把所有的中断处理函数都包含进去了,所以我们基本不用去管硬件中断就能编程。 反观单片机,因为资源有限,想要做到多任务(主函数与各个中断函数及其子函数)必须用定时器(也可以通过外部信号做计数器)以及外中断作为契机来切换多个任务。
如果需要解答整个中断函数的功能,最好把全部的程序都帖出来,因为x这个全局变量的作用没有在中断函数中体现
有问题可以继续跟我交流,我现在是大学本科生,学过C51单片机,正在学STM32
单片机中断寄存器的作用是什么?
中断寄存器就是用于存贮中断状态的 包含是否启用中断 或者是 是否发生中断
#include void InitUART(void){ TMOD = 0x20; 计时器类型 SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; 中断寄存器的操作 ES = 1; TR1 = 1; 计时器1的中断}void SendOneByte(unsigned char c){ SBUF = c; while(!TI); TI = 0;}void main(void){ InitUART();}void UARTInterrupt(void) interrupt 4{ if(RI) { RI = 0; add your code here! } else TI = 0;}
单片机中断 的interrupt 0 using 1中的using有什么作用
看到楼上二位说的有误,特纠正。
void INT0()interrupt 0 using 1
{....
棱....
}
interrupt 0 指明是外部中断0;
interrupt 1 指明是定时器中断0;
interrupt 2 指明是外部中断1;
interrupt 3 指明是定时器中断1;
interrupt 4 指明是串行口中断;
using 0 是第0组寄存器;
using 1 是第1组寄存器;
using 2 是第2组寄存器;
using 3 是第3组寄存器;
51单片机内的寄存器是R0--R7(不是R0-R3)
R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1、RS0位决定的。
using 0时设置 RS1=0,RS0 =0,用第0组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(00H)....R7(07H)
using 1时设置 RS1=0,RS0 =1,用第1组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(08H)....R7(0FH)
using 2时设置 RS1=1,RS0 =0,用第2组寄存器,R0--R7的在数据存储区里的实际地址是08H-0FH。R0(10H)....R7(17H)
using 3时设置 RS1=1,RS0 =1,用第3组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(18H)....R7(1FH)
单片机为什么使用中断
中断保护现场,是为了你中断子程序执行完以后能够返回到你程序中中断点,即产生中断的地方,使程序能够继续向下执行!!!!
如过你说的不用保护现场的话,那么程序执行完以后就不能够回到现场,那么你的程序将不知道要跳转到那里去了,也就是飞鸟,呵呵……
你说的中断嵌套,也是一样的,两者都要保护现场,不然你也不能够回到现场,程序也会飞的!!!!
而我们保护现场的数据都是放在堆栈中的,因此,你的中断次数也不能够超过堆栈的级数,那样数据也会丢失!!!!
说白了,中断它不同于子程序,子程序是固定好了的,返回的位置也固定了;而中断我们不能够预知它在那里发生中断,因此要保护现场,使中断子程序执行完后返回到中断的地方!!!
呵呵……说的太多了!!!
我知道你说的意思了,但是你要知道,中断现场保护是在中断子程序中进行的,因此当你高一级的中断发生的时候(他们不可能共用一个中断子程序,如果是同一中断,那也不可能,因为51中断中你进入中断子程序后要将禁止该中断再次中断,好象似的,嘿嘿……你可以试试),在高一级的中断子程序中也有现场保护,你的问题就是没有把现场保护放对地方!!!!!
============================================================
它们是把现场保护在同一堆栈中,我跟你打个比方吧,假如说堆栈的地址是80H,低一级的中断要保护的是1,2,3;高一级要保护的现场是4,5,6,那么在低一级的中断发生的时候,现场保护1,2,3将压如堆栈,(顺序书上应该有,这里是个比喻),那我先压入1,堆栈阀址加1,压入2,堆栈地址再加1,如果这个时候高一级的中断发生,那么现在就应该跳到高一级中断的子程序,堆栈地址就是82H了,在将4,5,6分别压入堆栈,这样堆栈的地址就是85H,当高一级的中断子程序结束后,返回现场,堆栈的数据要从85H开始弹出,这样现场返回的就是6,5,4,这个时候程序就会跳到中断之前的地方,即底一级的中断那里,将要继续将3保护到堆栈中,在执行低一级的中断子程序.(其中,你要在中断保护现场完了后将中断标志清0啊,不然它始终会中断的,不可能去执行程序去了...)
③ 51单片机各中断源特点
51单片机有三种中断:
1、外部中断,共两个,外部中断0和外部中断1,特点是由专门的IO口触发(P3.2,P3.3),可以是电平,也可以是下降沿。
2、定时器中断,共两个,定时器0和定时器1,特点是:可以工作定时或者计数器两种模式,每种模式有4种工作方式,定时器由内部计数,计数器有外部脉冲输入计数(P3.4,P3.5),计满溢出申请中断。
3、串口中断,当接收到一帧数据,或发送完一帧数据时,申请中断。
④ 51单片机分别采用查询和中断方式处理急停按钮信号时,它们的原理和优缺点
中断的方式实时性比较好,当检测到中断发生后,程序立刻转去执行中断程序,这样可以保证处理的实时性,而查询的方式是在每个循环周期内对标志位进行查询。
⑤ 提问+STC的51单片机到底稳定不稳定
总体来说还行,做一般的产品可以。但我认为是不够稳定的,我做过一个产品,用STC15F2K08S2。是从上位机接收串口命令然后执行相关动作,并把设备一些状态通过串口发给上位机。因为我比较注重效率,所以串口的发送和接收都采用中断方式进行,这样有串口命令时才去处理,没有时单片机做其它任务或休眠。但客户反映了不稳定的情况,有时从上位机发命令会导致外设死机。我当时花了很长时间找不到问题,因为我在烧录是就已启动了看门狗,如果死机应该会导致单片机复位才对。但没有,设备只是静悄悄的什么反应也没有,既不发数据也不接收命令。而且这种状况是随机的,很难重现,有时好几天都不出现一次,很难通过重现现象来查找问题。我怀疑是程序的BUG,但反复查找推理都没有找到哪有错。
我一直是相信硬件的,因为我之前无数次在程序调不通时怀疑硬件,但后来都证明是自己的程序错了。但这次实在找不到自己的问题,终于又怀疑是单片机的问题来。但怀疑就得有根据,于是我另外写了一个测试程序。在串口助手不停向单片机发数据,并让单片机不停地进串口中断重发接收到的数据,通过串口助手观察。终于串口死掉了,不接受数据也不发送数据。而程序还在控制着几个灯在反复循环,并没有死掉。
我后来改由程序来接收和发送数据,不进串口中断。没有发现任何问题,哪怕接收及发送速率都很高,程序最多循环的灯变慢或闪烁。
通过实验我知道,STC15F2K这系列的单片机中断系统硬件是有缺陷的。我后来修改了产品的程序,客户没有再反馈有什么”死机“的问题。
⑥ 51单片机的优缺点
一、51单片机
应用最广泛的8位单片机当然也是初学者们最容易上手学习的单片机,最早由Intel推出,由于其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“经典”,为以后的其它单片机的发展奠定了基础。
51单片机之所以成为经典,成为易上手的单片机主要有以下特点:
特性
1、从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象不是字或字节而是位。不但能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。
2、同时在片内RAM区间还特别开辟了一个双重功能的地址区间,使用极为灵活,这一功能无疑给使用者提供了极大的方便。
3、乘法和除法指令,这给编程也带来了便利。很多的八位单片机都不具备乘**能,作乘法时还得编上一段子程序调用,十分不便。
缺点
(虽然是经典但是缺点还是很明显的)
1、AD、EEPROM等功能需要靠扩展,增加了硬件和软件负担
2、虽然I/O脚使用简单,但高电平时无输出能力,这也是51系列单片机的最大软肋
3、运行速度过慢,特别是双数据指针,如能改进能给编程带来很大的便利
4、51单片机保护能力很差,很容易烧坏芯片
应用范围:目前在教学场合和对性能要求不高的场合大量被采用。
使用最多的器件:8051、80C51
⑦ c51单片机和c52单片机有什么区别
C51与C52单片机同为MCS-51内核,也就是常说的51单片机。而有些人误称为C51单片机和C52单片机恐怕是受了ATMEL的型号为at89c51和at89c52两款单片机的影响,这两款已经停产。