******************************************************* ******* CHRONOMETRE HEURE - MIN - SEC SUR LCD ******** ******************************************************* *DONNES SUR PORT B sur $04 *INSTRUCTION SUR PORT A sur $00 * RS->A0 * RW->A1 * E>A2 *NOTE RS=0 ->Instruction RS=1 ->Data * RW=0 ->W RW=1 ->R * E=0 ->Invalide E=1 ->Afficheur actif * pour adapter le branchement du LCD : modifier * §fonc §fonc1 §char et §char1 pour le bus de donnée LCD (8 bits) * §DELAY , §DELAY1 pour le bus de priorité. (RS RW E) **Initialisation variable port*** PORTB equ $1004 *donnes PORTA equ $1000 *instructions PORTC equ $1003 *instructions PORTF equ $1005 *instructions DDRA equ $1001 DDRC equ $1007 ** variable : indS10 rmb 2 * dizaine de seocnde indM01 rmb 2 * minute indM10 rmb 2 * dizaine de minute indH01 rmb 2 * heure indH10 rmb 2 * dizaine d'heure org $Fe00 * positionnement EEPROM lds #$0150 *pile ldaa #$FF staa DDRA *port A en sortie *------------------------------------ ***initialisation LCD*** Init ldaa #$F2 * E=0 , RW=1 , RS=0 sur PORTA bsr delay1 enter ldaa #%00000110 *0000 0110 : deplacement afficheur droite bsr fonc1 * (#$06) Curse ldaa #%00001100 *0000 1100 : D=1 afficheur alumé bsr fonc1 * C=0 *sans curseur * B=0 sans clignotement (#$0C) Bus ldaa #%00111000 *0011 1000 : BUS 8 bits (#$38) bsr fonc1 jsr Aff_Point ***routine : initialisation LCD*** fonc1 staa PORTB *instruction sur PORTB ldaa #$F0 * E=0 RW=0 RS=0 * RS en mode instruction bsr delay1 ldaa #$F4 * E=1 RW=0 RS=0 * E : en front montant >> validation bsr delay1 ldaa #$F0 * E=0 RW=0 RS=0 * reinit position bsr delay1 rts ***Délai avant instruction suivante*** ***Ne pas modifier sinon LCD HS*** delay1 staa PORTA ldaa #$01 dedans1 ldx #$2FFF dedans21 dex *tempo wait instruction 115ms bne dedans21 *21.5ms deca * bne dedans1 rts *------------------------------------ * affiche constante sur ecran LCD : *------------------------------------ *affiche Message bienvenue : Aff_Mess ldy #Mess *charge chaine seconde a afficher ldaa #$42 *positionne sur afficheur LCd :2eme ligne caractere 4B bsr gotoxy1 *buzy a tester ldaa 0,y * lit 1ere valeur pointeur #unite beq Aff_Point * si fin de chaine ( valeur zero) : alors retour sec10 bsr char1 *..sinon affiche le caractere iny * passe au caractere suivant bra Aff_Mess * boucle affichage des sceondes *affiche les ":" : Aff_Point ldaa #$46 bsr gotoxy1 ldaa #%00111010 *":" bsr char1 ldaa #$49 bsr gotoxy1 ldaa #%00111010 *":" bsr char1 ldaa #$44 bsr gotoxy1 ldaa #%00110000 *"dizaine d'heure a "0" .. pour tricher !!! bsr char1 jsr init ***routine : affichage constantes sur LCD*** gotoxy1 oraa #$80 * evalue busy avant d'envoyer valeur portB bsr fonc1 rts char1 staa PORTB ***envoi caractere sur port B :RS au niveau haut ldaa #$11 *E=0,R/W=0,RS=1 * RS en mode données bsr delay1 ldaa #$15 *E=1,RW=0,RS=1 *E en front montant >> validation bsr delay1 ldaa #$11 *E=0,RW=0,RS=1 * Reinit E bsr delay1 rts *------------------------------------ * HORLOGE *------------------------------------ *--dizaine d'Heure: .. a faire ... init clr indH01 *--Heure: ldy #heure sty indH01 heu01 ldaa #$45 bsr gotoxy1 ldy indH01 ldaa 0,y beq init * recommence le chrono : bsr char1 iny sty indH01 *--fin heure clr indM10 *--Dizaine minute : ldy #dizaine sty indM10 min10 ldaa #$47 bsr gotoxy ldy indM10 ldaa 0,y beq heu01 * heure +1 bsr char iny sty indM10 *--fin dizaine minute clr indM01 *--minute : ldy #unite sty indM01 min01 ldaa #$48 bsr gotoxy ldy indM01 ldaa 0,y beq min10 * dizaine min +1 bsr char iny sty indM01 *--fin minute clr indS10 *--dizaine seconde: ldy #dizaine sty indS10 sec10 ldaa #$4A bsr gotoxy ldy indS10 ldaa 0,y beq min01 * min +1 bsr char iny sty indS10 *--fin dizaine seconde *--seconde: ldy #unite *charge chaine seconde a afficher sec01 ldaa #$4B *positionne sur afficheur LCd :2eme ligne caractere 4B bsr gotoxy *buzy a tester ldaa 0,y * lit 1ere valeur pointeur #unite beq sec10 * si fin de chaine ( valeur zero) : alors retour sec10 bsr char *..sinon affiche le caractere bsr tempo * tempo 1 seconde iny * passe au caractere suivant bra sec01 * boucle affichage des sceondes *--fin seconde *------------------------------------ * FIN HORLOGE *------------------------------------ *------------------------------------------ * affichage caractere ou insctruction LCD *------------------------------------------- ***Délai avant instruction suivante*** ***Ne pas modifier sinon LCD HS*** delay staa PORTA ldaa #$01 dedans ldx #$2FFF dedans2 dex *tempo wait instruction 115ms bne dedans2 *21.5ms deca bne dedans rts gotoxy oraa #$80 * evalue busy avant d'envoyer valeur portB bsr fonc rts ***envoi instruction sur 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 ***envoi caractere sur port B :RS au niveau haut*** char staa 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 *------------------------------------ *------------------------------------ *** temporisation 1seconde *10 tempo ldaa #01 * Chargement de la valeur permettant de faire une tempo de 0,1s *33333 t1s ldx #11111 *tempo basée sur le nombre de boucle à effectuer t100ms dex bne t100ms * fin de la boucle de 100ms * décomptage du nombre de boucle deca bne t1s rts *------------------------------------ unite fcb %00110000,%00110001,%00110010,%00110011,%00110100,%00110101,%00110110,%00110111,%00111000,%00111001,%00000000 dizaine fcb %00110000,%00110001,%00110010,%00110011,%00110100,%00110101,%00000000 heure fcb %00110000,%00110001,%00110010,%00000000 Mess fcb $48,$65,$6c,$6c,$6f,$20,$57,$6f,$72,$6c,$64,$00 end *------------------------------------