************************************************************************** *** ** *** convertisseur Hexa >> ASCCI sur LCD ** *** d'un mot dans la pile b *** qualibrage pour convertisseur CAN ** ************************************************************************** ** ** exple Ph ; 0 < Ph < 14 **si val =256 >> Ph = 14 ** si val = 0 >> Ph = 0 ** si Ph = 131 >> Ph = 131*14/256 = 7.31 PORTB equ $1004 PORTA equ $1000 *instructions DDRA equ $1001 Reste1 rmb 1 * dizaine de seocnde Reste2 rmb 1 * dizaine de seocnde Quot1 rmb 1 * varible pour recuperer position du curseur Memoire rmb 1 org $FE00 * start of EEPROM ******************************************************* *Configuration port ******************************************************* ldaa #$FF staa DDRA *port A en sortie ******************************************************* ***initialisation LCD*** ******************************************************* Init ldaa #$F2 * E=0 , RW=1 , RS=0 sur PORTA bsr delay enter ldaa #%00000110 *0000 0110 : deplacement afficheur droite bsr fonc * (#$06) Curse ldaa #%00001100 *0000 1100 : D=1 afficheur alumé bsr fonc * C=0 *sans curseur * B=0 sans clignotement (#$0C) Bus ldaa #%00111000 *0011 1000 : BUS 8 bits (#$38) bsr fonc home ldaa #%00000001 *0000 0001 : place curseur position HOME bsr fonc * (#$01) jmp Deb ******************************************************* ****Délai avant instruction suivante*** delay staa PORTA ldaa #$01 dedans ldy #$2FFF dedans2 dey *tempo wait instruction 115ms bne dedans2 *21.5ms deca * bne dedans rts ****envoi instruction port B : RS au niveau bas*** fonc staa PORTB *instruction sur PORTB ldaa #$F0 * E=0 RW=0 RS=0 * RS en mode instruction bsr delay ldaa #$F4 * E=1 RW=0 RS=0 * en front montant >> validation bsr delay ldaa #$F0 * E=0 RW=0 RS=0 bsr delay rts gotoxy oraa #$80 * evalue busy avant d'envoyer valeur portB bsr fonc rts ***envoi caractere sur port B :RS au niveau haut*** char stab PORTB ldaa #$11 *E=0,R/W=0,RS=1 * RS en mode données bsr delay ldaa #$15 *E=1,RW=0,RS=1 *E en front montant >> validation bsr delay ldaa #$11 *E=0,RW=0,RS=1 * Reinit E bsr delay rts ******************************************************* *Message bienvenue : ******************************************************* **positionne message 1ere ligne : Deb ldaa #$00 bsr gotoxy ldx #M4 *charge Message bcl5 ldab 0,x * lit 1ere valeur pointeur #unite beq fin * si fin de chaine ( valeur /) : stop bsr char *..sinon affiche le caractere inx bra bcl5 * boucle affichage des sceondes fin **Postionne ecran: Centaine ldaa #$43 *1ere ligne 6eme position68 bsr gotoxy ldab #$3E * ">" bsr char ******************************************************* *Convertisseur ******************************************************* Main ldab #51 *VAL =100 ldaa #14 mul * VAL * 14 >> 1400 ldx #255 idiv * (VAL * 14 ) / 256 stab Reste1 * Reste = 120 ok ici xgdx stab Memoire * affiche partie entiere bsr Dizaine ldab #$2c * "," bsr char ldab #100 ldaa Reste1 * Reste = 120 mul * 100 * 120 = 12000 ldx #255 idiv * 1200 / 256 Num2 = 46 stab Memoire bsr Dizaine ldab #$3c * "<" bsr char bsr Fin Dizaine * 75 / 10 X1=7 R1=5 * 7 / 10 X2=0 R2=7 * X2 R2 R1 = 0 7 5 clra ldab Memoire ldx #10 *10 idiv * d(=valeur) / x(=10) Quotient >>X Reste>>D * B=Reste1 X=Quotient1 addb #$30 * ajoute 30 pour ASCCI stab Reste1 * affiche Reste1 xgdx *Passe X(=Quotient1) dans B ldx #10 * 7/10 idiv *d(=Quotient1) / x(=10) Quotient >>X Reste>>D addb #$30 * ajoute 30 au Reste2 stab Reste2 *affiche Reste2 xgdx *Passe X(=Quotient2) dans B addb #$30 *Ajoute 30 pour ASCCI stab Quot1 *Affiche Quotient2 ***Affichage *bsr char ldab Reste2 bsr char ldab Reste1 bsr char *bra Fin rts Fin stop ******************************************************* *position du curseur sur l'ecran LCD M4 fcc "CONVERT: PH>DEC ",0 m_5 fcb %00000000 end