INT2,3,4 只支持下降沿
记得还有中断优先级可以配置,
在stc8g1k08A里面这样写识别不出来
要写INTCLKO = 0x10;
也不可以像EX1那样直接 EX1=1;
可以让程序在中断里面执行,这样的好处就是可以不占用主循环.
#include "stc8g.h"
#include "intrins.h"
#define MAIN_Fosc 11059200UL
typedef unsigned char u8;
typedef unsigned int u16;
void delayms(u16 ms);
void INT2_Isr() interrupt 10
{
while(1)
{
P33=0;delayms(500);
P33=1;delayms(500);
}
}
int main ()
{
P0M0 = 0x00; P0M1 = 0x00;
P1M0 = 0x00; P1M1 = 0x00;
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
P4M0 = 0x00; P4M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x00;
P6M0 = 0x00; P6M1 = 0x00;
P7M0 = 0x00; P7M1 = 0x00;
INTCLKO=0x10;
AUXINTIF=0x10;
IE2=0x04;
EA=1;
while(1);
}
void delayms(u16 ms)
{
u16 i;
do{
i = MAIN_Fosc /10000;
while(--i);
}while(--ms);
}
一直以为keil里面的大括号可以随便敲
现在搞懂了.把{}放整齐点,可以方便找到相应的程序位置.
C语言基本的语句,必须学明白,不然单片机不好学
C语言运算表达.一定要学明白.
vb2002 发表于 2024-7-11 23:07
可以让程序在中断里面执行,这样的好处就是可以不占用主循环.
我可以很负责任的告诉你,你掉坑里了
初学者易犯的错:
中断处理程序执行时间过长!
在此期间其它比此更低级是中断都将无法响应,被执行!
为什么尽量在单片机中断函数中不要使用延时?
通常在中断子程序中是不调用延时子程序的,这样会增加中断处理时间,如果有其它低级中断了,就会延误响应中断了。
所以,中断子程序中不要写调用延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回,如果中断一次有很多任务需要执行完全,可以在中断子程序中设置一个标志位,在主程序中查这个标志位,当标志为1时,就在主程序中完成这些任务,这样就不会影响其它中断源的中断,也不会使中断产生混乱。
angmall 发表于 2024-7-15 17:00
我可以很负责任的告诉你,你掉坑里了
初学者易犯的错:
芭比Q了.
真掉坑里面了.
我记住您的说的重点.重点,标志位.我见很多大神程序里面都强调标志位.
{中断子程序中不要写调用延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回,如果中断一次有很多任务需要执行完全,可以在中断子程序中设置一个标志位,在主程序中查这个标志位,当标志为1时,就在主程序中完成这些任务,这样就不会影响其它中断源的中断,也不会使中断产生混乱。}
页:
1
[2]