Red de conocimiento informático - Material del sitio web - Programación de la posición del sol

Programación de la posición del sol

* Con respecto a la determinación de la frecuencia y el ciclo de trabajo, para un oscilador de cristal de 6M, suponga que la frecuencia de salida PWM es de 1 khz, de esta manera, el ciclo de trabajo se puede configurar para que cambie de (1-100)%, es decir, 0,01; ms * 100 = 1 ms. Este ciclo es cronometrado por T1 y el nivel alto de salida es cronometrado por T1. *

# incluir & ltREGX51.

H & gt

#define uchar carácter sin firmar

#define V_TH1 0XFE

#define V_TL1 0X0C

#define V_TMOD 0X11< / p>

void init _ sys(void); /*Función de inicialización del sistema*/

Carbón sin firmar ZH ZL;

Administrador no válido (no válido)

{

init _ sys();

while(1)

{

Temporal int sin signo

int 16 zkb = 50;

Temporal=2^16-5*zkb;

ZH = temp/256;

ZL = temp % 256;

k();

}

}

Void init_sys(void) /*Función de inicialización del sistema*/

{

TMOD = TMOD; /*Inicialización del temporizador*/

TH0 = ZH

TL0 = ZL;

th 1 = V _ th 1;

TL 1 = V _ TL 1

tr 1 = 1

et 1 = 1 ;

ET0 = 1; /*Permitir interrupción T0

EA = 1; /*Interrupción de CPU

}

Nulo k( int16 vk, ik )

{ static int 16 prek;

pk = vk * ik

prek = 0;

vk = 0;

if(prvpk==pk)

{

Devolver;

}

Otros

{

if(PK & gt;preparatorio)

{ prek = pk

if(vk & gt;prevk)

{

ZK b++;

prevk = vk

prepk = pk

}

Otro

{

ZK B-;

prevk = vk

prepk = pk

}

}

Otro

{

if(vk & gt; prevk)

{

ZK b++;

prevk = vk

prepk = pk

}

Otro

{

ZK B-;

prevk = vk

prepk = pk

}

}

}

/*Función de interrupción*/

Temporizador no válido 0 (no válido) interrupción 1

{

P2_2 =! P2_2;

TR0 = 0;

}

Temporizador 1 no válido (no válido) interrupción 2

{

th 1 = V _ th 1; /*Restaurar el valor inicial del temporizador T0*/

TL 1 = V _ TL 1;

P2_2=! P2 _ 2;

TH0 = ZH; /*Restaurar el valor inicial del temporizador T0*/

TL0 = ZL;

TR0 = 1;

TR0 = 1;

p>

}