#include
#define LED PC_ODR_ODR1
/******************************************************
PD3按键中断控制LED亮灭
******************************************************/
void GPIO_INIT()//端口初始化
{
//---------------------------LED---------------------
PC_DDR_DDR1=1;
PC_CR1_C11 =1;//LED推挽输出
//---------------------------SW----------------------
PD_CR1_C13 =1;//SW上拉输入
PD_CR2_C23 =1;//使能外部中断
}
void EXTI_INIT()//外部中断初始化
{
EXTI_CR1=0X80;//PD口下降沿触发中断
}
#pragma vector=0x08//GPIOD中断向量号是6,+2即可
__interrupt void EXTI_PD3()
{
LED=~LED;//让LED1状态与按键之前状态相反
}
void main()
{
GPIO_INIT();
EXTI_INIT();
asm("rim");//打开全局中断
while(1);
}
**********************************************************分割一下*******************************************************************
这里再提供一个程序,引入延时程序,有了时间概念,下一篇日志我们来写STM8S的时钟方面的程序,要用到STLINK
#include
#define LED PC_ODR_ODR1
/******************************************************
PD3按键中断控制LED亮灭,因为没有时钟初始化,STM8S上电默认的Fmaster=Fcpu是2MHz
一旦PD3按下,LED就开始闪烁
******************************************************/
void delay()//延时函数
{
unsigned int x,y;
for(x=0;x<300;x++)
for(y=0;y<400;y++);
}
void GPIO_INIT()//端口初始化
{
//---------------------------LED------------------------------
PC_DDR_DDR1=1;
PC_CR1_C11 =1;//LED推挽输出
//---------------------------SW-------------------------------
PD_CR1_C13 =1;//SW上拉输入
PD_CR2_C23 =1;//使能外部中断
}
void EXTI_INIT()//外部中断初始化
{
EXTI_CR1=0X80;//PD口下降沿触发中断
}
#pragma vector=0x08//GPIOD中断向量号是6,+2即可
__interrupt void EXTI_PD3()
{
while(!PD_IDR_IDR3);//判断是否按下
while(1)//如果按下了,则执行循环内程序,闪烁LED
{
LED=1;
delay();
LED=0;
delay();
}
}
void main()
{
GPIO_INIT();
EXTI_INIT();
asm("rim");//打开全局中断
while(1);
}
上一篇:STM8S208R8的第四个程序---外部晶振时钟源验证
下一篇:STM8S208R8的第二个程序---按键控制LED
推荐阅读最新更新时间:2024-03-16 15:15