************************************************************************** *** GESTION DE LINTERRUPTION POUR LIRE LE CLAVIER ET AFFICHER SUR lcd *** ** *** echo binaire de la touche pressée sur port F pour LED *** *** cavalier IRQ en place !!! *** *** affiche touches de 0 a 9, space, saut de ligne !! *** *** LCD 4 lignes : affichage sur ligne 2,3,4 *** *** Message fixe sur ligne 1 *** ************************************************************************** **voir pour lire port en entree et afficher valeur sur LCD **voir integrer inteeruption mot sur port a lire !! PORTB equ $1004 PORTA equ $1000 *instructions DDRA equ $1001 PORTE equ $100A PORTC equ $1003 PORTF equ $1005 IRQ1 equ $00EE IRQ2 equ $00EF IRQ3 equ $00F0 Reste1 rmb 1 * touceh convertie en decimal a afficher Memoire rmb 1 * stock valeur du clavier Ligne rmb 1 * quelle ligne de l'ecran ? Caractere rmb 1 * quel position sur la ligne ? org $FE00 * start of EEPROM cli ******************************************************* *Configuration IRQ ******************************************************* ldaa #$7E * opcode de JMP staa IRQ1 * interrupt vector-1=JMP opcode ldx #irq * ISR de IRQ# : ldx irq (opcode de jmp)-> stx IRQ2 * interrupt vector ******************************************************* *Configuration port + initialisation variable ******************************************************* 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 ******************************************************* Ligne2 ldaa #$40 *2ere ligne 1eme position bsr gotoxy ldaa #$03 *positionne variable sur ligne 3 staa Ligne rts Ligne3 ldaa #$10 *3ere ligne 1eme position bsr gotoxy ldaa #$04 *positionne variable sur ligne 4 staa Ligne rts Ligne4 ldaa #$50 *4ere ligne 1eme position bsr gotoxy ldaa #$02 *positionne variable sur ligne 2 staa Ligne rts Position ldaa #$FF staa PORTF ldaa #$00 staa Caractere * reinit position sur la ligne ldaa Ligne cmpa #$02 beq Ligne2 cmpa #$03 beq Ligne3 cmpa #$04 beq Ligne4 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 ldaa Caractere * stock position du caractere sur la ligne adda #$01 staa Caractere cmpa #$10 * si 16 eme caractere de la ligne beq Position rts ****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 ******************************************************* *Programme principal *** ******************************************************* **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 ******************************************************* ***Position des caracteres a afficher *** ******************************************************* ldaa #$40 *2ere ligne 1eme position bsr gotoxy ldaa #$00 staa Caractere * Init position caractere sur ligne ldaa #$03 staa Ligne * on init la variable Ligne pour se positioner sur la * 3eme ligne au prochain saut de ligne !! ******************************************************* ***En attente de l'Interruption *** ******************************************************* boucle bra boucle ******************************************************* ***affichage sans conversion si Interruption *** ******************************************************* SLig bsr Position bsr wait rti Space bsr char bsr wait rti ******************************************************* ***affichage Touce si Interruption *** ******************************************************* Main 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 ldab Reste1 * affiche dernier caractere bsr char bsr wait rti ******************************************************* ** Boucle anti rebond !!! wait pshy ldy #$FFFF wait1 dey bne wait1 puly rts ******************************************************* ***Interruption CLAVIER *** ******************************************************* irq ldab PORTE stab PORTF cmpb #%00000000 beq table0 cmpb #%00100000 beq table1 cmpb #%00000010 beq table2 cmpb #%00100010 beq table3 cmpb #%00000001 beq table4 cmpb #%00100001 beq table5 cmpb #%00000011 beq table6 cmpb #%00100011 beq table7 cmpb #%00010000 beq table8 cmpb #%00110000 beq table9 cmpb #%00010010 beq tableE cmpb #%00110010 beq tableS Retour stab Memoire bra Main rti Blanc bra Space rti Suite bra SLig rti ******************************************************* ***Conversion CLAVIER *** ******************************************************* table0 ldab #%00000000 bra Retour table1 ldab #%00000001 bra Retour table2 ldab #%00000010 bra Retour table3 ldab #%00000011 bra Retour table4 ldab #%00000100 bra Retour table5 ldab #%00000101 bra Retour table6 ldab #%00000110 bra Retour table7 ldab #%00000111 bra Retour table8 ldab #%00001000 bra Retour table9 ldab #%00001001 bra Retour tableE ldaa #%00000000 * blanc envoi direct sur accu A pour le char !!!! bra Blanc tableS ldaa #%00000000 bra Suite rts ******************************************************* *Message bienvenue : ******************************************************* M4 fcc "AFFICHE CLAVIER",0 m_5 fcb %00000000 end