Problème de programation d'un PIC16F877a avec un LCD 2*16 en mode 8 Bits

Messages postés
4
Date d'inscription
mardi 24 mars 2009
Statut
Membre
Dernière intervention
30 mai 2009
- - Dernière réponse : pont
Messages postés
197
Date d'inscription
samedi 2 mai 2009
Statut
Membre
Dernière intervention
16 novembre 2010
- 30 mai 2009 à 09:48
Bonjours à tous, je réalise actuellement mon projet de BTS Système
électronique et j'ai comme qui dirai un souci au niveau de mon
programme en source assembleur. Mon objectif étant, d'écrire Bienvenue
au lycee Baggio sur un afficheur LCD 2*16 en mode 8 bits avec un
PIC16F877a et un quartz de 4 Mhz. Je vous laisse regarder mon programme
en ésperant que vous trouverez d'ou vien le problème. Pour ce qui est
du câblage entre le PIC et le LCD tout est indiqué au début du
programme. Je vous remercis d'avance et bon courage .

;*****************************************************************************************************
;                                                                                                       *
;                                  Test LCD sur un 16F877A - 4 Mhz                                         *
;                                                                                                     *
;*****************************************************************************************************
;                                                                                                    *
;                                Files required: p16F877a.inc                                         *
;                                                                                                      *
;*****************************************************************************************************

    list      p=16F877a                      ;list directive to define processor
    #include                      ;processor specific variable definitions

    CBLOCK 0x020
    LECTURE : 1
    ECRITURE : 1
    ENDC

    __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC 
;Pas de code protege, pas de watch hdog timer, delai de demarrage, horloge HS.

;  Brochage du PIC sur la carte :
;
;  Port | Broche | E/S | Nom             | Description
;  RA2  |    4   |  S  | E               | Sortie broche Enable du LCD
;  RA1  |    3   |  S  | R/W             | Sortie Broche Read/write du LCD
;  RA0  |    2   |  S  | RS                 | Sortie Broche RS du LCD
;  RD0  |    19  |  S  | D0                 | Sortie bit 0 du LCD
;  RD1  |    20  |  S  | D1                 | Sortie bit 1 du LCD
;  RD2  |    21  |  S  | D2              | Sortie bit 2 du LCD
;  RD3  |    22  |  S  | D3              | Sortie bit 3 du LCD
;  RD4  |    27  |  S  | D4              | Sortie bit 4 du LCD
;  RD5  |    28  |  S  | D5              | Sortie bit 5 du LCD
;  RD6  |    29  |  S  | D6                | Sortie bit 6 du LCD
;  RD7  |    30  |  S  | D7                 | Sortie bit 7 du LCD

;*****************************************************************************************************
;                                                                                                     *
;                                             Constantes                                              *
;                                                                                                    *                                                                   
;*****************************************************************************************************

LCD_DATA                                    ; LCD: Port ou est branche le bus de donnee ( bits 0 à 7 )
LCD_E                                        ; LCD: Ligne de commande de controle de l'afficheur
LCD_RW                                        ; LCD: Ligne de Lecture/Ecriture de l'afficheur
LCD_RS                                        ; LCD: Ligne de selection de l'afficheur

;*****************************************************************************************************
;                                                                                                    *
;                                            Variables                                                 *
;                                                                                                     *
;*****************************************************************************************************

;***** Variable de temporisation
tempo50micro    EQU    0x20                    ;Variable tempo 50 µs
tempo10ms        EQU    0x21                    ;Variable tempo 10 ms
tempo1s            EQU    0x22                    ;Variable tempo 1s

;***** LCD Var
LCD_TEMP        EQU    0x23                    ;Variable temporaire pour le LCD

LCD_l0    macro    A
   
    movlw    A
    iorlw    B'10000000'
    call    LCD_send
    endm

LCD_l1    macro    A
   
    movlw    A
    iorlw    B'11000000'
    call    LCD_send
    endm

;********************************************************************************************** DEBUT
        ORG     0x000                       ;processor reset vector
          GOTO    main                           ;go to beginning of program

;****************************************************************************************************
;                                                                                                    *
;                                            Programme Main                                           *
;                                                                                                    *
;****************************************************************************************************

main
    ;initialisation des ports

    movlw    B'00000101'                        ;Write, RS a 1, Enable a 1
    movwf    LECTURE           

    movlw    B'00000100'                        ;Write, RS a 0, Enable a 1
    movwf    ECRITURE

    bcf        STATUS,RP0                        ;pointer en BANK0
    bcf        STATUS,RP1                       

    clrf    PORTD                            ;mettre les futures sorties à l'état bas
    clrf    PORTA

    bsf        STATUS,RP0                        ;pointer en BANK1
    clrf    PORTD                            ;PORTD en sortie
    clrf    PORTA                            ;PORTB en sortie
    bcf        STATUS,RP0                        ;pointer en BANK0
    nop                                        ;un peu de temps laisser au PIC
                                   
    ;initialisation du LCD

    movlw    B'00111100'                        ;0 0 1 DL N F x x : DL=0(4ports)/1(8ports), N=0(1ligne)/1(2lignes), F=font
    call    LCD_send

    movlw    B'00001110'                        ;0 0 0 0 1 D C B : D=Display=1(on)/0(off) C=curseur B=blinking
    call    LCD_send

    movlw    B'00000001'                        ;effacer l'écran et retour du curseur à la position 0
    call    LCD_send

    movlw    B'00000110'                        ;0 0 0 0 0 1 1/D S : 1/D=(1)incrémente le curseur après écriture S=(1)display is shifted
    call    LCD_send

boucle

    LCD_l0    D'2'                    ;pointer au caractère 2 de la première ligne

    movlw    "B"                                ;écrire "B"
    call    LCD_sendRS

    movlw    "i"                       
    call    LCD_sendRS

    movlw    "e"                       
    call    LCD_sendRS

    movlw    "n"                       
    call    LCD_sendRS

    movlw    "v"                       
    call    LCD_sendRS

    movlw    "e"                       
    call    LCD_sendRS

    movlw    "n"                       
    call    LCD_sendRS

    movlw    "u"                       
    call    LCD_sendRS

    movlw    "e"                       
    call    LCD_sendRS

    movlw    " "                       
    call    LCD_sendRS

    movlw    "a"                       
    call    LCD_sendRS

    movlw    "u"                       
    call    LCD_sendRS

    CALL    Wait1s           

    LCD_l1    D'2'                    ;pointer au caractère 3 de la deuxieme ligne

    movlw    "l"                                ;écrire "l"           
    call    LCD_sendRS

    movlw    "y"                       
    call    LCD_sendRS

    movlw    "c"                       
    call    LCD_sendRS

    movlw    "e"                       
    call    LCD_sendRS

    movlw    "e"                       
    call    LCD_sendRS

    movlw    " "                       
    call    LCD_sendRS

    movlw    "B"                       
    call    LCD_sendRS

    movlw    "a"                       
    call    LCD_sendRS

    movlw    "g"                       
    call    LCD_sendRS

    movlw    "g"                       
    call    LCD_sendRS

    movlw    "i"                       
    call    LCD_sendRS

    movlw    "o"                       
    call    LCD_sendRS

    CALL    Wait1s

    GOTO    boucle                            ;boucle

;*****************************************************************************************************
;                                                                                                     *
;                                          Les pauses a 4Mhz                                             *
;                                                                                                     *
;*****************************************************************************************************

;***** Attente de 1 s (exactement 1.00204 s)
Wait1s
        MOVLW    D'99'                        ;    99 fois
        MOVWF    tempo1s                        ;stockage dans la variable tempo1s
T1sboucle    CALL    Wait10ms
        DECFSZ    tempo1s,1                    ;décremente et test
        GOTO    T1sboucle                    ;on boucle tant que <>0 
        RETURN

;***** Attente de 15 ms (exactement 14.99 ms)
Wait15ms
        MOVLW    D'149'                        ;    149 fois
        MOVWF    tempo10ms                    ;stockage dans la variable tempo10ms
T15msboucle    CALL    Wait100micros
        DECFSZ    tempo10ms,1                    ;décremente et test
        GOTO    T15msboucle                    ;on boucle tant que <>0
        RETURN

;***** Attente de 10 ms (exactement 10.02 ms)
Wait10ms
        MOVLW    D'198'                        ;    198 fois
        MOVWF    tempo10ms                    ;stockage dans la variable tempo10ms
T10msboucle    CALL    Wait50micros
        DECFSZ    tempo10ms,1                    ;décremente et test
        GOTO    T10msboucle                    ;on boucle tant que <>0
        RETURN

;***** Attente de 1.5 ms (exactement ? ms)
Wait1.5ms
        MOVLW    D'29'                        ;    29 fois
        MOVWF    tempo10ms                    ;stockage dans la variable tempo10ms
T1.5msboucle    CALL    Wait50micros
        DECFSZ    tempo10ms,1                    ;décremente et test
        GOTO    T1.5msboucle                ;on boucle tant que <>0
        RETURN

;***** Attente de 100 µs (exactement, en comptant le temps d'appel)
Wait100micros   
        MOVLW    D'165'                        ;    165 fois
        MOVWF    tempo50micro                ;stockage dans la variable tempo50µ
T100microsboucle    DECFSZ    tempo50micro,1    ;décremente et test
        GOTO    T100microsboucle            ;on boucle tant que <>0  0.2*3=0.6 µs en tout
        RETURN

;***** Attente de 50 µs (exactement, en comptant le temps d'appel)
Wait50micros    NOP
        NOP
        MOVLW    D'81'                        ;    81 fois
        MOVWF    tempo50micro                ;stockage dans la variable tempo50µ
T50microsboucle    DECFSZ    tempo50micro,1        ;décremente et test
        GOTO    T50microsboucle                ;on boucle tant que <>0  0.2*3=0.6 µs en tout
        RETURN

;***** Attente de 1 µs (exactement, en comptant le temps d'appel)
Wait1micros        NOP
        RETURN

;ce programme émet un octet avec RS=0
LCD_send

    movf    LECTURE, PORTA                    ;Write, RS a 1, Enable a 1           
    movwf    LCD_DATA                        ;Copie W sur le bus DATA
    clrf    LCD_E                            ;Enable a 0
     CALL    Wait50micros
    return

;ce programme émet un octet avec RS=1
LCD_sendRS
   
    movf    ECRITURE, PORTA                     ;Write, RS a 0, Enable a 1
    movwf    LCD_DATA                        ;Copie W sur le bus DATA
    clrf    LCD_E                            ;Enable a 0
     CALL    Wait50micros
    return

    END                                       ;directive 'end of program'
Afficher la suite 

8 réponses

Messages postés
197
Date d'inscription
samedi 2 mai 2009
Statut
Membre
Dernière intervention
16 novembre 2010
1
0
Merci
Bonjour Ultimate,
J'ai passé ton programme à la moulinette, MPLAB 8.30 actuel, qui l'a trouvé bon, bien construit. Seules deux restrictions (des Warning) en 271 et 280, c'est d'ailleurs la même, il estime que tu as mis un argument hors de la gamme. PORTA est n octer, je suis donc remonté aux déclarations et les 2 variables destinées à le recevoir sont à un octet aussi, donc je ne vois rien de répréhensible, peut-être voudrait-il que ce soit déclaré autrement?


Que se passe-t-il exactement aux essais? La carte est-elle bien vérifiée au point de vue qu'elle aurait déjà marché dans le même genre de programme? C'est très délicat de ne pouvoir s'appuyer sur rien de sûr, et as-tu un ICD2 ou un REAL ICE? Sans outils on ne peut rien faire, mais l'assemblage étant bon, le gros morceau est acquis, il faut passer au débugage, sur l'application même, comme tu dois en avoir l'habitude, dans ton cours, en BTS tu n'es pas un débutant. C'est en seconde qu'on débute, juste après la rentrée, on est au 3e trimestre, que se passe-t-il?
Cordialement - pont










Il suffit de passer le pont.
Commenter la réponse de pont
Messages postés
197
Date d'inscription
samedi 2 mai 2009
Statut
Membre
Dernière intervention
16 novembre 2010
1
0
Merci
Dis-donc, il semble me revenir un souvenir: le lycée Baggio, ce n'est pas à Lille? Il faut deux g, tu ne connais même pas le nom de ton lycée, c'est grave. Et programmation il faut 2 m, comme dans maman Pont


Il suffit de passer le pont.
Commenter la réponse de pont
Messages postés
4
Date d'inscription
mardi 24 mars 2009
Statut
Membre
Dernière intervention
30 mai 2009
0
Merci
Bonjours pont, tout d'abord je tien a te remercier de porter attention a mon poste car j'en ai grand besoin, sinon pour programmation il y a bien deux  m j'ai fait une faute de frappe j'en suis dsl. Sinon oui le lycée Baggio se situe bien a Lille et j'ai vérifié j'ai belle et bien mis deux g mais la n'est pas le problème ^^. Alors en se qui concerne mon programme je suis d'accord avec toi il n'y a aucune erreur a déclarer via MPLAB et c'est bien la mon problème car j'ai justement les outils nécessaire au lycée pour la programmation je suis déja passé en débugage avec ICD2, tout se lance parfaitement, le programme se met correctement sur le PIC il n'y a aucun problème de ce coté la, si ce n'est que rien ne s'affiche au niveau de l'afficheur. En se qui concerne la carte c'est moi même qui l'ai réalisé. J'ai fait tout les test possible à l'aide d'un oscilloscope pour valider de son bon fonctionnement, tout marche parfaitement ( le contraste, le réglage automatqiue de la luminosité via une photo résistance etc ...) d'ou mon appel à l'aide car ma carte fonctionne parfaitement. A mon avis le problème provient de l'innitialisation du lcd au début du programme, c'est pour cela que j'ai posté sur ce forum car je ne trouve pas d'ou provient le problème.
Commenter la réponse de UltimateXion
Messages postés
197
Date d'inscription
samedi 2 mai 2009
Statut
Membre
Dernière intervention
16 novembre 2010
1
0
Merci
Bonjour Ultimate,

Cela arrive à tout le monde, que tout marche, et au résultat ça ne marche pas quand même, pour un petit truc de rien du tout.
Puisque tu as une ICD2 (le "camembert sacré") en te mettant en mode pas à pas, tu dois bien voir exactement si ta routine envoie bien l'octet du caractère, au besoin avec un stylo testeur que tu mets sur une ligne de données du LCD,juste au moment où le pas envoie le caractère, ou l'oscillo, mais le stylo est plus visible.
S'il ne passe rien, il faut revoir la routine, s'il passe quelque chose, mettre un autre LCD, car on ne peut rien contrôler dedans, pourtant en général ça marche. Tu es tout seul à avoir ce boulot à faire, et pas de prof près de toi pour t'aider? Normalement tu es à ras de réussir, surtout que ton programme tu l'as fait simple et clair, pas de structure de tableau.
pont



Il suffit de passer le pont.
Commenter la réponse de pont
Messages postés
4
Date d'inscription
mardi 24 mars 2009
Statut
Membre
Dernière intervention
30 mai 2009
0
Merci
Bonjours pont, je viens justement de terminer mes écrit, je vais pouvoir consacrer tout le temps qu'il me reste pour terminer se programme avant mon oral, qui se trouve être dans un peu plus de 2 semaines =). Pour ce qui est des tests en mode pas à pas je vais pouvoir les réaliser demain, les profs viennent exclusivement nous ouvrir la salle pour que l'on puissent continuer de bosser alors qu'ils devrait déjà être en vacance,s ce qui est très sympa de leur part. Donc voila je vois tout cela demain, dès que j'ai du nouveau je te tien au courant. Encore merci, à bientôt.
Commenter la réponse de UltimateXion
Messages postés
197
Date d'inscription
samedi 2 mai 2009
Statut
Membre
Dernière intervention
16 novembre 2010
1
0
Merci
Bonsoir,

Les vacances des profs, cela ne doit pas te tracasser, un prof doit aider ses élèves, surtout que tu as fait le programme,auquel je ne vois rien à reprocher, sans certifier que c'est parfait car il faudrait que je puisse l'essayer sur une carte à PIC, que je n'ai pas actuellement, je suis justement en phase de m'équiper dans ce sens et j'attends un courrier de composants. Mais je compte bien examiner ce genre de problème avec des PICs. Je voudrais juste te témoigner d'une idée: Ce serait, pour vérifier ta carte de façon absolue, comme tu es à Lille, tu peux sauter chez Selectronic achète deux bargraphes verts page 4-12 à 2,4e pièce. Ne mets pas plus de 5mA par LED, pour éviter de surcharger le PIC qui totalise les courants, sinon il faut des transistors, ou des ULN2803.
le LCD a 14 broches.
Aussi, rassure-moi, je n'ai pas vu où tu mets la donnée à envoyer dans la variable ECRITURE !
pont


Il suffit de passer le pont.
Commenter la réponse de pont
Messages postés
4
Date d'inscription
mardi 24 mars 2009
Statut
Membre
Dernière intervention
30 mai 2009
0
Merci
C 'est bon j'ai bossé pas mal dessus sa marche enfin voici mon programme terminé.

;*****************************************************************************************************
;                                                                                                       *
;                                  Test du LCD sur un PIC16F877A - 4 Mhz                                 *
;                                                                                                     *
;*****************************************************************************************************

    list      p=16F877A                                   ;list directive to define processor
    #include                                  ;processor specific variable definitions

    CBLOCK 0x020
    tempo50micro :1                                            ;Variable tempo 50 µs
    tempo10ms     :1                                         ;Variable tempo 10 ms
    tempo1s      :1                                         ;Variable tempo 1s
    ENDC

    __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC  ;Pas de code protege, pas de watch hdog timer
                                                         ;delai de demarrage, horloge HS

;*****************************************************************************************************
;                                                                                                    *
;                                   Brochage du PIC sur le LCD                                        *
;                                                                                                      *
;*****************************************************************************************************
 
;  Port | Broche | E/S | Nom             | Description
;  RA2  |    4   |  S  | E               | Sortie broche Enable du LCD
;  RA1  |    3   |  S  | R/W             | Sortie Broche Read/write du LCD
;  RA0  |    2   |  S  | RS                 | Sortie Broche RS du LCD
;  RD0  |    19  |  S  | D0                 | Sortie bit 0 du LCD
;  RD1  |    20  |  S  | D1                 | Sortie bit 1 du LCD
;  RD2  |    21  |  S  | D2              | Sortie bit 2 du LCD
;  RD3  |    22  |  S  | D3              | Sortie bit 3 du LCD
;  RD4  |    27  |  S  | D4              | Sortie bit 4 du LCD
;  RD5  |    28  |  S  | D5              | Sortie bit 5 du LCD
;  RD6  |    29  |  S  | D6                | Sortie bit 6 du LCD
;  RD7  |    30  |  S  | D7                 | Sortie bit 7 du LCD

;********************************************************************************************** DEBUT
   
        ORG     0x000                       ;processor reset vector
          GOTO    main                           ;go to beginning of program
        nop
        nop
        nop
        nop

;****************************************************************************************************
;                                                                                                    *
;                                            Programme Main                                           *
;                                                                                                    *
;****************************************************************************************************

main
    ;initialisation des ports

    bcf        STATUS,RP0                        ;pointer en BANK0
    bcf        STATUS,RP1                       

    clrf    PORTD                            ;mettre les futures sorties à l'état bas
    clrf    PORTA

    bsf        STATUS,RP0                        ;pointer en BANK1

    clrf    TRISD                            ;PORTD en sortie
    clrf    TRISA                            ;PORTA en sortie

    movlw    0x06
    movwf    ADCON1

    bcf        STATUS,RP0                        ;pointer en BANK0
    nop                                        ;un peu de temps laisser au PIC
                                   
    ;initialisation du LCD

    call     Wait10ms

    movlw     B'00110000'
    call    LCD_com

    call     Wait10ms

    movlw     B'00110000'
    call     LCD_com

    call     Wait10ms

    movlw     B'00110000'
    call     LCD_com

    movlw    B'00111100'                        ;0 0 1 DL N F x x : DL=0(4ports)/1(8ports), N=0(1ligne)/1(2lignes), F=font
    call    LCD_com

    movlw    B'00001100'                        ;0 0 0 0 1 D C B : D=Display=1(on)/0(off) C=curseur B=blinking
    call    LCD_com

    movlw    B'00000001'                        ;effacer l'écran et retour du curseur à la position 0
    call    LCD_com

    movlw    B'00000100'                        ;0 0 0 0 0 1 1/D S : 1/D=(1)incrémente le curseur après écriture S=(1)display is shifted
    call    LCD_com

boucle

    call     LCD_LIGNE1

    movlw    " "
    call    LCD_data

    movlw    " "
    call     LCD_data

    movlw    "B"                                ;écrire "B"
    call    LCD_data

    movlw    "I"                       
    call    LCD_data

    movlw    "E"                       
    call    LCD_data

    movlw    "N"                       
    call    LCD_data

    movlw    "V"                       
    call    LCD_data

    movlw    "E"                       
    call    LCD_data

    movlw    "N"                       
    call    LCD_data

    movlw    "U"                       
    call    LCD_data

    movlw    "E"                       
    call    LCD_data

    movlw    " "
    call    LCD_data

    movlw    "A"                       
    call    LCD_data

    movlw    "U"                       
    call    LCD_data

    call    LCD_LIGNE2

    movlw    " "
    call     LCD_data

    movlw    " "
    call     LCD_data

    movlw    "L"                       
    call    LCD_data

    movlw    "Y"                       
    call    LCD_data

    movlw    "C"                       
    call    LCD_data

    movlw    "E"                       
    call    LCD_data

    movlw    "E"                       
    call    LCD_data

    movlw    " "                       
    call    LCD_data

    movlw    "B"                       
    call    LCD_data

    movlw    "A"                       
    call    LCD_data

    movlw    "G"                       
    call    LCD_data

    movlw    "G"                       
    call    LCD_data

    movlw    "I"                       
    call    LCD_data

    movlw    "O"                       
    call    LCD_data

    CALL    Wait1s

    GOTO    boucle                            ;boucle

;*****************************************************************************************************
;                                                                                                     *
;                                          Les pauses a 4Mhz                                             *
;                                                                                                     *
;*****************************************************************************************************

;***** Attente de 1 s (exactement 1.00204 s)
Wait1s
        MOVLW    D'20'                        ;    20 fois
        MOVWF    tempo1s                        ;stockage dans la variable tempo1s
T1sboucle    CALL    Wait10ms
        DECFSZ    tempo1s,f                    ;décremente et test
        GOTO    T1sboucle                    ;on boucle tant que <>0 
        RETURN

;***** Attente de 15 ms (exactement 14.99 ms)
Wait15ms
        MOVLW    D'30'                        ;    30 fois
        MOVWF    tempo10ms                    ;stockage dans la variable tempo10ms
T15msboucle    CALL    Wait100micros
        DECFSZ    tempo10ms,f                    ;décremente et test
        GOTO    T15msboucle                    ;on boucle tant que <>0
        RETURN

;***** Attente de 10 ms (exactement 10.02 ms)
Wait10ms
        MOVLW    D'40'                        ;    40 fois
        MOVWF    tempo10ms                    ;stockage dans la variable tempo10ms
T10msboucle    CALL    Wait50micros
        DECFSZ    tempo10ms,f                    ;décremente et test
        GOTO    T10msboucle                    ;on boucle tant que <>0
        RETURN

;***** Attente de 1.5 ms (exactement ? ms)
Wait1.5ms
        MOVLW    D'6'                        ;    6 fois
        MOVWF    tempo10ms                    ;stockage dans la variable tempo10ms
T1.5msboucle    CALL    Wait50micros
        DECFSZ    tempo10ms,f                    ;décremente et test
        GOTO    T1.5msboucle                ;on boucle tant que <>0
        RETURN

;***** Attente de 100 µs (exactement, en comptant le temps d'appel)
Wait100micros   
        MOVLW    D'33'                        ;    33 fois
        MOVWF    tempo50micro                ;stockage dans la variable tempo50µ
T100microsboucle    DECFSZ    tempo50micro,f    ;décremente et test
        GOTO    T100microsboucle            ;on boucle tant que <>0  0.2*3=0.6 µs en tout
        RETURN

;***** Attente de 50 µs (exactement, en comptant le temps d'appel)
Wait50micros
        NOP
        NOP
        MOVLW    D'16'                        ;    16 fois
        MOVWF    tempo50micro                ;stockage dans la variable tempo50µ
T50microsboucle        DECFSZ    tempo50micro,f    ;décremente et test
        GOTO    T50microsboucle                ;on boucle tant que <>0  0.2*3=0.6 µs en tout
        RETURN

;***** Attente de 5 µs (exactement, en comptant le temps d'appel)
Wait5micros        NOP
        RETURN

;*****************************************************************************************************
;                                                                                                     *
;                                          Les sous programmes                                             *
;                                                                                                     *
;*****************************************************************************************************

;ce programme émet un octet avec RS=0

LCD_com

    bcf        PORTA, 1                            ;Write   
    bcf        PORTA, 0                            ;RS a 0
    bsf        PORTA, 2                            ;Enable a 1   
    movwf    PORTD                                ;Copie W sur le bus DATA
    bcf        PORTA, 2                            ;Enable a 0
     CALL    Wait50micros
    return

;ce programme émet un octet avec RS=1

LCD_data
   
    bcf        PORTA, 1                            ;Write   
    bsf        PORTA, 0                            ;RS a 1
    bsf        PORTA, 2                            ;Enable a 1
    movwf    PORTD                                ;Copie W sur le bus DATA
    bcf        PORTA, 2                            ;Enable a 0
     CALL    Wait50micros
    return

;ce programme sélectionne la ligne 1

LCD_LIGNE1

    movlw    h'80'
     CALL    LCD_com
    return

;ce programme sélectionne la ligne 2

LCD_LIGNE2

    movlw    h'C0'
     CALL    LCD_com
    return

;*****************************************************************************************************
;                                                                                                     *
;                                                FIN                                                        *
;                                                                                                     *
;*****************************************************************************************************

    END                                       ;directive 'end of program'
Commenter la réponse de UltimateXion
Messages postés
197
Date d'inscription
samedi 2 mai 2009
Statut
Membre
Dernière intervention
16 novembre 2010
1
0
Merci
Bonjour Ultimate,
FELICITATIONS, tu as réussi, je suis bien content, car ce n'est pas clair ce genre de commande, c'est réussi c'est merveilleux, c'est au poil, qu'est-ce qui n'allait pas? Alors, cela affiche bien comme il faut, ce n'était pas facile.
C'est le moment de ton BTS maintenant, cela va être bon.
J'espère que tu voudras bien me donner des nouvelles de ton résultat de BTS, sur MP cela me fera plaisir, tu sais je fus comme toi étudiant de ta région,
. . .j'ai fait ma prépa de l'Ecole Normale Supérieure à côté de Lille à Armentières, et j'ai passé le concours national dans les grands locaux de la foire de Lille,
Il y avait 110 candidats quand même, donc toutes les prépas de l'académie et quand on sait qu'il y a 20 académies, de métropole et 4 d'outre-mer et pour 56 places, il y avait donc 56/24=2,3 places pour 110 candidats, n'était-ce pas un peu fou de s'y présenter?

. .Et il s'est passé un résultat exceptionnel, à savoir que notre académie de Lille, au lieu de seulement 2 ou 3 reçus, en a eu 11, oui onze, tu vois qu'on est costauds dans le nord, donc des académies n'ont eu aucun reçu, c'est grave quand même, tous ces profs de prépa qui ont été inefficaces et je pense que ton lycée Baggio aussi avait une prépa ENS c'est sans doute pour ça que je me rappelle de son nom, et il n'y a pas eu de reçu à Baggio non plus pour la bonne raison que les 11 étaient tous de notre lycée d'Armentières, qui présentait 16 candidats, il y a donc eu 5 échoués chez nous, dont les 4 meileurs en analyse de maths qui avaient 16 de moyenne et redoublaient. D'ailleurs on n'a été que deux à être reçus du premier coup. Je n'étais qu'assez bon en analyse, mais par contre imbattable sur 3 matières: construction, géométrie descriptive, et physique, le 18 assuré en toutes circonstances, sauf erreur de calcul. Et j'ai eu un "bol" extra, l'épreuve de construction super-dure, 8h de travail, sujet "infaisable" par presque tous les concurrents, j'ai compris que c'était le tapis rouge pour moi, une épreuve faite à ma mesure, laissant la concurrence derrière, et j'ai mis le paquet, j'ai bien vu autour de moi qu'ils étaient tous coincés, pendant que je travaillais mes calculs à fond la caisse, les autres ne faisaient presque rien, ils ne savaient pas quoi faire, carrément, me laissant le champ libre, et cela dans toute la France, car ensuite, à l'ENS, j'ai vu qu'un seul m'égalait dans cette matière.

Et pourquoi spécialement notre lycée d'Armentières s'est taillé la part du lion? Je connais la raison, c'est que le proviseur d'Armentières ne prenait pas des candidats venant de ses classes, mais envoyait une lettre à tous les proviseurs de terminale en France, qui n'avaient pas de prépa ENS demandant que soit offerte aux seuls 3 meilleurs élèves du lycée une place de prépa, chez nous à Vierzon, 2 élèves de notre classe, et 1 élève de la classe // ont été convoqués dans le bureau du proviseur, j'ai été candidat et le 1er de l'autre classe, et sommes allés à Armentières. Et à Armentières encore des sélections,avant l'année du concours;je suis même le seul rescapé d'une classe formée d'anciens premiers de classe de terminale! Tout le monde n'atteignait pas l'année du concours qui était nourrie par les redoublants et triplants.Il ne faut pas être le 2e dans certains cas. La prépa Armentières c'est le parcours du combattant, mais le proviseur avec ses méthodes tirait le meilleur résultat au concours jusqu'à écraser complètement ses collègues des autres prépas plus faciles. Des profs venaient de Paris pour nous! Dans leurs rangs il y a eu aussi un sacré tri, une étudiante en doctorat n'a fait qu'un seul cours de physique, exit! Je n'ai pas eu de classement officiel de mon résultat académique du concours, mais j'ai de bonnes raisons de penser que sur Lille je n'ai pas été surclassé, puisque je connaissais tous les autres reçus, je sais bien ce qu'ils donnaient par rapport à moi.
........
J'espère que tu fais des étincelles aussi dans ta classe? Raconte-moi.
Et à propos, quand tu auras fini ton BTS, as-tu la possibilité de me faciliter les relations avec Selectronic, car j'habite très loin (île de la Réunion)?
pont
Commenter la réponse de pont