void interrupt ISR()
{
if(T0IF==1)
{
T0IF = 0; //清中断标志
。。。。。。。
}
if(RAIF==1)
{
RAIF=0;
RA0=RA0;
start_flag=1;
}
if(INTF==1)
{
INTF=0;
。。。。用于接受红外线的外中断,解码
}
void main
{
while(1)
{
.....用于控制调光等 50HZ
}
}
问题就是每次接收到遥控器的信号,按键时灯会灭一下,我想是外中断引起的,但是RAIF电平中断和计数中断没有影响啊,这是为什么呢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
(原文件名:883INT.JPG)
这个PIC16F887的中断源里面没有RAIF。想必是个更低档次的型号了?
RA0=RA0;
start_flag=1;
这两句,RA0若是按键中断源,则TRISA0就该是1,也就是输入态。前句因此不能有效果。
后一句,这个标志为1会引起什么来就要lz自己分析了。
可控硅调光的灯,该是白炽灯吧?能够感觉到灯灭,那中断的时间一般不止一两个正弦周期。可能是连续几个半波都没有触发信号。请先将人工按键的中断临时取消,用一个缓慢的周期来逐渐调亮调暗灯光,再用按键响应来控制一个led(PWM方式)。这两样都正常就说明软件没有问题,要查硬件了。
中断的排列次序跟找到中断源需要的时间有关,越排列前面,搜索时间越少。因此要把人工按键的中断向后排。
我有过类似经历。编译器若是“LITE”版或者“X谐”版,代码略多一点就开始出现各种奇怪的现象。我的对策是,换平台。通常这个16F630要换到16F883。
代码就先不看了,请尽可能多进行注释。这主要是为了你自己。设想过3年,回来再看代码的感觉吧。
-----------------------------------------------------------------------
晕 单片机不能换 单位指定的 因为有库存 是676的其实一个片子 容量1k好像再多些点都下不下了 日
我曾经很小心地一个一个timer增加外设,然后测试630/616等。总会有意想不到的效果出现。只好放弃。哦,若直接用汇编写,我玩过616,还是很灵光的。
一周热门 更多>