Rutina del microcontrolador STM8: ¿Alguien tiene una rutina que haga que el LED se encienda y apague? Es SMT8S, lo mejor es traer instrucciones.
El temporizador 2 de stm8 usa interrupción de desbordamiento para lograr 1 s, el LED parpadea una vez
#include lt;iostm8s207s8.hgt;
#include lt;intrinsics.hgt;
typedef unsigned char U8;
typedef unsigned int U16;
typedef unsigned long U32;
U16 cnt=0; p>
p>
//----------------------------gpio inicial
vacío GPIO_init(void)
{
PE_DDR=0X07
PE_CR1=0X07
PE_CR2=0X00; p>} p>
//--------------------------clk inicial
void CLK_init( void)
{
CLK_ECKR |=0X1; //Enciende el reloj externo
while(!(CLK_ECKRamp;0X2)); el reloj externo rdy
CLK_CKDIVR amp; = 0XF9; //CPU dividido por 2
CLK_SWR = 0XB4; //Seleccione el reloj externo
while(!( CLK_SWCRamp; 0X8)); //Aquí hay que esperar
CLK_SWCR |=0X2; //Habilitar reloj externo
}
//---- --------- ----------------TIMER2 init
void TIM2_init()
{
TIM2_PSCR |=0X04; / /DIV16 1.333333US -gt; Oscilador de cristal externo 12mhz
TIM2_IER |= 0X01; //UIE permite interrupción
TIM2_ARRH = 0X1d
p>TIM2_ARRL = 0X4c;
// TIM2_EGR |=0X01; //UG habilitado
TIM2_CR1 |= 0X85; //APPE, URS, CEN habilitado
}
//------------------------------ ----FUNCIÓN
//-------------------dispositivo inicial
void DEVICE_init(void)
{
CLK_init()
GPIO_init()
TIM2_init()
}
;void delay_nms(unsigned int n)
{
unsigned int i;
for(;ngt;0;n--)
{
for(i=0;ilt;8000;i);
}
}
//----------------------------------interrumpir
//#define TIM2_OVR_UIF_vector 0x0F Interrupción de desbordamiento de temporización 2 Interrupción de desbordamiento de 10 ms
#pragma vector = TIM2_OVR_UIF_vector
__interrupt void TIM2_OVR_Hander(void)
{
TIM2_SR1 amp;=~0x01;//Borrar bandera
cnt;
}
//--- - ---------------main
void main(void)
{
__disable_interrupt();
p>DISPOSITIVO_init();
__enable_interrupt();
mientras(1)
{
si(cnt) = =100)
{
cnt=0;
PE_ODR^=0X01; }
}