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 ---
- 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 ---
Modérateur : mazertoc
MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
-
folkeu08
Débutant- Messages : 45
- Âge : 57
- Enregistré en : novembre 2017
- Localisation : Ardennes (08)
- Contact :
Bonjour à tous (car certains ont pris le sujet en route),
Je n'ai pas encore écrit une ligne sur le W-E.
-> où j'en suis avec l'assembleur ?
Un ami m'avait expliqué ce language dans les années 90 de mémoire lorsqu'il "pissait" du code (pour le plagier) pour les réalisations qu'il publiait dans Radio-Plans.
* Il m'a expliqué qu'une pin du pic se programme en entrée ou sortie (en fonction du data ne peut être qu'une entrée ou une sortie d'origine).
* Il est possible de décaler des données par la droite ou la gauche (nous avons vu les commandes les plus communes)
J'ai assimilé cela.
Ce qui me bloque car mal compris et quelque part non visuel, ce sont les registres W et F et C (carry).
Cet après-midi, j'ai repris un de ses bouts de programme pour une de ses publications :
Ces valeurs sont stockées d'origine dans l'eeprom du pic 16f877 :
La routine "Add16" permet, je suppose, d'obtenir un mot de 16bits ( variable ?) en ajoutant les 2 de 8 bits (OP3H et OP3L).
Il est fait des choses avec F (ADDWF BCDL,F) et W (MOVF OP1L,W). Il y est mis souvent des choses dedans pour aller les rechercher ensuite. Dans mon esprit, F et W sont des cases "mémoire" où une seule valeur y est stockée dans chaque. Or, quand j'essaye de comprendre un programme en assembleur, c'est pas possible.
Qui peut me démystifier déjà ces 2 choses ?
Pour le Carry et encore de mémoire, c'est une histoire de dépassement, la valeur change d'état si cela arrive.
Déjà m'éclaircir cela
Il y a t-il une application libre (opensource) qui permette de visualiser les différents registres ainsi que l'empilement des données (il m'avait parlé de cela aussi -> les data s'empilent avec une adresse pour aller les rechercher). J'aurai un visuel et je comprendrai plus vite.
Je vais questionner sur les choses non comprises dans vos réponses cette semaine pour m'essayer le W-E prochain de 3 jours à écrire seul cette fois des lignes.
François
Je n'ai pas encore écrit une ligne sur le W-E.
-> où j'en suis avec l'assembleur ?
Un ami m'avait expliqué ce language dans les années 90 de mémoire lorsqu'il "pissait" du code (pour le plagier) pour les réalisations qu'il publiait dans Radio-Plans.
* Il m'a expliqué qu'une pin du pic se programme en entrée ou sortie (en fonction du data ne peut être qu'une entrée ou une sortie d'origine).
* Il est possible de décaler des données par la droite ou la gauche (nous avons vu les commandes les plus communes)
J'ai assimilé cela.
Ce qui me bloque car mal compris et quelque part non visuel, ce sont les registres W et F et C (carry).
Cet après-midi, j'ai repris un de ses bouts de programme pour une de ses publications :
Ces valeurs sont stockées d'origine dans l'eeprom du pic 16f877 :
Code : Tout sélectionner
CALL rd_eeprom
CALL conv
CALL see
;###################################################################
;##### convertion pour adresse 16bits #########
;##### OP1 => BCD #########
;###################################################################
;
conv CLRF BCDH
CLRF BCDL
MOVF OP3H,W
MOVWF OP1H
MOVF OP3L,W
MOVWF OP1L
CLRF OP2H
CLRF OP2L
INCF OP2L,F
CALL add16
conv1 CLRF OP2H
MOVLW 100
MOVWF OP2L
CALL sub16
BTFSC OP1H,7
GOTO conv2
INCF BCDH,F
GOTO conv1
conv2 CLRF OP2H
MOVLW 100
MOVWF OP2L
CALL add16
conv3 CLRF OP2H
MOVLW 10
MOVWF OP2L
CALL sub16
BTFSC OP1H,7
GOTO conv4
MOVLW 0x10
ADDWF BCDL,F
GOTO conv3
conv4 CLRF OP2H
MOVLW 10
MOVWF OP2L
CALL add16
MOVF OP1L,W
ADDWF BCDL,F
MOVLW 0xF0
IORWF BCDH,F
MOVF BCDH,W
ANDLW 0x0F
IORLW 0x00
BTFSS STATUS,Z
RETURN
MOVLW 0x0F
IORWF BCDH,F
MOVF BCDL,W
ANDLW 0xF0
IORLW 0x00
BTFSS STATUS,Z
RETURN
MOVLW 0xF0
IORWF BCDL,F
RETURN
;###################################################################
;##### addition pour adresse DMX512 sur 16bits #########
;##### OP1 + OP2 = OP1 #########
;###################################################################
;
add16 MOVF OP2L,W
ADDWF OP1L,F
BTFSC STATUS,C
INCF OP2H,F
MOVF OP2H,W
ADDWF OP1H,F
RETURN
rd_eeprom BANK2
MOVLW H'00'
MOVWF EEADR
BANK3
BCF EECON1,EEPGD
BSF EECON1,RD
BANK2
MOVF EEDATA,W
BANK0
MOVWF OP3H
MOVLW attente_full
CALL wait
BANK2
MOVLW H'01'
MOVWF EEADR
BANK3
BCF EECON1,EEPGD
BSF EECON1,RD
BANK2
MOVF EEDATA,W
BANK0
MOVWF OP3L
RETURN
;================================================================
;====== SET_TIME dans eeprom ===============
;================================================================
;
ORG H'2100'
DE H'01' ;OP3H
DE H'FF' ;OP3L
La routine "Add16" permet, je suppose, d'obtenir un mot de 16bits ( variable ?) en ajoutant les 2 de 8 bits (OP3H et OP3L).
Il est fait des choses avec F (ADDWF BCDL,F) et W (MOVF OP1L,W). Il y est mis souvent des choses dedans pour aller les rechercher ensuite. Dans mon esprit, F et W sont des cases "mémoire" où une seule valeur y est stockée dans chaque. Or, quand j'essaye de comprendre un programme en assembleur, c'est pas possible.
Qui peut me démystifier déjà ces 2 choses ?
Pour le Carry et encore de mémoire, c'est une histoire de dépassement, la valeur change d'état si cela arrive.
Déjà m'éclaircir cela
Il y a t-il une application libre (opensource) qui permette de visualiser les différents registres ainsi que l'empilement des données (il m'avait parlé de cela aussi -> les data s'empilent avec une adresse pour aller les rechercher). J'aurai un visuel et je comprendrai plus vite.
Je vais questionner sur les choses non comprises dans vos réponses cette semaine pour m'essayer le W-E prochain de 3 jours à écrire seul cette fois des lignes.
François
MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
Bonsoir folkeu08, et tout le forum,
Ah la..la .. tu mélanges pas mal de chose, je vais essayer d'éclaircir ton esprit, ça va pas être facile parce que tu t'attaques à un sujet difficile.
W et un registre de travail, ce registre sert à transmettre une valeur dans une variable ou un registre.
On ne peut pas le faire directement sur un 16F (pour ton cas).
Exemple
F et ton destinataire
Exemple
Certain oublie de rajouter W ou F, ce qui amène à des erreurs dans le code, je citerais pas de non
C appelé aussi CARRY et utilisé pour contrôler une valeur plus grand ou plus petit c'est on réalité le 9 bits
Exemple
Dans ASM tout est gratuit, tu n'as pas à sortir ton porte monnaie pour payer quoi que se soit, par contre c'est plus dur à apprendre, mais ça t'ouvre des portes.
Il existe MPLAB 8.92 pour te permette de visualise tes registres et tes variables, j'ai fait un tutoriel ICI si ça peut t'intéresser, il est entièrement gratuit.
Tu veux aller trop vite, sais tu ce que sait un tableau binaire ?
A+
Ah la..la .. tu mélanges pas mal de chose, je vais essayer d'éclaircir ton esprit, ça va pas être facile parce que tu t'attaques à un sujet difficile.
W et un registre de travail, ce registre sert à transmettre une valeur dans une variable ou un registre.
On ne peut pas le faire directement sur un 16F (pour ton cas).
Exemple
Code : Tout sélectionner
movlw D'154' ; copier 154 décimal dans W
movwf temps ; copier W dans temps
movlw B'00100001' ; copier 00100001 binaire dans W
movwf PORTA ; copier W dans PORTA
F et ton destinataire
Exemple
Code : Tout sélectionner
decf temps,F ; retire 1 dans temps, car F représente la variable temps
incf temps,F ; ajoute 1 dans temps, car F représente la variable temps
movlw D'178' ; copier 178 décimal dans W
addwf temps,F ; additionner (W + temps) le résultat est mis dans temps
movlw D'178' ; copier 178 décimal dans W
addwf temps,W ; additionner (W + temps) le résultat est mis dans W(registre de tavail)
Certain oublie de rajouter W ou F, ce qui amène à des erreurs dans le code, je citerais pas de non
C appelé aussi CARRY et utilisé pour contrôler une valeur plus grand ou plus petit c'est on réalité le 9 bits
Exemple
Code : Tout sélectionner
bcf STATUS,C ; mettre à zéro le bit C(carry) qui est dans le registre STATUS
movlw D'155' ; copier 155 décimal dans W
addlw D'172' ; additionner (W + 172)
btfsc STATUS,C ; regarder si le bit C(carry) et à 1
goto oui ; oui C(carry) est à 1
goto non ; non C(carry) est à 0
oui
; <== le résultat arrivera ici car (155 + 172)
;
non
; traitement
folkeu08 a écrit :Source du message Il y a t-il une application libre (opensource) qui permette de visualiser les différents registres ainsi que l'empilement des données
Dans ASM tout est gratuit, tu n'as pas à sortir ton porte monnaie pour payer quoi que se soit, par contre c'est plus dur à apprendre, mais ça t'ouvre des portes.
Il existe MPLAB 8.92 pour te permette de visualise tes registres et tes variables, j'ai fait un tutoriel ICI si ça peut t'intéresser, il est entièrement gratuit.
Tu veux aller trop vite, sais tu ce que sait un tableau binaire ?
A+
MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
-
folkeu08
Débutant- Messages : 45
- Âge : 57
- Enregistré en : novembre 2017
- Localisation : Ardennes (08)
- Contact :
Bonjour à tous,
Ma méthode de progression peut vous surprendre mais je me connais. Depuis tout petit, ce qui est simple pour quelqu'un est difficile pour moi et inversement .
Temps-X merci pour ces explications, c'est pigé pour moi sans aucune hésitation.
Je vais vite aller chercher ton tuto pour m'y exercer et bien m'imprégner de W et F avec les exercices de Bigonoff.
Je programme sous Delphi et j'ai déjà cette logique nécessaire.
Les tableaux numériques ne seraient-il pas l'équivalent d'Arrays (suite de data ordonnées) ?
J'ai déjà fait plus difficile et je n'en sortirai même si je mélange. J'ai plutôt besoin de comprendre ce qu'il se passe que de savoir ce qu'il se passe. J'apprends plus vite par l'expérimentation que par la connaissance théorique.
Je me mets en stand-by pour l'instant et je reviens dès que je maitrise le jeu avec quelques variables et que j'habitue mon esprit à jongler avec.
Bonne fin de semaine.
François
Ma méthode de progression peut vous surprendre mais je me connais. Depuis tout petit, ce qui est simple pour quelqu'un est difficile pour moi et inversement .
Temps-X merci pour ces explications, c'est pigé pour moi sans aucune hésitation.
Je vais vite aller chercher ton tuto pour m'y exercer et bien m'imprégner de W et F avec les exercices de Bigonoff.
Je programme sous Delphi et j'ai déjà cette logique nécessaire.
Les tableaux numériques ne seraient-il pas l'équivalent d'Arrays (suite de data ordonnées) ?
J'ai déjà fait plus difficile et je n'en sortirai même si je mélange. J'ai plutôt besoin de comprendre ce qu'il se passe que de savoir ce qu'il se passe. J'apprends plus vite par l'expérimentation que par la connaissance théorique.
Je me mets en stand-by pour l'instant et je reviens dès que je maitrise le jeu avec quelques variables et que j'habitue mon esprit à jongler avec.
Bonne fin de semaine.
François
MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
Bonsoir folkeu08, et tout le forum,
Je pourrais faire ton programme, mais tu n'apprendrais rien, maintenant si c'est çà que tu veux faut me le dire.
Pour bien comprendre un tableau numérique à l'époque savais fait un petit programme, que je viens de retrouver, je le mets à disposition pour le forum, il est protégé contre les virus.
C'est un convertisseur 16 bits, donc obligé d'avoir deux variables
Fichier ci-joint
A+
Je pourrais faire ton programme, mais tu n'apprendrais rien, maintenant si c'est çà que tu veux faut me le dire.
folkeu08 a écrit :Source du message Les tableaux numériques ne seraient-il pas l'équivalent d'Arrays
Pour bien comprendre un tableau numérique à l'époque savais fait un petit programme, que je viens de retrouver, je le mets à disposition pour le forum, il est protégé contre les virus.
C'est un convertisseur 16 bits, donc obligé d'avoir deux variables
Fichier ci-joint
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 80 invités