单片机中断代码

作者&投稿:苦琦 (若有异议请与网页底部的电邮联系)
c语言怎么编写单片机的中断~

标准c语言没有中断调用机制,但是不同编译器都有相应的中断处理方式,可以使用户实现中断功能。
解决方案:
1、采取轮询的方式解决,就是每10毫秒检查一下是否有键盘请求,总的来说,这样基本上可以解决问题,而且简单易行,但每10毫秒都要检查,系统消耗太大。
2、采取中断的方式:
(1)用高级语言调用中断来处理问题。中断是cpu响应一个中断外围设备8259A的一个过程,当键盘敲击,cpu保存断点暂停执行并且跳到相应的中断处理程序继续执行,结束后根据断点再跳回来。通过这种方式可以轻松+愉快地解决这个问题。但是需要用到高级语言调用汇编,根据编译器的不同而有所差别。
(2)自己模拟中断。可以另外建立一个线程专门响应键盘的敲击,如果有敲击则打断主线程。这样做实现起来很复杂,而且涉及到不少复杂的关键技术,比如信号量之类的东西。
3、强大的vc
vc采取了消息映射的机制来处理外部设备的请求,比如时钟中断、键盘中断等等。通过此可以灰常灰常容易的处理外部中断。

开中断就是当有中断信号产生时,单片机会进入中程序
如P3^2口 有低电平信号或下降沿信号(由TCON寄存器控制),单片机会暂时放下当前工作,去执行中断程序中的程序,当中断程序中的工作结束后,再返回主程序继续做。
关中断的话,就是关闭中断,让P2^3口接收到低电平信号或下降沿信号(由TCON寄存器控制)后,不在进入中断。

通俗点就是把尿意比作中断信号,开中断 就是在人群中必须马上去上厕所,关中断就是穿了尿不湿或者可以憋住,暂时不用去理会尿意,直接跳过这个命令进入下一个 执行命令。

void init0(void)interrupt 0 using 1 //init0方式1,采用中断方式
{
EA=0; // 关掉总中断,防止外部中断再来
TH0=0xff;
TL0=0x14; // 给定时器赋值,以便计数
int_times++; // int_times自增
if(head_ok==0) // 检测同步头
{
if(tmr_times>0x31&tmr_times<0x37) // 如果头的时间在这个范围内,那么就标志头检测到了
{
head_ok=1; // 检测到头了
int_times=0; // 清零定时器
tmr_times=0;
lanth=0; // 清零lanth
}
else
{
wrong(); // 超出0X31 - 0X37则表示检测的头不对
}
}
else // 如果之前已经检测到头了,那么就检测数据位
{
one_zero(); // 调用这个函数不知道要干啥
code_data=code_data>>1; // 检测到的数据位组合起来,原来的数据往低位移动
if(lanth==1)
{
code_data|=0x80;
}
else
{
code_data&=0x7f;
}
tmr_times=0;
lanth=0;
if(int_times==8) //如果数值为8,则接收到的是地址码
{
address=code_data;
}
else if(int_times==16) // 地址反码
{
if(code_data+address!=0xff) wrong(); // 判断是否是地址反码
}
else if(int_times==24)
{
code_data1=code_data;
}
else if(int_times==32)
{
int_times=0;
head_ok=0;
if(code_data1==~code_data)
{
flagf=1;
shuju=code_data1;
beep=0;
}
else
{
flagf=0;
}
}
}
EA=1;

}

楼上说的是,要放在具体程序中才知道,貌似红外或者无线数据解码,不过解码方式比较笨重,呵呵

需要放在整个程序中才能知道它的作用。


可屏蔽中断与非屏蔽中断的区别?各有什么作用?
中断由异步的外部事件引起。外部事件及中断响应与正在执行的指令不存在关系。80386有两根引脚INTR和NMI接受外部中断请求信号,INTR接受可屏蔽中断请求。在80386中,标志寄存器EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求。 处理器必须接受和处理来自NMI的中断请求。在80386系统中,处理器在响应NMI的中断向量号...

程序中断方式保存现场为什么要分两步
为了尽可能的提高CPU的利用率,当某一线程必须转入等待状态,如要获取某一低速外设的数据时,这里的读操作程序会主动放弃当前没有用光的时间片,主动调用任务切换中断代码,把CPU的时间让给其它已经准备好可以继续的线程。 1.中断 zhōngduàn [interrupt;discontinue;suspend;come to stop;break down (off)] 半中间发生...

主板故障代码00是什么问题?
电脑故障诊断卡代码显示00:刚开机就直接到00或者FF是CPU或者主板芯片坏,需要拿到电脑店进行修理。电脑主板故障诊断卡代码注释:1、C0:开机检测代码显示C0,这为主板BIOS故障或者主板芯片已坏。2、C1:C1本为检测是否内存通过,停止即为不过,但是主板也有故障嫌疑的。3、C3:内存问题D3、D4:此都为...

电脑故障卡代码
5、有少数主板的PCI槽只有前一部分代码出现,但ISA槽则有完整自检代码输出。且目前已发现有极个别原装机主板的ISA槽无代码输出,而PCI槽则有完整代码输出,故建议您在查看代码不成功时,将本双槽卡换到另一种插槽试一下。另外,同一块主板的不同PCI槽,有的槽有完整代码送出,如DELL810主板只有靠近CPU的一个PCI槽...

主板检测卡中cup,内存,主板,显卡,硬盘有问题分别对应的代码是什么?
5、有少数主板的pci槽只有一部分代码出现,但isa槽有完整自检代码输出。且目前已发现有极个别原装机主板的isa槽无代码输出,而pci槽则有完整代码输出,故建议您在查看代码不成功时,将本双槽卡换到另一种插槽试一下。另外,同一块主板的不同pci槽,有的槽有完整代码送出,如dell810主板只有靠近cpu的...

歌华机顶盒错误代码00703021
歌华有线机顶盒常见故障问题及解决办法 故障现象1 无节目信号 可能存在的原因:信号中断、连接线问题、网络问题 解决办法:判断用户家中信号是否中断;有线电视面板信号线是否正常;机顶盒连线是否松动或脱落。故障现象2 黑屏、蓝屏、无信号、无信号输入 可能存在的原因:切换问题、连接线的问题、电视机的问题,...

诺科燃气壁挂炉常见故障代码有哪些?
诺科燃气壁挂炉常见故障代码如下:E1:点火失败或中途熄火。由于火焰检测(反馈电极)感应电流较弱时,判定为燃烧器无火,造成程序中断。此时可检查反馈电极是否处于火焰的高温区,调节反馈电极高度,检查反馈电极连接线路及接插头。从窗口观察组合电极是否有放电现象,此时可检查组合电极放电距离,检测连接处及...

用单片机对步进电机进行控制
片机一切工作停止,直到下一个中断或硬件复位为止。2 步进电机驱动实现2.1简介 步进电机在单单仅给予电压时,电机是不会动作的,必须由脉冲产生器提供位置(脉波数)、速度的脉冲信号指令,以及驱动器驱动电流流过电机内部线圈、依顺序切换激磁相序的方式才能够让电机运 转。所以欲使步进电机动作的必要系统组成有: (1)脉...

15w408as的单片机定时器2中断号为什么是12
这是由单片机的结构决定的,该系列单 片机中断源比较多,其排列顺序是一定的 有些单片机虽然没有12个中断源,但只要有定时器2中断,排号都是12(从0处起)

电脑蓝屏出现代码 stop 0×00000024(0×00190203,0×89B65198,0×c000...
一、改一下硬盘模式。开机按F2(或别的键,屏幕有显示的)进BOIS 找到“ATA”模式 看看是“IDE”还是“ACHI”模式?更改一下,按F10保存。二、开机后 到系统选择那里按f8 选起作用的最后一次正确配置(可以解决因驱动装错造成的错误)和带网络连接安全模式(进去后是有网络的,再用360软件弄下),...

霞浦县13859494408: 51单片机中断程序怎么写? -
粱隶前列: //unsigned char a; void main(void)//主函数{TCON=0x01;EX0=1; //外部中断允许 EA=1;//开总中断while(1){//其他程序}} void int0(void) interrupt 0 //外部中断0 中断子程序{//这里面可以写中断子程序/*a++;if(a==2) a=0;while(!zd)if(a) TR0=1; //开关...

霞浦县13859494408: 单片机用C语言编写中断的范例? -
粱隶前列: 定时器溢出中断:#include<reg51.h> void timer0(void); //函数声明 void main() { P1^1 = 0; TMOD = 0x01; //定时模式 THO = 0xEE; TL0 = 0xFF; //定时时间 ET0 = 1; //中断允许EA = 1; //总中断使能 TR0 = 1; //开始计时 while(1); //等待中断 ...

霞浦县13859494408: 求一个单片机中断的C语言程序 -
粱隶前列: 程序大致这样:uchar a=0;//计中断次数 EX0=1;EX1=1;EA=1;//开相应中断 IT0=1;IT1=1;//下降沿触发 P0=0;//全灭//中断程序 void zhongduan1(void) interrupt 0 { a++; if(a==9) a=0; P0=~(0XFF<<a); } void zhongduan2(void) interrupt 2 { if(a!=0) a--; P0=~(0XFF<<a); }

霞浦县13859494408: 51单片机中断编程 -
粱隶前列: 外部中断信号接到P3.3口,为INT0中断,程序如下#include<reg51.h> sbit X0=P1^0; //用X0表示P1.0 sbit X1=P1^1; //用X0表示P1.1 sbit X2=P1^2; //用X0表示P1.2 void main(void) { P1=0x00; //将P1口初始化位高电平,如果没有这句,初始...

霞浦县13859494408: 单片机 记时中断程序 -
粱隶前列: 8051在晶振11.0952MHz以上,用方式0无法实现50ms中断一次.下面是11.0592MHz时,工作在方式1的代码: #include "reg51.h"void initTimer(void) // 初始化定时器 {TMOD=0x11; //设置工作模式TH0=0x4c; // 定时器0初值高位TL0=0xf...

霞浦县13859494408: 单片机中断程序 -
粱隶前列: 前两行的意思是在0000H地址存入“跳转到MAIN”的指令,3、4行的意思是在中断入口地址存入“跳转到INT”的指令.单片机加电时,程序计数器PC的内容是0000H,即从0000H开始执行,也就是跳转到MAIN,执行主程序.在执行MAIN的程...

霞浦县13859494408: 51单片机中断程序C语言举例 -
粱隶前列: /****************************************************/ /*说明:多故障显示监控电路 */ /*硬件:AT89S52@12MHz */ /* P1控制输入与输出,或非门4002进行逻辑判断, */ /* 产生中断脉冲. */ /*作者:xxx */ /*时间:2011-08-19 */ /*备注:4个故障输入端X1-...

霞浦县13859494408: 单片机中断汇编程序 -
粱隶前列: 什么单片机都不写 一般进入中断,对累加器,PC,标志寄存器进行保存,51是堆栈处理,然后清中断IF标志...接下来是功能操作....完了以后进行累加器,PC,标志寄存器恢复,51是出栈处理

霞浦县13859494408: 单片机的中断程序 -
粱隶前列: =org 0000h jmp st org 000bh jmp itt0 org 0...

霞浦县13859494408: 请单片机高手帮写一个简单的中断程序 -
粱隶前列: #include <reg52.h> sbit LED=P0^0; void exint1Init(void) { EX1=1; IT1=1; EA=1; } void exint1_ISR(void) interrupt 2 { LED=~LED; } void main(void) { exint1Init(); while(1); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网