请教傻孩子 AVR studio 中断函数如何加入模块
买了版主的书 呵呵 开始学习单片机以及模块化编程我现在想用attiny26用pwm控制电路并用模数转换监测电流大小
尝试
1.PWM相关的初始化和函数写入pwm.c和pwm.h
2.模数转换相关的写入 adc.c 和 adc.h
我用的环境是avr studio 和 avr gcc
到目前为止我只在main函数前调用了才达到我想要的效果,我想把中断函数也加入模块 而不是在main函数前调用
这个在.h文件里该如何设置呢?
//ADC.h
#define F_CPU 1000000UL
#include<avr/interrupt.h>
extern void ADC_PORT_INIT(void);
extern void ADC_IIT(void);
extern void ADC_DEVICE_INIT(void);
//ADC.c
#include "ADC.h"
void ADC_PORT_INIT(void){
//...
}
void ADC_INIT(void){
//...
}
ISR(ADC_vect){
//...
}
因为我也想像书里所说的那样 从外部只调用 ADC_DEVICE_INIT 如何把ISR加入下面的函数呢?
void ADC_DEVICE_INIT(void){
cli();
ADC_PORT_INIT();
ADC_INIT();
ISR();//???
sei();
}
还是有别的技巧?初学者问题 呵呵 多谢了! 我不明白?什么叫做 “ 如何把ISR加入下面的函数呢”
能说得更详细一些么? 类似的单独直接写在c文件里就可以了 类似的单独直接写在c文件里就可以了 类似的单独直接写在c文件里就可以了 多谢回复
不好意思
表达的不是很清楚
由于写的程序需要AD转换 我把所有和AD相关设置以及函数都写进 ADC.h 和ADC.c 里面
//ADC.c大致如下
#include "ADC.h"
void ADC_PORT_INIT(void){
//...
}
void ADC_INIT(void){
//...
}
ISR(ADC_vect){
//... 中断函数用来读取转换后数据的命令
}
把所有函数都集中在DEVICE函数中好方便调用
void ADC_DEVICE_INIT(void){
ADC_PORT_INIT();
ADC_INIT();
ISR();...// 调用中断函数 这也是我问题所在 中断函数是否可以这样调用
}
最后在主程序里面只调用 ADC_DEVICE_INIT 函数
我现在把中断函数直接放在main前面调用 程序运行没有问题 ISR();...// 调用中断函数 这也是我问题所在 中断函数是否可以这样调用
中断函数当有中断时自动调用,不用在函数中显式调用, 嗯……就是楼上的解释 多谢各位的回复!
现在自己看来问的有点笨了 呵呵
ISR在编译器预带的<avr/interrupt.h>里面被定义了 自然不用在写进DEVICE里调用了。。。。
不知道版主还有哪位使用过英飞凌的单片机? 英飞凌的单片机?没用过 呵呵
在这个网站学了不少 看了傻孩子的书也学了很多
我是学强电的 下个月底开始在英飞凌实习 做前期研发
很可能要用单片机控制电路 实在不行只好用atmel的了 ^^'
页:
[1]