Paso 7: Rutinas de emulación de código
Ahora la diversión parte!Necesito la impresora para que pienses que hay cuatro cartuchos de tinta instalados, para ello que debemos implementar algunas funciones de emulación primero. Otra vez de conocimientos he predefinidos en la cabecera:
• #define epsnCartReady() (_ecRST)
externo • unsigned char espnCartGetAddr(void);
• extern void epsnCartOut (datos unsigned char);
externo • unsigned char epsnCartIn (datos unsigned char);
epsnCartReady es una macro que utiliza Compruebe si la impresora tiene primer alto.
epsnCartGetAddr devuelve la dirección que está solicitando a la cabeza de impresión.
epsnCartOut se utiliza para enviar datos a la controladora de Host
epsnCartIn se utiliza para recibir datos desde el Host cuando está escribiendo
Así que esta vez, en lugar de controlar el SCK a alta o baja, tenemos que esperar a ir alto o bajo, pero si baja el reset, luego parar todo y volver:
unsigned char espnCartGetAddr(void) {} mientras que ((i<4) & & _ecRST) {/ / bucle mientras < 4 y RST es alta
char i = 0;
char temp = 0 x 00;
Temp >> = 1; Derecho de cambio de temperatura por una
while((!_ecSCK) & & (_ecRST)); Espere a que el reloj ir alta
if(_ecSDA) {/ / si SDA es alta
Temp | = 0x08; continuación, establezca el bit 4
}
while((_ecSCK) & & (_ecRST)) ;// esperando el reloj ir bajo
i ++; incrementar el contador
}
if(_ecRST == 0) {}
volver a 0xFF; //if primero fue baja, mataron a medios del Host la señal
}
devolver a temp; la dirección y el bit de lectura/escritura
}
Y la función:
{} void epsnCartOut (datos char sin signo) _ecSDATRIS = 0; conjunto la SDA a la salida mientras que ((i<8) & & _ecRST) {/ / bucle mientras < 8 y RST es alta mientras que (_ecSCK & & _ecRST); Espere SCK ir bajo
char i = 0;
char temp = datos;
_ecSDALat = 0; sistema SDA baja
mientras (! _ecSCK & & _ecRST); Espere SCK ir alta
_ecSDALat = temp & 0 x 01; Sistema SDA alta o baja según el primer bit
Temp >> = 1; Cambio derecha los datos por una
i ++; incrementar el contador en uno
}
_ecSDATRIS = 1; Sistema SDA a una salida
_ecSDA = 1; no estoy seguro si esto es necesario
}
Y por último la función en:
unsigned char epsnCartIn(void) {} mientras que ((i<8) & & _ecRST) {/ / bucle mientras < 8 y RST es alta mientras que (_ecSCK & & _ecRST) ;// espere SCK ir bajo
unsigned char i = 0;
char temp = 0 x 00;
Temp >> = 1; Cambio derecha la temp por uno
mientras (! _ecSCK & & _ecRST); Espere SCK ir alto
if(_ecSDA) {//only id SDA es alta
Temp | = 0 x 80; Establezca el bit 8
}
i ++; Incrementar el contador en uno
}
devolver a temp; devolver lo que hemos recibido
}