第一步:外部中断说明
我们可以看见stm8不是每个引脚都有外部中断功能,但是还是很多脚都可以设置为外部中断,这个使用起来还是很方便的,就像stm32那样,果然是一个厂家的东西。
再看stm8数据手册里面的引脚说明,也可以看出引脚的功能。
所以在使用时还是要注意。以后遇见了不要说我没说(⊙o⊙)哦。
关于PD7(TLI)引脚也要注意:
● TLI最高等级的硬件中断
当在特定的 I/O边沿检测到在相应的TLI输入时将产生硬件中断。
注意: 在TLI中断服务子程序中禁止使用TRAP指令。
这些是用来设置哪组端口具有外部中断功能。
下面我们在回到GPIO部分。
我设置的是,中断上拉输入。
第二步:具体实现
void Key_Init(void)
{
/*PD0设置为上拉输入*/
PD_DDR|=0x00; //输入
PD_CR1|=0x01; //上拉输入
PD_CR2|=0x01; //使能外部中断
asm("sim"); // 关全局中断
EXTI_CR1 |= 0x80; //开启PD口,下降沿触发
asm("rim"); // 开全局中断
}
int main( void )
{
System_Init();
Gpio_Init();
Key_Init();
while (1);
}<p style="font-family: 宋体;">#pragma vector=0x08</p><p style="font-family: 宋体;">__interrupt void EXTI_PD0(void)</p><p style="font-family: 宋体;">{</p><p style="font-family: 宋体;"> PE_ODR^=0x20;</p><p style="font-family: 宋体;">}</p>
关于函数Gpio_Init(),请看这一讲:《stm8 点亮第一个LED》
编译后下载调试,按下PD0口的按键后,看见PE5口的LED灯熄灭或是点亮。
好了,至此外部中断介绍完了。