⑴ C语言中断正在执行的子程序
在子程序中用While(一个全局变量){这里执行子程序的操作} 要中断时把这个变量设为0, 则那个子程序就退出了. 这里假设你的子程序是个重复反复执行的操作.如果不是,那么你的需求本身就是错的做法你需要重新评估你的设计合理性.
⑵ VB如何实现子程序中断上一级调用程序
假设你的子程序是:
function mysub(a,b,c)
....
end function
调用时可以这样:
call mysub(m,n,p)
也可以这样:
mysub m,n,p
注意上面两种调用方法的区别:一个要括号,一个不能加括号。
⑶ c语言怎么编写单片机的中断
标准c语言没有中断调用机制,但是不同编译器都有相应的中断处理方式,可以使用户实现中断功能。
解决方案:
1、采取轮询的方式解决,就是每10毫秒检查一下是否有键盘请求,总的来说,这样基本上可以解决问题,而且简单易行,但每10毫秒都要检查,系统消耗太大。
2、采取中断的方式:
(1)用高级语言调用中断来处理问题。中断是cpu响应一个中断外围设备8259A的一个过程,当键盘敲击,cpu保存断点暂停执行并且跳到相应的中断处理程序继续执行,结束后根据断点再跳回来。通过这种方式可以轻松+愉快地解决这个问题。但是需要用到高级语言调用汇编,根据编译器的不同而有所差别。
(2)自己模拟中断。可以另外建立一个线程专门响应键盘的敲击,如果有敲击则打断主线程。这样做实现起来很复杂,而且涉及到不少复杂的关键技术,比如信号量之类的东西。
3、强大的vc
vc采取了消息映射的机制来处理外部设备的请求,比如时钟中断、键盘中断等等。通过此可以灰常灰常容易的处理外部中断。
⑷ 单片机的C语言中如何实现汇编中的中断程序,写哪里还有org这个伪指令可以在C中实现吗
如果是用C去写的话,像汇编一样,开中断就行了。位置一般就在MAIN 之前的。
//晶振频率22.1184MHz
#include<at89x52.h>
#define TIMER0H 0x4c
#define TIMER0L 0x00
#define TIMER0_RUN TR0=1
#define SECOND_OVERFLOW 40
#define SEG_PORT P0
#define DISPLAY_DIG1 P1&=0xf0;P1|=0x01
unsigned char g_CurrentDigit=0; //当前显示的数字
void timer() interrupt 1
{
static unsigned char s_Count = 0;
TH0 = TIMER0H; //重置定时器初值
TL0 = TIMER0L;
//每次进入中断服务程序,TH0和 TL0 的值都
TIMER0_RUN; //定时器运行,开始下一
if(s_Count != SECOND_OVERFLOW)
{ //未到整秒,把 sCount 值加1
s_Count++;
}
else
{ //到整秒,s_Count归 0,更新把当前显示
s_Count = 0;
if(g_CurrentDigit != 9)
{
g_CurrentDigit++;
}
else
{
g_CurrentDigit = 0;
}
}
return;
}
void Initial(void) //初始化
{
IE = 0x82; //仅允许Timer0 中断
TMOD = 0x01; //Timer0 使用工作方式 1(16位) ,定时器
TH0 = TIMER0H; //设置定时器初值
TL0 = TIMER0L;
TIMER0_RUN; //定时器开始运行
DISPLAY_DIG1;
}
void main()
{
unsigned char code SEG_CODE[]
= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
Initial();
while(1)
{
SEG_PORT = SEG_CODE[g_CurrentDigit]; //显示当前的数字
//当timer0溢出时,单片机响应 timer0 中断,调用 timer 函数,
//每40 次调用当前显示的数字加 1
}
}
程序分析:
程序中主程序做的事只是在死循环中反复显示当前的数字,每产生一次中断,程序就跳
转到中断服务函数 timer()中进行相应的更新。
这里中断服务函数 timer()有别于普通 C函数的地方是在声明中多了“interrupt 1” ,说明
这个函数是中断号为 1的中断服务函数。各个中断对应的中断号如表 3.8所示。
这个程序需要初始化的东西比较多, 我们把这些初始化语句都放在了初始化函数 Initial()
中,这也是程序初始化很常见的做法。我们还第一次用到了静态变量和全局变量。全局变量
是中断处理函数与外界程序进行参数传递的唯一途径,因此在单片机程序中全局变量的使
用频率要比普通的 C 语言程序高。尽管如此,由于全局变量的使用会影响程序的结构化,
所以在可以不使用全局变量的地方,还是要避免使用全局变量。在程序中,为了把全局变
量与静态变量跟普通变量区别开来,我们在变量前分别加了小写 g_和小写 s_以示区别。
IE 寄存器中的使能位和C中的中断号 中断源
0 外部中断0
1 定时器0溢出
2 外部中断1
3 定时器1溢出
4 串行口中断
5
定时器2溢出(仅在S52、
C52中有此中断源)
好了,以上是我找的一个实例,希望对你有帮助!
⑸ 51单片机如何调用两个不同的中断子程序
当然不可行了,中断服务程序是不能调用的,只能靠硬件触发。
你可以初始化时只开启第一个中断,在第一个中断服务程序里,开启第二个中断,这样还是可以的。
⑹ 编写中断子程序的基本规则
1.要注意中断程序的优先级。
2.中断子程序尽量短。不要把耗费资源的计算放在中断子程序中,除非是对时间要求非常敏感应用,如电机的FOC算法,才能在中断程序里面之行。
3. 各个中断程序中的处理不要相互冲突,中断是否能嵌套也要小心。
⑺ 51单片机 C语言 如何实现中断调用
你这个不是中断调用,只是一种模式选择。也就是按键1按下之后按照一种方式扫描显示灯,按键2按下之后按照另一种方式显示灯·············。很简单的。我习惯用switch case 结构,想想就解决了。
⑻ 子程序应放在程序中的什么位置中断子程序是如何调用的
子程序一般放在主程序后边,中断子程序由中断矢量决定,当有中断请求,满足中断条件就调用中断子程序
⑼ C语言中断正在执行的子程序
在子程序中用While(一个全局变量){这里执行子程序的操作}
要中断时把这个变量设为0,
则那个子程序就退出了.
这里假设你的子程序是个重复反复执行的操作.如果不是,那么你的需求本身就是错的做法你需要重新评估你的设计合理性.
⑽ 51单片机如何在主程序循环的时候通过按键进入中断子程序
只要在P3.2和P3.3脚外部有按键,而且按下是接地,那按下键就会引起外部中断0和外部中断1申请中断。在主程序初始化时,设置外部中断为下降沿触发,并开中断就行。