************************************************************************** *** 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 ADCTL equ $30 OPTION equ $1039 ADR1 equ $1031 PORTE equ $100A BASE equ 5 NBRE equ $00FF Reste1 rmb 1 * dizaine de seocnde Reste2 rmb 1 * dizaine de seocnde Quot1 rmb 1 * varible pour recuperer position du curseur Memoire rmb 1 Num rmb 1 Deno 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 * 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) ******************************************************* *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 Suite * si fin de chaine ( valeur /) : stop bsr char *..sinon affiche le caractere inx bra bcl5 * boucle affichage des sceondes Suite jmp Can ******************************************************* ****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 ******************************************************* *CAN: ******************************************************* **Postionne affichage conversion sur écran: Can ldaa #$45 *1ere ligne 6eme position68 bsr gotoxy ***Début conversion CAN: ldaa #%10011000 * Power up A/D with clock delay staa OPTION * OPTION ldaa #%00000000 * single scan, multi-mode, pins e0-3 ldx #$1000 staa ADCTL,x * write starts conversion ADCTL Convert brclr ADCTL,x,#$80 Convert *wait end conversion ADCTL ldab ADR1 * get value from pin E0, E1, E2, or E3 ADR1 stab PORTB * store it to PORTB jsr Main Retour nop bra Can * boucle ******************************************************* *Convertisseur ******************************************************* ***Calcul de conversion: Main * ldab #139 *valeur a convertir =255 ldaa #BASE *echelle de conversion (ph=14...) mul * VAL * 14 = res ldx #256 idiv * (VAL * 14 ) / 255 * X=Quot AB=Res1 pshx * X dans la pile ldaa #100 mul * 100 * Res1 * AB=Res2 ldx #256 idiv * Res2 / 255 * X=Quot3 AB=Res3 pula pulb ***envoi valeur ASCCI du resultat: Affiche pshx * recup Quot1 dans B clra ldx #10 * 10 idiv * X=Quot AB=Res xgdx * Quot dans AB ***affichage Dizaine: addb #$30 * >> ASCII bsr char * vers LCD xgdx * Res dans AB ***affichage unité: addb #$30 * >> ASCII bsr char * vers LCD pula * recup Res3 pulb * ldx #10 * idiv * X=Quot AB=Res xgdx * Quot dans AB stab Reste1 * stock dans variable ***affichage ",": ldab #$2C * "," bsr char ***affichage Dizieme: ldab Reste1 * recup Quot addb #$30 * ASCII bsr char * vers LCD xgdx * recup Res dans AB ***affichage centieme addb #$30 * conversion ASCII bsr char * vers LCD ***affichage ">": ldab #%01010110 * "V" bsr char jmp Retour ***Fin Fin stop ******************************************************* *position du curseur sur l'ecran LCD M4 fcc "CAN: 7E 5V ",0 m_5 fcb %00000000 end