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
base pour 18F4525
Bonjour a tous
Voici la base pour un 18F4525 qui utilise TMR0 en interruption toute les 100 milliseconde, incrémente une variable qui sera testé dans la boucle principale pour inverser le bit 1 du portB avec pour effet une led qui clignote
la suite dans le prochain épisode
Voici la base pour un 18F4525 qui utilise TMR0 en interruption toute les 100 milliseconde, incrémente une variable qui sera testé dans la boucle principale pour inverser le bit 1 du portB avec pour effet une led qui clignote
Code : Tout sélectionner
; descriptif du projet:
;********************************************************************
; essai de programation pic 18f4525
; led clignotante avec timer 0
;
;;********************************************************************
;
; Auteur : JMarc
; Version : 1.0
; Date : 2017
;
;*******************************************************************************
; Note:PIC 18F4525 par exemple
; led sur portB,1
; timer 0 toute les 100 ms si quartz 4 mega hertz
;
;*******************************************************************************
ERRORLEVEL-302
list p=18f4525 ;liste directive
#include "p18f4525.inc"
;=============================================================================
;-----------------------------------------------------------------------------
; Définissez vos choix ici
; Les commandes seront traitées par assemblage conditionnel
;-----------------------------------------------------------------------------
TYPEINT EQU 0 ; 0 pour interruptions classiques
; 1 pour interruptions avec priorité
;=============================================================================
; CONFIGURATIONS EN MODE NORMAL =
;=============================================================================
;-----------------------------------------------------------------------------
; Remplacer les paramètres proposés par une des alternatives possibles
; proposées entre parenthèses
; A partir de MPLAB7, la directive "CONFIG" remplace la directive "__CONFIG"
;-----------------------------------------------------------------------------
CONFIG OSC = HS ; Oscillateur principal (LP,XT,HS,RC,EC,ECIO,HSPLL,RCIO)
; CONFIG OSCS = OFF ; Oscillateur secondaire refusé (ON/OFF)
IFNDEF DEBUG
CONFIG PWRT = OFF ; Délai au démarrage (ON/OFF)
; CONFIG BOR = ON ; Reset si chute de tension (ON/OFF)
; CONFIG BORV = 42 ; Tension de reset en 1/10ème Volts (20,27,42,45)
CONFIG WDT = OFF ; Mise en service watchdog (ON/OFF)
CONFIG WDTPS = 128 ; Postdiviseur du watchdog (1,2,4,8,16,32,64,128)
; CONFIG STVR = ON ; Reset sur débordement de pile (ON/OFF)
CONFIG LVP = OFF ; Programmation basse tension autorisée (ON/OFF)
CONFIG DEBUG = OFF ; Debugger hors service (laisser sur OFF)
CONFIG CP0 = OFF ; code protection sur block 0 (ON/OFF)
CONFIG CP1 = OFF ; code protection sur block 1 (ON/OFF)
CONFIG CP2 = OFF ; code protection sur block 2 (ON/OFF)
; CONFIG CP3 = OFF ; code protection sur block 3 (ON/OFF)
CONFIG CPB = OFF ; code protection sur bootblock (ON/OFF)
CONFIG CPD = OFF ; Code protection sur eeprom (ON/OFF)
CONFIG WRT0 = OFF ; Protection écriture block 0 (ON/OFF)
CONFIG WRT1 = OFF ; Protection écriture block 1 (ON/OFF)
CONFIG WRT2 = OFF ; Protection écriture block 2 (ON/OFF)
; CONFIG WRT3 = OFF ; Protection écriture block 3 (ON/OFF)
CONFIG WRTB = OFF ; Protection écriture bootblock (ON/OFF)
CONFIG WRTC = OFF ; Protection écriture configurations (ON/OFF)
CONFIG WRTD = OFF ; Protection écriture zone eeprom (ON/OFF)
CONFIG EBTR0 = OFF ; protect. lecture de table block 0 (ON/OFF)
CONFIG EBTR1 = OFF ; protect. lecture de table block 1 (ON/OFF)
CONFIG EBTR2 = OFF ; protect. lecture de table block 2 (ON/OFF)
; CONFIG EBTR3 = OFF ; protect. lecture de table block 3 (ON/OFF)
CONFIG EBTRB = OFF ; protect. lecture de table bootblock (ON/OFF)
ENDIF
;=============================================================================
; VARIABLES ACCESS RAM =
;=============================================================================
; zone de 96 octets
; -----------------
CBLOCK 0x00 ; zone access ram de la banque 0
flags : 1 ; flags divers
; b0 : 1= erreur de vérification
local01 : 1 ; variable locale 1 (multi-usage)
local02 : 1 ; variable locale 2 (multi-usage)
local03 : 1 ; variable locale 3 (multi-usage)
;*********************************************************************
; DECLARATIONS DE VARIABLES *
;*********************************************************************
cmpt1 : 1 ; compteur de boucles 1
cmpt2 : 1 ; compteur de boucles 2
cmpt3 : 1 ; compteur de boucles 3
temptmr0 : 1 ; compteur TMR0
ENDC
;=============================================================================
; VARIABLES BANQUE 0 =
;=============================================================================
; zone de 160 octets, suite de l'access RAM
; -----------------------------------------
CBLOCK 0x60
fsr0_temp : 2 ; sauvegarde de FSR0 (2 registres)
ENDC
#DEFINE ERR_EEP flags,0 ; flag d'erreur de vérification eeprom
#DEFINE ERR_FLASH flags,0 ; flag d'erreur vérif flash (même)
;=============================================================================
; PROGRAMME =
;=============================================================================
; vecteur de reset
; ----------------
ORG 0x00
nop ; pour debugger
goto init ; sauter initialisation
;=============================================================================
; INTERRUPTION SIMPLE =
;=============================================================================
ORG 0x08 ; point de départ des interruptions simples
; sauvegardes supplémentaires
; ---------------------------
movff FSR0L,fsr0_temp ; sauver FSR0L (exemple)
movff FSR0H,fsr0_temp+1 ; et FSR0H
;traitement de l'interruption
;-----------------------------
btfss INTCON,TMR0IE ; tester si interrupts INT0 en service
bra inter2 ; non, test suivant
btfss INTCON,TMR0IF ; tester si flag INT0IF positionné
bra inter2 ; non, test suivant
incf temptmr0 ; +1 toute les 100 ms
bcf INTCON,TMR0IF ; effacer le flag (ou le faire dans traitinit0)
bra interrest ; et terminer par restauration
retfie FAST ; si pas de restauration, on peut sortir ici
; dans ce cas, effacer la ligne précédente
inter2
; mettre ici les interuptions a tester
; restaurations
; -------------
interrest
movff fsr0_temp,FSR0L ; restaurer FSR0L
movff fsr0_temp+1,FSR0H ; et FSR0H
retfie FAST ; retour avec restauration de
; WREG, BSR, et STATUS
;=============================================================================
; INITIALISATIONS =
;=============================================================================
;-----------------------------------------------------------------------------
; contient les initialisations exécutées lors d'un reset
; ----------------------------------------------------------------------------
init
; traiter mise sous tension du pic
; --------------------------------
initpor ; par exemple on efface la RAM banque 0
lfsr FSR0,0x00 ; pointer sur l'adresse 0
initpor1
clrf POSTINC0 ; effacer emplacement pointé, et incrément pointeur
btfss FSR0H,0 ; banque 0 terminée?
bra initpor1 ; poursuivre traitement
movlw 0x06 ; port A en mode numérique
movwf ADCON1 ; dans registre de contrôle
clrf PORTA ; effacement des ports
clrf PORTB
clrf TRISA ; ports en sortie
clrf TRISB
bsf PORTB,1 ; allumage de la led
; initialisation à toujours faire
; --------------------------------
; PLACER VOS INITIALISATIONS INITIALES ICI
; initialiser les interruptions
; ------------------------------
bsf INTCON2,INTEDG0 ; interrupt sur flanc montant (exemple)
bsf RCON,IPEN
bsf INTCON2,TMR0IP ; haute priorité
bcf INTCON,RBIF ; RB7 RB4
; xxxx ; initialiser les autres interruptions
bsf INTCON,GIE ; mettre toutes les interruptions en service.
bsf T0CON,T0PS2 ; TMR0 prédiviseur sur 256
bsf T0CON,T0PS1
bsf T0CON,T0PS0
BCF T0CON,T0CS ; tmr0 internal clock
bcf T0CON,PSA ; prescaler on
bsf T0CON,T0SE
bcf INTCON,INT0IF ; par sécurité
bsf INTCON,TMR0IE ; Interruptions TMR0 en service
bsf T0CON,TMR0ON ; mettre interrupts INT0 en service
;=============================================================================
; PROGRAMME PRINCIPAL =
;=============================================================================
main
MOVLW 0X0A ;on test si 10fois 100mS
SUBWF temptmr0,W
BTFSS STATUS,Z
bra main ;NON
CLRF temptmr0 ;OUI RAZ compteur temps et on decompte
movlw b'00000010' ; bit a inverser
xorwf PORTB,f
bra main ; fin du programme
END
la suite dans le prochain épisode
base pour 18F4525
base pour 18F4525
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonsoir à tous ,
Je reste admiratif, devant le courage qu'il faut pour faire clignoter une LED en assembleur ! A ceux qui font de l'ASM vous avez mon respect car c'est impressionnant ! Et la on ne parle que d'une LED !
Quid d'un protocole UART en ASM ou I2C .... et toute autre fonctions un peu pechues !
Courage à toi et bravo !
Je reste admiratif, devant le courage qu'il faut pour faire clignoter une LED en assembleur ! A ceux qui font de l'ASM vous avez mon respect car c'est impressionnant ! Et la on ne parle que d'une LED !
Quid d'un protocole UART en ASM ou I2C .... et toute autre fonctions un peu pechues !
Courage à toi et bravo !
base pour 18F4525
base pour 18F4525
Tout a fait d'accord a Jérémy.
Depuis que je connais la programmation en général, l'assembleur ma toujours fait peur la syntaxe me "pique les yeux".
Doc bravo a ceux qui code tous les jours dessus, et aux nouveaux adepte.
@++
Depuis que je connais la programmation en général, l'assembleur ma toujours fait peur la syntaxe me "pique les yeux".
Doc bravo a ceux qui code tous les jours dessus, et aux nouveaux adepte.
@++
base pour 18F4525
base pour 18F4525
Coucou
apres cest comme tout suffit de sy mettre moi jai appris en asm grace a bigonoff ,) et je trouve que le langage C est tres complex moi perso je ny comprend rien mais je ne my suis jamais interessé non plus je programme en asm et sa ne me pose pas trop de problémes apres je ne suis que debutant ;)
apres cest comme tout suffit de sy mettre moi jai appris en asm grace a bigonoff ,) et je trouve que le langage C est tres complex moi perso je ny comprend rien mais je ne my suis jamais interessé non plus je programme en asm et sa ne me pose pas trop de problémes apres je ne suis que debutant ;)
base pour 18F4525
- Gérard
Expert- Messages : 1654
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Guigui02 a écrit :Coucou
apres cest comme tout suffit de sy mettre moi jai appris en asm grace a bigonoff ,) et je trouve que le langage C est tres complex moi perso je ny comprend rien mais je ne my suis jamais interessé non plus je programme en asm et sa ne me pose pas trop de problémes apres je ne suis que debutant ;)
Tu as raison, l'important est d'arriver à ses fins. Le meilleur langage est celui dont on sait se servir. Perso, je préfère le Basic.
base pour 18F4525
Bonjour a tous
voici pour la gestion de l'afficheur LCD, sur le 16F877, nous utilisons le registre EEADR pour l’accès memoire.
sur le 18F4525, j'ai pris le registre TBLPTR et cela fonctionne
voici la parti modifié
voici pour la gestion de l'afficheur LCD, sur le 16F877, nous utilisons le registre EEADR pour l’accès memoire.
sur le 18F4525, j'ai pris le registre TBLPTR et cela fonctionne
voici la parti modifié
Code : Tout sélectionner
;**********************************************************************
;
; Fonction Printf %s
; avec en parametre W le numero du printf a afficher (defini par des EQU)
; Definitions des printfs en fin de programmes
;
;**********************************************************************
LCD_PRINTF
MOVWF LCD_CMP_PRINTF ; on met W dans LCD_AFF_PRINTF qui contient le printf a afficher
; initialisation de EEADRH et de EEADR
MOVLW High Printf_START
; MOVWF EEADRH ; MSBytes of Program address to read
movwf TBLPTRH
MOVLW Low Printf_START
; MOVWF EEADR ; LSByte of program address to read
movwf TBLPTRL
LCD_PRINTF_boucle
; BSF EECON1, EEPGD ; Point to PROGRAM memory
; BSF EECON1, RD ; EEPROM read
; NOP
; NOP ; Memory is read in the next 2 cycles
; MOVF EEDATA, W ; W = LSByte of Program EEDATA
; MOVF EEDATH, W ; W = MSByte of Program EEDATA -> pas utile ici
tblrd*+ ; lecture de l'octet en memoire
movf TABLAT,w ; transfert de l'octet dans w
tblrd*+ ; octet poid fort inutile
BTFSC STATUS, Z ; Si W = 0 va en LCD_PRINTF_Null
bra LCD_PRINTF_Null
DECFSZ LCD_CMP_PRINTF, F ; on decremente LCD_CMP_PRINTF
bra LCD_PRINTF_Next_add ; si il est different de 0, donc de 1 avant decrementation, on va en LCD_PRINTF_Next_add
; sinon il faut afficher le caractere qui est toujours dans W
RCALL LCD_SEND_CHAR
bra LCD_PRINTF_Next_add
LCD_PRINTF_Null
DECFSZ LCD_CMP_PRINTF, F
bra LCD_PRINTF_Next
RETURN
LCD_PRINTF_Next_add
INCF LCD_CMP_PRINTF, F ; on reajoute 1 a LCD_CMP_PRINTF
LCD_PRINTF_Next
; INCF EEADR, F ; ajoute 1 a l'adresse de lecture
; BTFSC STATUS, Z
; INCF EEADRH, F ; si = 0, on ajoute 1 au poid fort
MOVLW High Printf_STOP
SUBWF TBLPTRH,W
BTFSS STATUS, Z
bra LCD_PRINTF_Next2 ; si EEADRH != High Printf_STOP on continue
MOVLW low Printf_STOP
SUBWF TBLPTRL,W
BTFSS STATUS, Z
bra LCD_PRINTF_Next2 ; si EEADR != low Printf_STOP on continue
RETURN
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 49 invités