打印

C语言中不轮询如何处理中断?

[复制链接]
3273|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a5566255|  楼主 | 2008-11-28 10:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
HWM| | 2008-11-28 11:01 | 只看该作者

有相应中断服务程序的具体写法,不同内核或编译器有自己

具体查看相应的技术手册。

使用特权

评论回复
板凳
孤星119| | 2008-11-28 11:22 | 只看该作者

跟汇编同理.比如:

void time0() interrupt 1 
{    
}

使用特权

评论回复
地板
a5566255|  楼主 | 2008-11-28 13:02 | 只看该作者

比如51单片机,

HWM大虾所指的技术手册是什么?AT89S52的芯片手册中有写C语言中断函数么?

#include
#include
sbit P1_0=P1^0;
void int1(void) interrupt 2
{
P1_0=!P1_0;
}
void main(void)
{
IT1=1;EX1=1;EA=1;
}
我这样写就行了么?
还是要在MAIN中用WHILE(1)轮询int1函数?


如果如我上面所写是对的,那过程是不是这样:
在MAIN中打开了中断开关,MCU侦测到中断就自动运行INTERRUPT过程(之前运行处的程序指针压入堆栈),执行完中断程序自动跳到原来运行的地方(不用我手动引导吧)?

使用特权

评论回复
5
HWM| | 2008-11-28 13:11 | 只看该作者

看Keil C51的相关文档(如果你是用C51的话)

使用特权

评论回复
6
a5566255|  楼主 | 2008-11-28 13:14 | 只看该作者

嗯,我C51只看了些简易入门教程。。。。

以为这些就可以了,。。。。。。

使用特权

评论回复
7
HWM| | 2008-11-28 13:24 | 只看该作者

Keil/C51/HLP文件夹内有一大堆,可以参考其中的C51帮助文档

使用特权

评论回复
8
耕在此行| | 2008-11-28 20:17 | 只看该作者

按楼主说的没错.

中断函数已经指明了中断入口地址(interrupt 2)
其它跳转什么的的编译器会自动处理.
另外中断函数要指明所使用的通用寄存器组.
不过没使用的话不需指明.

使用特权

评论回复
9
a5566255|  楼主 | 2008-11-28 20:34 | 只看该作者

哦,谢谢耕在此行大虾!

又省了不少我明天看书的时间了哈哈~~
“不过没使用的话不需指明”何意?我写这个函数自然是为了使用,那就一定要using XX(XX忘了怎么写了)?可我百度搜到一些例子都没加啊??

使用特权

评论回复
10
zq1987731| | 2008-11-28 21:07 | 只看该作者

51有4组R0~R7寄存器

平时一般使用第一组,也就是using 0:

    void int1(void) interrupt 2 using 0
    { 
        P1_0 = !P1_0;
    }

在中断里你觉得有必要就避开下using 1/2/3好了,这样不至于破坏第一组R0~R7寄存器中的值。
但如果你的中断程序仅仅只是在做这种事:P1_0=!P1_0; 和R0~R7一点关系都没有,还加个using X,不就是多此一举么?

使用特权

评论回复
11
a5566255|  楼主 | 2008-11-28 23:34 | 只看该作者

哦,明白了,我之前是误解大虾的意思了~~

行了,谢谢LS各位,这样就算学习C语言处理中断啦哈哈~~

使用特权

评论回复
12
xhtxzxw| | 2008-11-28 23:57 | 只看该作者

嘿嘿

你那个妹n()函数,执行完了就完了,一会又从头开始了!
初始化做完了以后,应该是一个死循环.不错,就是死,别怕,怕死不革命.呵呵

使用特权

评论回复
13
耕在此行| | 2008-11-29 08:23 | 只看该作者

呵呵 楼上看得仔细

使用特权

评论回复
14
mymystery| | 2008-12-3 13:14 | 只看该作者

目前也只知道用main轮询,不会用其他方法

使用特权

评论回复
15
weishg| | 2008-12-3 14:43 | 只看该作者

关于using的使用

好像中断程序如果不用using x另外指明寄存器组,那么keil c编译器会自动在中断函数前头作寄存器内容入栈等保护,返回前再出栈,如果用using x指明了另外的寄存器组,则在中断函数中编译器就不用作入栈出栈保护了,而且using x所用的寄存器组不能和当前已经使用过的出现冲突,否则程序流程处理不当可能会出现运行失误等情况

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

218

帖子

1

粉丝