Al programar un microcontrolador en lenguaje C, ¿por qué las variables de la función principal deben definirse como variables globales?
Si una variable se define como variable global o local depende del rol de la variable en el programa, como el siguiente programa:
#include REGX52. hgt;
unsigned int int_count=0;
unsigned char count=0;
unsigned char second=0;
unsigned char seg[]={ 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x40};
carácter sin firmar seg1[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x98};
Delay_1s() //subrutina de retraso de 500 m
{unsigned char l, i, n
<; p> para (l=50; lgt; 0; l--)para (i=20; igt; 0; i--)
para (n=248; ngt; 0 ;n--);
}
void t0(void) interrumpir 1 usando 0
{int_count ;
if(int_count ==4000)
{ int_count=0
segundo=1
}
}
void principal (void)
{TMOD=0x02
TH0=0x06
TL0=0x06;
TR0; =1;
ET0=1;
EA=1
mientras(1)
{
if( segundo)
{
segundo=0
P0=seg1[cuenta]
cuenta
if(countgt;=10)
count=0;
}
}
}
El temporizador genera 0 a 9, cambiando una vez cada segundo. Int_count y second son variables globales. Esto se debe a que int_count es la estadística del número de interrupciones. Necesita que el valor permanezca sin cambios después de completar las interrupciones una tras otra. se define como una variable local, si no ocurre una interrupción, aumenta en uno y vuelve a ser 0 cuando finaliza la interrupción, por lo que se define como una variable global para que su valor continúe aumentando de acuerdo con el número de interrumpe. Y debido a que el segundo es el subíndice de la matriz mostrada por el tubo digital, si se define como una variable local, al final de cada llamada de función, el valor de la variable de liberación de memoria desaparecerá, lo que no cumplirá con el requisito de salida. números diferentes cada segundo. ,
En términos generales, si el valor de una variable será utilizado por otras funciones o expresiones después de que se complete la llamada a la función, se define como una variable global.