Red de conocimiento informático - Problemas con los teléfonos móviles - Rutina del microcontrolador STM8: ¿Alguien tiene una rutina que haga que el LED se encienda y apague? Es SMT8S, lo mejor es traer instrucciones.

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>

//----------------------------gpio inicial

vacío GPIO_init(void)

{

PE_DDR=0X07

PE_CR1=0X07

PE_CR2=0X00; 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; }

}