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

Assembleur

 > 

Divers

 > 

Débutant(e)

 > 

Problème avec mon programme en source assembleur pour mon projet de BTS


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

Problème avec mon programme en source assembleur pour mon projet de BTS

mercredi 20 mai 2009 à 20:27:28 | Problème avec mon programme en source assembleur pour mon projet de BTS

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 2 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

;*****************************************************************************************************
;                                                                                                    
;                                                                                          Sous Programmes                                       
;                                                                                                    
;*****************************************************************************************************
;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'






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


Répondre à ce message

Sujets en rapport avec ce message

Problème de programation d'un PIC16F877a avec un LCD 2*16 en mode 8 Bits [ 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 : 2,512 sec (3)

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