begin process at 2012 05 25 12:19:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Divers

 > 

Débutant(e)

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

mercredi 20 mai 2009 à 21:13:04 | Problème de programation d'un PIC16F877a avec un LCD 2*16 en mode 8 Bits

UltimateXion

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 <p16F877a.inc>                     ;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'
lundi 25 mai 2009 à 19:00:46 | Re : Problème de programation d'un PIC16F877a avec un LCD 2*16 en mode 8 Bits

pont

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.
lundi 25 mai 2009 à 19:22:51 | Re : Problème de programation d'un PIC16F877a avec un LCD 2*16 en mode 8 Bits

pont

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.
lundi 25 mai 2009 à 23:59:27 | Re : Problème de programation d'un PIC16F877a avec un LCD 2*16 en mode 8 Bits

UltimateXion

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.
mardi 26 mai 2009 à 12:37:47 | Re : Problème de programmation d'un PIC16F877A avec un LCD 2*16 en mode 8 Bits

pont

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.
mardi 26 mai 2009 à 20:07:12 | Re : Problème de programation d'un PIC16F877a avec un LCD 2*16 en mode 8 Bits

UltimateXion

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.
mardi 26 mai 2009 à 21:49:23 | Re : Problème de programation d'un PIC16F877a avec un LCD 2*16 en mode 8 Bits

pont

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.
samedi 30 mai 2009 à 00:53:20 | Re : Problème de programation d'un PIC16F877a avec un LCD 2*16 en mode 8 Bits

UltimateXion

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 <p16F877A.inc>                                 ;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'

samedi 30 mai 2009 à 09:48:48 | Re : Problème de programation d'un PIC16F877a avec un LCD 2*16 en mode 8 Bits

pont

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


Cette discussion est classée dans : sortie, lcd, call, movlw, sendrs


Répondre à ce message

Sujets en rapport avec ce message

Problème avec mon programme en source assembleur pour mon projet de BTS [ par UltimateXion ] 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 petit probleme [ par wessleyclark ] bonjour tous le monde, voila j`ai un petit soucis avec mon code.[^^mad5] ce que je voulais faire , c`est de lire les donnee d`une telecomande transme comment utiliser un call à l'aide d'un préfixe [ par jeddaye ] bonjour, j'utilise actuellement mplab pour programmer mon 16f88et je me demandais si il etait possible de faire un call avec un préfixe, ceci afin de programmation du PIC 16f876 [ par essahlaouifouad ] salut j'ai un problème de programmation du PIC 16f876 pour contrôle la charge et la décharge du batteri pour un système photovoltaïque pour ne pas end texte en memoire dans pic [ par yalein ] Bonjour a tous, je suis débutant dans la programmation en assembleur et la je coince sur un probleme. J'utilise un pic 16f877 avec un afficheur et je Probleme avec la pile et call [ par Mick7 ] Salut,Voila j'ai un probleme d'adresse de pile quand je fais appele a call affichage:  Main:     mov ax, 324     mov bx, 10  Boucle:     xor dx, dx    lcd [ par shalala ] bonjour tout le monde,je suis nouveau dans le domaine de l'assemleur; je programme un lcd,mais ca ne fonctionne pas,pourtant j'ai receuilli un maximum Invoke et Call [ par Micro_and_Macro ] Bonjour Voilà je débute en asm(masm32) et j'expérimente, mais là je flanche :-)Pourquoi ces 2 codes ne donnent -il pas la mêm chose?1er code.code


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,388 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales