关于单片机C语言的问题
请问像下面程序(简陋了点,明白意思就行),中断发生后,是不是马上进入中断函数?中断函数完了。返回主函数的哪个地方?什么时候才运行a(),b(),c()函数?直到运行完c(...
请问像下面程序(简陋了点,明白意思就行),中断发生后,是不是马上进入中断函数?中断函数完了。返回主函数的哪个地方?什么时候才运行a(),b(),c()函数?直到运行完c()时又跑回a()?a(),b(),c()如何影响中断过程?..........程序是怎么单步运行的??一直搞不清,谁能一步步说一下?
void main()
{...
...
...//已包含中断所需的条件
EA=1;//中断打开
ET0=1;
ET1=1;
while(1)
{
a( );
b( );
c( );
}
} 展开
void main()
{...
...
...//已包含中断所需的条件
EA=1;//中断打开
ET0=1;
ET1=1;
while(1)
{
a( );
b( );
c( );
}
} 展开
5个回答
展开全部
1:你的示例中没有中断服务程序;
2:中断发生后,如果当时没有其它同级或更高级的中断服务程序在执行,会马上停在正在执行的主程序,并记住这个位置,然后进入中断函数(当然CPU还要做些必要的处理,如压栈等操作);
3:中断函数完后,程序会返回当初停止的那个位置,继续往下执行;
4:示例中,当程序开始运行后,先按main() 中语句顺序执行,进入while(1)循环后,会循环执行a(),b(),c()函数(同你的理解一样)。
5:a(),b(),c()函数同主程序一样,不会影响中断服务程序的执行,除非里面包含有影响中断的语句,例如开关中断等;
6:程序是按语句顺序一句一句连续执行的,所谓单步运行状态,是通过开发系统中的监控程序和硬件的帮助,让用户程序运行一条指令就停止,目的是便于调试。实际在用户系统中运行的程序是没有“单步运行”这个状态的。
2:中断发生后,如果当时没有其它同级或更高级的中断服务程序在执行,会马上停在正在执行的主程序,并记住这个位置,然后进入中断函数(当然CPU还要做些必要的处理,如压栈等操作);
3:中断函数完后,程序会返回当初停止的那个位置,继续往下执行;
4:示例中,当程序开始运行后,先按main() 中语句顺序执行,进入while(1)循环后,会循环执行a(),b(),c()函数(同你的理解一样)。
5:a(),b(),c()函数同主程序一样,不会影响中断服务程序的执行,除非里面包含有影响中断的语句,例如开关中断等;
6:程序是按语句顺序一句一句连续执行的,所谓单步运行状态,是通过开发系统中的监控程序和硬件的帮助,让用户程序运行一条指令就停止,目的是便于调试。实际在用户系统中运行的程序是没有“单步运行”这个状态的。
展开全部
只要满足中断的条件,中断就发生,单片机就进入中断了程序,中断程序完成后,就回到它原先中断的地方,继续执行主程序,while(1)这个是一无限循环,a\b\c应该是三个子程序,依次循环执行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这是定时器0的计数溢出中断,但没看到RT0和RT1不知道什么时候开始计数的。
假设在while(1)前已经置位了RT0和RT1,程序就一直执行a(),b(),c()。当定时器计数溢出时,就进入了相应的中断程序。比如刚执行到b()中的语句b++就发生中断,那就单片机在执行完这句语句后,执行中断程序,中断执行完后,再从b()中b++以后的一条语句开始执行。
假设在while(1)前已经置位了RT0和RT1,程序就一直执行a(),b(),c()。当定时器计数溢出时,就进入了相应的中断程序。比如刚执行到b()中的语句b++就发生中断,那就单片机在执行完这句语句后,执行中断程序,中断执行完后,再从b()中b++以后的一条语句开始执行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
还是去学学汇编语言吧。
C语言是脱离硬件的,非要和中断过程联系起来解释,那就麻烦死了。
C语言是脱离硬件的,非要和中断过程联系起来解释,那就麻烦死了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的问题真多啊 呵呵
1.中断发生后,一般都是直接调用中断函数的,除非你的硬件有中断优先排队
2.中断函数结束后返回到调用中断函数的位置,但你是单片机的编程,可能有硬中断产生,所以要看你的主程序和中断程序是怎么写的
3.你上面那个程序我有点迷茫,应该是硬中断,比如某个芯片某个脚电平为高时产生,好像键盘中断一样。如果我猜的是对的话,那么这段程序就是“硬件条件”(比如高电平是很么的)满足时就产生中断,也就始终循环你ABC三个函数,直到硬件条件不满足为止。
4.在硬件条件满足时,C函数调用结束后继续A函数。
5.你的ABC三个函数就是在中断处理程序,所以要看你怎么写那就会产生你想要的效果了,比如这个要是一个键盘程序的话,就可以用A函数处理键盘按下,用B函数显示,用C函数处理组合键什么的,全看你的程序怎么写。
6.至于程序怎么单步执行,那是你的调试器的功能,跟程序没有关系。
能说的就这么多吧!记得要给我分啊!全手打很辛苦。。。。嘿嘿
1.中断发生后,一般都是直接调用中断函数的,除非你的硬件有中断优先排队
2.中断函数结束后返回到调用中断函数的位置,但你是单片机的编程,可能有硬中断产生,所以要看你的主程序和中断程序是怎么写的
3.你上面那个程序我有点迷茫,应该是硬中断,比如某个芯片某个脚电平为高时产生,好像键盘中断一样。如果我猜的是对的话,那么这段程序就是“硬件条件”(比如高电平是很么的)满足时就产生中断,也就始终循环你ABC三个函数,直到硬件条件不满足为止。
4.在硬件条件满足时,C函数调用结束后继续A函数。
5.你的ABC三个函数就是在中断处理程序,所以要看你怎么写那就会产生你想要的效果了,比如这个要是一个键盘程序的话,就可以用A函数处理键盘按下,用B函数显示,用C函数处理组合键什么的,全看你的程序怎么写。
6.至于程序怎么单步执行,那是你的调试器的功能,跟程序没有关系。
能说的就这么多吧!记得要给我分啊!全手打很辛苦。。。。嘿嘿
追问
你说的那个:ABC三个函数是中断处理函数??那前面如果有一个void PWM(void) interrupt 1using 1,它不也是中断处理函数吗?它们什么关系啊,中断时ABC和PWM一起运行?中断结束了又到哪啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询