Red de conocimiento informático - Consumibles informáticos - ¡Puntuación alta! Se busca urgentemente el programa de interrupción externa del microcontrolador 89C51. Hay tres fuentes de interrupción externas que controlan la salida de 3 puertos IO. Escrito en lenguaje C. Chat en línea en cualquier momento

¡Puntuación alta! Se busca urgentemente el programa de interrupción externa del microcontrolador 89C51. Hay tres fuentes de interrupción externas que controlan la salida de 3 puertos IO. Escrito en lenguaje C. Chat en línea en cualquier momento

//El siguiente procedimiento es básicamente correcto. El tiempo de ancho de pulso restante lo puede completar usted mismo.

#include

#define uchar unsigned char

#define uint unsigned int

sbit P00 = P0^ 0;

sbit P01 = P0^1;

sbit P02 = P0^2;

sbit k_1 = P3^0; //Primera entrada

sbit k_1 = P3^0; p>

uchar t_10ms, k3;

//------------------------------- - ---------

DL_x_10ms(uchar x)

{

t_10ms = 0;

TH0 = ( 65536 - 10000) / 256;

TL0 = (65536 - 10000) % 256; //Sincronización 10ms@12MHz

TR0 = 1; //Iniciar temporización.

while(t_10ms < x); //Menos de x*10ms, espera en el lugar.

TR0 = 0; //Tiempo de cierre.

}

//-------------------------------

void main(void)

{

TMOD = 01; //Modo de temporización T0 1

TH0 = (65536 - 10000) / 256;

TL0 = (65536 - 10000) % 256; //Tiempo 10ms@12MHz

TR0 = 0; //Aún no iniciado.

ET0 = 1;

IT0 = 1;

IT1 = 1;

EX0 = 0;

EX1 = 0;

EA = 1;

k3 = 1;

mientras(1) { //

//------------- -----------------------

while((k_1 == 1) || (k3 == 0)); K1 no está presionado o K3 aún no ha ejecutado la espera en el lugar.

//K1 se presiona una vez y la ejecución continúa.

while(k_1 == 0); / Espere a que se suelte K1.

k3 = 0; //Si se presiona K1 dos, tres veces... en el futuro, no se ejecutará.

/ /Ingrese la primera interrupción, el puerto P0.0 genera un nivel bajo, el puerto P0.1 genera un nivel alto y el puerto P0.0 genera un nivel alto después de un retraso de 1.5S.

.

P00 = 0; P01 = 1;

DL_x_10ms(150);

P00 = 1;

EX0 = 1; //Abrir interrupción INT0 (K2)

//Pasa al frente y espera (se presiona K1 y K3=1)

}

}

//-------------------------------

T0_INT() interrupción 1

{

TH0 = (65536 - 10000) / 256;

TL0 = (65536 - 10000) % 256; Temporización 10ms@12MHz

t_10ms++;

}

//-------------------- ------------------

X0_INT() interrupción 0 //K2 flanco descendente de entrada, ingresará a esta función

{

//Ingrese la segunda interrupción, después de un retraso de 1.11S, el puerto P0.2 genera un nivel bajo y luego.

DL_x_10ms(111);

P02 = 0; //El puerto P0.2 genera un nivel bajo

//¿Cuánto tiempo lleva generar un nivel bajo? El título no se menciona.

//------------------------

//Alta 0,15S,

P02 = 1; //La salida del puerto P0.2 es alta.

DL_x_10ms(15);

//------------ ---- -----

//Bajo 0.3S,

P02 = 0; //El puerto P0.2 emite un nivel bajo.

DL_x_10ms(30 );

//El tiempo a continuación puede ser escrito por usted mismo

//Alto 0.3S,

//Bajo 0.58S,

>Alta 0.12S,

//Baja 1.08S,

//Alta 2.55S,

//Baja 0.47S,

//Alto 0.075S, niveles altos y bajos muchas veces. .

EX0 = 0;

EX1 = 1; //Abrir interrupción INT1(K3)

}

//-- ------------------------------------

X1_INT() interrupción 2

{

//Al ingresar a la tercera interrupción, el puerto P0.1 genera un nivel bajo. .

P01 = 0;

EX1 = 0;

k3 = 1; //=1, será útil en la función principal

}

//------------------------------------- ---