Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Commentez, partagez et proposez des Tutos en langage ASM !
[En cours] débuguer vos programme grâce a l'utilisation de l'uart et d'un terminal pc
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#1 Message par JMarc » dim. 24 sept. 2017 12:02

Bonjour,

Voici un tutoriel en asm utile pour débuguer vos programme grâce a l'utilisation de l'uart et d'un terminal pc

Il est la suite du tuto fait par Temps-x, voir à ce sujet ici :http://www.fantaspic.fr/viewtopic.php?f=16&t=525
Je ne reprendrai donc les infos déjà évoqué dans son sujet

Les infos ci dessous proviennent des cours fait par mr Bigonoff adapté a ma sauce :sifflotte:


___________________________________________________________________________________________________________________

Le principe

Nous allons utiliser pour cela L'UARTqui utilise les broches Rx (RB2) et Tx (RB5) pour le 16F88

____________________________________________________

Matériel nécessaire

Module a connecter sur le port usb de l'ordinateur
http://www.ebay.fr/itm/FT232RL-FTDI-USB ... Sw~XpZQX~S
Il sert a convertir les signaux en 0 et 5 volts compatible avec les signaux TTL de nos pics favoris. il suffit de relier la broche tx du pic au rx du module

logiciel a utiliser sur l'ordinateur
programmes "terminal" tels que Teraterm https://osdn.net/projects/ttssh2/downloads/66795/teraterm-4.93.exe/
_______________________________________________________________

La ligne de commande

Il suffira d'ajouter une simple ligne de commande dans le programme, je ne peut pas faire plus simple, encore plus facile qu'en C :langue:



Code : Tout sélectionner

    MESSAGE "O","p","e","n"," ","1"," "," "," "," " 





Message permet de faire appel a une macro auquel il suffira de Remplir les guillemets du message souhaité, un seul caractère par guillemet donc une chaîne de 8 caractères sera envoyé a la macro. il suffira de placé cette commande aux endroits stratégique du programme pour connaître son évolution.
La macro s'occupera d'envoyer la chaîne dans l'uart et de gérer la transmission de celle ci. cette ligne pourra être répété a volonté dans le programme



______________________________________________________________________________________________________________________________

première étape, déclaration des variables

Nous avons besoin de stocker les caractères a envoyer, donc une réservation de la mémoire devra être déclarer en banque 0

Code : Tout sélectionner

    tx : 20          ;soit 20 octets pour l'envoie des données
    bufoutptr : 1 ; un octet pour son pointeur




deuxième étape, la mise en route de l'uart

nous allons travailler a la vitesse de 9600 bauts/seconde, sur 8 bits

Dans la partie initialisation, nous allons rajouté ces quelques lignes de code pour configurer l'Usart

Code : Tout sélectionner

;   pour un quartz de 4 Mhz
;   (4000000/(9600*16))-1
;   (4000000/153600)-= 25,0416 nous prendrons 25
;
;
   pour un quartz a 20 Mhz
;   (20000000/153600)-1= 129,2083 donc nous prendrons 129
;
BRGVAL    EQU    D'129'    ; pour un débit de 9615 bauds en mode high-speed
;********************************************************************** 



Code : Tout sélectionner

            ; initialiser USART
            
; -----------------
    movlw    B'00000100'    ; émission sur 8 bits, mode haute vitesse
    movwf    TXSTA        
; dans registre de contrôle
    movlw    BRGVAL        
; valeur pour baud rate generator
    movwf    SPBRG        
; dans SPBRG
    bcf     STATUS
,RP0    ; passer banque 0
    movlw    B
'10000000'    ; module USART en service, réception 8 bits
    movwf    RCSTA        
; dans registre de contrôle




autoriser les interuptions dans la partie initialisation

Code : Tout sélectionner

    bsf    INTCON,PEIE    ; autoriser interruptions périphériques


dans la partie interuption, il faut rajouté la detection

Code : Tout sélectionner

            ; Interruption transmission USART
            
; -------------------------------
intsw1
    bsf     STATUS
,RP0    ; sélectionner banque1
    btfss    PIE1
,TXIE    ; tester si interrupt autorisée
    goto     restorereg    
; non sauter
    bcf     STATUS
,RP0    ; oui, sélectionner banque0
    btfss    PIR1
,TXIF    ; oui, tester si interrupt en cours
    goto     restorereg    
; non sauter
    call    inttx        
; oui, traiter interrupt


et le sous programme qui va avec

Code : Tout sélectionner

inttx
            
; prendre octet à envoyer
            
; -----------------------

    bcf     STATUS,IRP    ; pointer banques 0 et 1
    movf    bufoutptr
,w    ; charger pointeur d'octets
    movwf    FSR         ; dans pointeur
    movf    INDF,w        ; charger octet à envoyer

            ; envoyer octet
            ; -------------
    movf    INDF,w        ; charger octet à envoyer
    bcf     STATUS,RP0    ; passer banque 0
    movwf    TXREG        ; envoyer octet + parité
    incf    bufoutptr,f    ; pointer sur octet suivant

            ; tester si dernier octet
            ; -----------------------
    xorlw    0x0A        ; comparer octet envoyé avec Line-feed
    btfss    STATUS,Z    ; égalité?
    return              ; non, retour d'
interruption

            
; traiter fin d'émission
            ; ----------------------
    bsf     STATUS,RP0    ; passer en banque 1
    bcf     PIE1,TXIE    ; fin des interruptions émission USART
    bcf     STATUS,RP0    ; repasser banque 0
    movlw    LOW tx      ; adresse du buffer de sortie
    movwf    bufoutptr    ; prochain caractère = premier
    return


et bien sur la macro a déclarer avant son premier appel

Code : Tout sélectionner

MESSAGE     macro    a1,a2,a3,a4,a5,a6,a7,a8,a9,a10    ; macro avec passage de parametre
    bcf     STATUS
,RP0
    bcf     STATUS
,RP1  ; banque 0 par securité
    movlw    a1          
; charger argument 1
    movwf    tx          
; dans chaine
    movlw    a2          
; charger argument 2
    movwf    tx
+1        ; dans chaine
    movlw   a3
    movwf   tx
+2
    movlw    a4        
    movwf    tx
+3    
    movlw    a5         
    movwf   tx
+4
    movlw    a6          
    movwf    tx
+5    
    movlw    a7          
    movwf    tx
+6    
    movlw   a8
    movwf   tx
+7
    movlw    a9        
    movwf    tx
+8    
    movlw    a10         
    movwf   tx
+9
      movlw    0x0D            
; charger carriage return
    movwf    tx
+11    
    movlw    0x0A            
; charger line-feed
    movwf    tx
+12    

    bsf    STATUS
,RP0
    bcf    STATUS
,RP1       ; passer banque 1
    bsf    PIE1
,TXIE        ; lancer le message banque 1
    
    btfsc   PIE1
,TXIE       ; message précédent envoyé? banque1
    goto    
$-1             ; non, attendre
    btfss   TXSTA
,TRMT      ; buffer de sortie vide? banque 1
    goto    
$-3             ; non, attendre

    bsf     PIE1
,RCIE       ; réautoriser interruption réception banque 1
    bcf     STATUS
,RP0      ; passer banque 0
     endm





Sujet non terminé, en cours de traitement

[En cours] débuguer vos programme grâce a l'utilisation de l'uart et d'un terminal pc
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#2 Message par Temps-x » mar. 26 sept. 2017 01:41

Bonsoir JMarc, et bonsoir tous le monde,

:bravo: Beau tutoriel, j'ai hâte de voir la suite, tu vas surement gagner le concours, tu vas pouvoir demander à Jérémy d'imprimer
réplique de la Tour Eiffel échelle 1. :wink:

A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 18 invités