干嘛我的中断要等delay执行完了才能中断,更换模式?
按P32 更改闪烁模式但是如果case 1执行中,不能中断,需要等case 1执行完了,才能响应
#include "stc8h.h"
#include "intrins.h"
#define MAIN_Fosc 11059200UL
typedef unsigned char u8;typedef unsigned int u16;
void delayms(u16 ms);
volatile u8 state = 0;
void shan1(void);
void shan2(void);
void shan3(void);
void shan4(void);
void main()
{
P_SW2=0x80;
P3M0 = 0x00; P3M1 = 0x00;
P5M0 = 0x00; P5M1 = 0xef;
EX0=1;IE1=1;
INTCLKO|=0x40; //EX4=1; 允许INT4外部中断
EA=1; //打开总中断
while(1)
{
switch(state)
{
case 0:P33=1; break;
case 1:shan1(); break;
case 2:shan2(); break;
case 3:shan3(); break;
case 4:shan4(); break;
default:break;
}
}
}
void INT0_Isr(void) interrupt 0
{
delayms(10);
if(INT0==0)
{
state++;
if(state>4)
state=0;
INT0=1;
}
}
void shan1(void)
{
P33=0;
delayms(200);
P33=1;
delayms(200);
P33=0;
delayms(200);
P33=1;
delayms(200);
P33=0;
delayms(200);
P33=1;
delayms(1000);
P33=0;
delayms(1000);
P33=1;
delayms(1000);
P33=0;
delayms(1000);
P33=1;
delayms(1000);
P33=0;
delayms(1000);
P33=1;
delayms(1000);
P33=0;
delayms(200);
P33=1;
delayms(200);
P33=0;
delayms(200);
P33=1;
delayms(200);
P33=0;
delayms(200);
P33=1;
delayms(2000);
}
void shan2(void)
{
P33=0;
delayms(1000);
P33=1;
delayms(1000);
}
void shan3(void)
{
P33=0;
delayms(1);
P33=1;
delayms(1000);
}
void shan4(void)
{
P33=0;
delayms(1);
P33=1;
delayms(3000);
}
void delayms(u16 ms)
{
u16 i;
do{
i = MAIN_Fosc /10000;
while(--i);
}while(--ms);
}
void INT4_Isr(void) interrupt 16
{
IAP_CONTR=0x60;
}
wnagming 发表于 2024-7-27 20:56
if(INT0==0)
和
INT0=1;
不对吗?
if(INT0==0)
状态标志++
INT0=1;
确保中断服务程序中中断标志位 INT0 被正确清除。这通常是通过将标志位置为 1 来实现的。 delayms函数存在中断重入,中断内外不能调用同一个函数
DebugLab 发表于 2024-7-27 21:09
delayms函数存在中断重入,中断内外不能调用同一个函数
刚按您的说法,我百度了一下
递归重入c语言延时函数多任务程序设计中的函数重入问题按照Keil的规范对函数添加关键字“reentrant”,将函数定义为可重入的 void Delay_MS(x) reentrant
好像这样可以解决!
我试试 wnagming 发表于 2024-7-27 21:16
你用的哪款芯片,我没有找到INT0
stc8h1k08 wnagming 发表于 2024-7-27 21:37
我明白了,你这个INT0是表示P3^2口,设置输入模式上拉就好了,不用写INT0 = 1; ...
楼下大佬已经解答了 中断内外不能调用同一个函数,还真不知道。{:4_167:} soma 发表于 2024-7-27 21:47
中断内外不能调用同一个函数,还真不知道。
看来我的折腾还是有点用处了.
到处排雷..
中断就是要快进快出
在中断里加延时是什么天才想法?
想消抖可以参考这贴子我7楼的回答
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=8615 Lkck8210 发表于 2024-7-27 22:42
中断就是要快进快出
在中断里加延时是什么天才想法?
想消抖可以参考这贴子我7楼的回答
看到了,
参照您的方法我试试
我那个延迟中不进中断不是消抖的问题
页:
[1]
2