Étape 7: Émulation Code Routines
Maintenant le plaisir partie !J’ai besoin de l’imprimante à penser qu’il y a quatre cartouches d’encre installées, pour cela que nous avons besoin de mettre en œuvre certaines fonctions d’émulation d’abord. Nouveau de connaissance préalable, j’ai ai prédéfinies dans l’en-tête :
• #define epsnCartReady() (_ecRST)
• extern unsigned char espnCartGetAddr(void) ;
• extern void epsnCartOut (données unsigned char) ;
• extern unsigned char epsnCartIn (données unsigned char) ;
epsnCartReady est une macro permettant de vérifier si l’imprimante a TVD attachée haute.
epsnCartGetAddr renvoie l’adresse qui demande la tête d’impression.
epsnCartOut est utilisé pour envoyer des données vers le contrôleur hôte
epsnCartIn est utilisé pour recevoir les données de l’hôte quand il écrit
Alors cette fois, au lieu de contrôler la SCK pour aller en haut ou bas, nous avons besoin d’attendre pour qu’il puisse aller haut ou bas, mais si la réinitialisation est faible, alors tout arrêter et retourner :
unsigned char espnCartGetAddr(void) {} tandis que ((i<4) & & _ecRST) {/ / Loop alors que j’ai 4 < et RST est haute
char i = 0 ;
temp de char = 0 x 00 ;
Temp >> = 1 ; Temp de Shift de droite par un
while((!_ecSCK) & & (_ecRST)) ; Attendez que l’horloge pour aller haut
if(_ecSDA) {/ / uniquement si SDA est élevé
Temp | = 0 x 08 ; puis définir le bit 4e
}
while((_ecSCK) & & (_ecRST));// attendre l’horloge aller en bas
i ++ ; incrémenter le compteur
}
if(_ecRST == 0) {}
Retour à 0xFF ; //if RST est allé faible, signifie l’hôte tué le signal
}
Return temp ; retourner à l’adresse et le peu de lecture/écriture
}
Et la fonction Out :
void epsnCartOut (données unsigned char) {} _ecSDATRIS = 0 ; Définissez le SDA à la sortie tandis que ((i<8) & & _ecRST) {/ / Loop alors que j’ai 8 < et RST est élevé tandis que (_ecSCK & & _ecRST) ; Attendez la SCK aller en bas
char i = 0 ;
temp de char = données ;
_ecSDALat = 0 ; la valeur de SDA faible
tandis que (! _ecSCK & & _ecRST) ; Attendez que la SCK à aller haut
_ecSDALat = temp & 0 x 01 ; SDA haute ou basse selon le premier bit de la valeur
Temp >> = 1 ; Décalage vers la droite les données par un
i ++ ; incrémenter le compteur par un
}
_ecSDATRIS = 1 ; Set de SDA pour une sortie
_ecSDA = 1 ; pas sûr si cela est nécessaire
}
Et enfin la fonction In :
unsigned char epsnCartIn(void) {} tandis que ((i<8) & & _ecRST) {/ / Loop alors que j’ai 8 < et RST est élevé tandis que (_ecSCK & & _ecRST);// attendez le SCK aller en bas
unsigned char i = 0 ;
temp de char = 0 x 00 ;
Temp >> = 1 ; Décalage vers la droite le temp par un
tandis que (! _ecSCK & & _ecRST) ; Attendez la SCK aller haut
if(_ecSDA) {//only id SDA est élevé
Temp | = 0 x 80 ; Définir le bit 8
}
i ++ ; Incrémenter le compteur par un
}
Return temp ; ce que nous avons reçu de retour
}