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
Migrer 16F vers 18F
Migrer 16F vers 18F
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Ok, il y a quand même pas mal de nouvelles choses à assimiler quand on migre mais après avoir relu les nouvelles instructions disponibles çà vaut le coup .
Bon je me suis réjoui trop vite, l'émission fonctionnant j'ai pu tester la réception en renvoyant la valeur reçue vers Teraterm et j'ai constaté que çà ne fonctionne pas. le registre Tampon_REC reste vide. Avec l'analyseur logique je ne peux tester qu'à l'entrée de la pin Rx et çà arrive bien. On est un peu démuni pour faire des tests, impossible de tester la liaison en pas à pas. Je replonge dans le datasheet pour la nième fois
Bon je me suis réjoui trop vite, l'émission fonctionnant j'ai pu tester la réception en renvoyant la valeur reçue vers Teraterm et j'ai constaté que çà ne fonctionne pas. le registre Tampon_REC reste vide. Avec l'analyseur logique je ne peux tester qu'à l'entrée de la pin Rx et çà arrive bien. On est un peu démuni pour faire des tests, impossible de tester la liaison en pas à pas. Je replonge dans le datasheet pour la nième fois
Migrer 16F vers 18F
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
ton PIC , est-il en entree ANA par defaut ?
J'ai fais une adaptation de ton programme pour un 18F26K22 ( j'ai pas de 18F4525 !)
pour voir que moi aussi, je n'avais aucun declenchement d'interrupt sur Reception de char ..
j'ai utilisé le mode AVEC traitement des priorité .. car pas réussi SANS traitement niveau de priorité
question subsidiaire :
ne faut-il pas au moins une IT en haute priorité pour pouvoir faire la distinction Haute et basse priorité ?
sur ce PIC, il y a des ENTREES ANALOGIQUES PAR DEFAUT
il faut donc faire ANSELC=0 avec la bonne banque SFR..
j'avais un autre souci..
pas de quartz sur mon montage, donc utilisation de FOSC interne =4MHZ
avec dans la config bit Oscillateur interne avec sortie FOSC/4 sur RA6 pour tester avec l'oscilo.
J'avais beau mettre dans config bit
La compilation me ramenait à chaque fois 0X28 au lieu 0x29 dans la Configuration du Pickit3 au moment de charger le Hex compilé !
et bien sur , pas de signal FOSC/4 sur pin RA6
d'ou j'ai appliqué aussi
ANSELA =0 mais s'avere inutile pour RA6 !
De plus, il faut bien faire un File export .. qui genere un fichier hex de 183Ko ( qui contient la config,eeprom..etc) au moins 1 fois ( si on a modifié cette config), ensuite ce n'est plus necessaire et
le fichier de taille normale <= 2ko habituellement recompilé, peut etre utilisé par pickiT3)
et là, j'ai bien 0x29 dans la config bits sur Pickit3
et de rechef ... un beau signal carré de 4V at 1MHz sur RA6 .. OK
un petit temoin sert à ça..
et un code qui marche .. (mais surement perfectible!)
ici je bloque la reception apres 1 seul char,
car il n'y a pas de buffer de reception ... c'est pour une prochaine etape .
Un flag armé dans l'interrupt RX
dans la boucle main, ralentie par 200mS
je teste le flag pour faire un echo sur le terminal du caractere reçu
et rearme l'interrupt RCIE..
le code
ton PIC , est-il en entree ANA par defaut ?
J'ai fais une adaptation de ton programme pour un 18F26K22 ( j'ai pas de 18F4525 !)
pour voir que moi aussi, je n'avais aucun declenchement d'interrupt sur Reception de char ..
j'ai utilisé le mode AVEC traitement des priorité .. car pas réussi SANS traitement niveau de priorité
question subsidiaire :
ne faut-il pas au moins une IT en haute priorité pour pouvoir faire la distinction Haute et basse priorité ?
sur ce PIC, il y a des ENTREES ANALOGIQUES PAR DEFAUT
il faut donc faire ANSELC=0 avec la bonne banque SFR..
j'avais un autre souci..
pas de quartz sur mon montage, donc utilisation de FOSC interne =4MHZ
avec dans la config bit Oscillateur interne avec sortie FOSC/4 sur RA6 pour tester avec l'oscilo.
J'avais beau mettre dans config bit
Code : Tout sélectionner
[b]300001 29 FOSC [/b] Oscillator Selection bits Internal oscillator block, CLKOUT function on OSC2
La compilation me ramenait à chaque fois 0X28 au lieu 0x29 dans la Configuration du Pickit3 au moment de charger le Hex compilé !
et bien sur , pas de signal FOSC/4 sur pin RA6
d'ou j'ai appliqué aussi
ANSELA =0 mais s'avere inutile pour RA6 !
De plus, il faut bien faire un File export .. qui genere un fichier hex de 183Ko ( qui contient la config,eeprom..etc) au moins 1 fois ( si on a modifié cette config), ensuite ce n'est plus necessaire et
le fichier de taille normale <= 2ko habituellement recompilé, peut etre utilisé par pickiT3)
et là, j'ai bien 0x29 dans la config bits sur Pickit3
et de rechef ... un beau signal carré de 4V at 1MHz sur RA6 .. OK
un petit temoin sert à ça..
Code : Tout sélectionner
Traite_IT_High
; pour verifier si on entre dans une interruption quelconque ,High Level
movlw '*'
movwf TXREG1
et un code qui marche .. (mais surement perfectible!)
ici je bloque la reception apres 1 seul char,
car il n'y a pas de buffer de reception ... c'est pour une prochaine etape .
Un flag armé dans l'interrupt RX
dans la boucle main, ralentie par 200mS
je teste le flag pour faire un echo sur le terminal du caractere reçu
et rearme l'interrupt RCIE..
le code
Code : Tout sélectionner
; 04-06-2018
; probleme RX interrupt et sortie FOSC/4 RA6 resolu par ANSEL (et banques associées)
; 300001 29 FOSC Oscillator Selection bits Internal oscillator block, CLKOUT function on OSC2
; 03-06-2018 rajout RX
; rev TEMPO 200mS et Tempo 1sec
;***************************************************************
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
; list p=18f4525 ; processeur utilisé
; #include <p18f4525.inc> ; Définitions des constantes
list p=18f26K22 ; processeur utilisé
#include <p18f26K22.inc> ; Définitions des constantes
;***************************************************************
; config FOSC = INTIO67 ; intosc 8MHz
; config WDTEN = OFF
; config MCLRE = EXTMCLR
; config LVP = OFF
; *************************************************
;
; voir Config_18F26K22_Uart_Fosc_interne_4MHz.txt
;
;**************************************************
xtal EQU 4000000
CBLOCK H'80'
Tampon_RX
Flag_RX
Reg_1 ; sert a la tempo
Reg_2 ; sert a la tempo
cnt1 ; tempo 200mS et 1sec
cnt2
cnt3
ENDC
SendL macro car
movlw car
call Put_char
endm
;******** vector reset *******
ORG H'0'
goto init
;************* Vector High IT *******************
ORG H'08'
call Traite_IT_High
retfie
;******** Vecteur Low IT **********************
ORG H'18'
; call Traite_IT_Low
retfie
;**************************************************
Traite_IT_High
; pour verifier si on entre dans une interruption
movlw '*'
movwf TXREG1
btfsc PIR1,RC1IF
goto reception
retfie
reception
movf RCREG1,W
movwf Tampon_RX
bsf Flag_RX,0
bsf PIE1,RC1IE ; stop interrupt 1 char à la fois
; test si erreur Overrun
btfss RCSTA1 , OERR
goto No_OERR
; traitement de l'erreur d'overrun
bcf RCSTA1 , OERR ; on efface le bit OERR
nop
bcf RCSTA1 , CREN
nop
bsf RCSTA1 , CREN ; on relance la reception
nop
No_OERR
; test si erreur Frame
btfss RCSTA1 , FERR
goto No_FERR
movf RCREG1 , W
movwf Tampon_RX
No_FERR
return
;**********************************
;**********************************************************************************************
init
; FOSC Interne 4MHz
BCF OSCCON, 7 ; entre en mode Sleep sur instruction SLEEP
BSF OSCCON, 6 ; OSCCON.IRCF2=1; / 101 =4MHz
BCF OSCCON, 5 ; OSCCON.IRCF1=0;
BSF OSCCON, 4 ; OSCCON.IRCF0=1;
BSF OSCCON, 1 ; OSCCON.SCS1=1; // Oscillateur INTERNE
BCF OSCCON, 0 ; OSCCON.SCS0=0;
BCF OSCTUNE,6 ; PLLEN=0
BCF PMD1+0, 6 ; // active peripherique UART1
banksel ANSELC
Clrf ANSELC
; necessaire pour pouvoir utiliser, ckecker FOSC/4 en sortie sur RA6
;300001 29 FOSC Oscillator Selection bits Internal oscillator block, CLKOUT function on OSC2
banksel ANSELA
clrf ANSELA
Banksel TRISC
movlw B'11000000' ; Rc6 Rc7 en input ,init UART reconfigure RC6 en sortie
movwf TRISC
banksel 0
CLRF CM2CON0
CLRF CM1CON0
Banksel TRISA
movlw B'11111111' ; Rc6 Rc7 en input ,init UART reconfigure RC6 en sortie
movwf TRISA
banksel 0
; Init UART1 Hardwazre;-------------- init TXSTA
movlw b'00100100'
movwf TXSTA1
; bit 7 (CSRC) = 0 (non utilise : 0 par exemple)
; bit 6 (TX9) = 0 8 bits de transmission
; bit 5 (TXEN) = 1 autorise la transmission
; bit 4 (SYNC) = 0 mode asynchrone
; bit 3 = 0 (non implemente)
; bit 2 (BRGH) = 1 mode asynchrone haute vitesse
; bit 1 (TRMT) = 0 (en lecture seule)
; bit 0 (TX9D) = 0 (non utilise : 0 par exemple)
;------------- init RCSTA
movlw b'10010000'
movwf RCSTA1
; bit 7 (SPEN) = 1 utilisation du port serie
; bit 6 (RX9) = 0 8 bits reception
; bit 5 (SREN) = 0 (non utilise : 0 par exemple)
; bit 4 (CREN) = 1 autorise la reception
; bit 3 (ADEN) = 0 (non utilise : 0 par exemple)
; bit 2 (FERR) = 0 (non utilise : 0 par exemple)
; bit 1 (OERR) = 0 (non utilise : 0 par exemple)
; bit 0 (RX9D) = 0 (non utilise : 0 par exemple)
; reglages vitesse
movlw d'25' ; reglages sur 9600bauds avec sync=O, brgh=1, brg16=0, xtal=4Mhz
movwf SPBRG1
bcf BAUDCON1,BRG16
BCF Flag_RX,0
clrf Tampon_RX
; vidage tampon UART
CLRF TXREG1
call Tempo_200mS
CLRF TXREG1
SendL .13
SendL .10
; Interrupt !
clrf PIE1
; avec niveau d'interrupt
bsf RCON,IPEN ; Activation des priorites
bsf RCON,PEIE ; activation des IT Peripheriques
bsf IPR1,RC1IP ; High priority
bcf PIE1,TX1IE ; desactiv interrupt emission
bsf PIE1,RC1IE ; activ IT RX UART
bsf INTCON,GIE ; activation des interruptions
; test tempo 200mS
SendL 'T'
SendL '0'
SendL '.'
SendL '2'
SendL .13
SendL .10
ici:
call Tempo_200mS
call Tempo_200mS
call Tempo_200mS
call Tempo_200mS
call Tempo_200mS
SendL .13
SendL .10
SendL '$'
SendL .13
SendL .10
main
SendL 'P'
SendL 'A'
SendL 'U'
SendL 'L'
SendL 'F'
SendL 'J'
SendL 'U'
SendL 'J'
SendL 'O'
SendL .13
SendL .10
Encore:
btfss Flag_RX,0
goto Suite
SendL 'R'
SendL 'X'
SendL '='
SendL ' '
movf Tampon_RX,w
btfss TXSTA1,TRMT
goto $-2
nop
movwf TXREG1
SendL .13
SendL .10
BCF Flag_RX,0
bsf PIE1,RC1IE
Suite
call Tempo_200mS
goto Encore
Put_char
btfss TXSTA1,TRMT
goto $-2
nop
movwf TXREG1
return
Tempo_200mS:
movlw .200
movwf cnt1
movlw .4
movwf cnt2
movlw .2
movwf cnt3
Tempo2:
decfsz cnt1, f
bra Tempo2
decfsz cnt2, f
bra Tempo2
decfsz cnt3, f
bra Tempo2 ;3 cycles
nop
nop
nop
return
Tempo_1S ;999 997 cycles
movlw .172
movwf cnt1
movlw .19
movwf cnt2
movlw .6
movwf cnt3
Tempo1:
decfsz cnt1, f
bra Tempo1
decfsz cnt2, f
bra Tempo1
decfsz cnt3, f
bra Tempo1 ;3 cycles
nop
nop
nop
return
end
/*
T0.2
$
PAULFJUJO
*RX= H
*RX= E
*RX= L
*RX= L
*RX= O
----------------------------------------------------------------------
----------------------------------------------------------------------
Release build of project `C:\Mplab8\_Mesprojets_ASM\_18F4525_Uart\18F26K22_F6FC0_Test.mcp' started.
Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49
Mon Jun 04 15:31:07 2018
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\Mplab8\_Mesprojets_ASM\_18F4525_Uart\18F26K22_Uart_Test_F6FCO_180604.o".
Clean: Deleted file "C:\Mplab8\_Mesprojets_ASM\_18F4525_Uart\18F26K22_Uart_Test_F6FCO_180604.err".
Clean: Deleted file "C:\Mplab8\_Mesprojets_ASM\_18F4525_Uart\18F26K22_Uart_Test_F6FCO_180604.hex".
Clean: Deleted file "C:\Mplab8\_Mesprojets_ASM\_18F4525_Uart\18F26K22_Uart_Test_F6FCO_180604.lst".
Clean: Deleted file "C:\Mplab8\_Mesprojets_ASM\_18F4525_Uart\18F26K22_Uart_Test_F6FCO_180604.cof".
Clean: Done.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p18F26K22 "18F26K22_Uart_Test_F6FCO_180604.asm" /l"18F26K22_Uart_Test_F6FCO_180604.lst" /e"18F26K22_Uart_Test_F6FCO_180604.err"
Warning[207] C:\MPLAB8\_MESPROJETS_ASM\_18F4525_UART\18F26K22_UART_TEST_F6FCO_180604.ASM 281 : Found label after column 1. (Suite)
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\mplink.exe" /p18F26K22 "18F26K22_Uart_Test_F6FCO_180604.o" /z__MPLAB_BUILD=1 /o"18F26K22_Uart_Test_F6FCO_180604.cof" /M"18F26K22_Uart_Test_F6FCO_180604.map" /W /x
MPLINK 4.49, Linker
Device Database Version 1.14
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors : 0
Loaded C:\Mplab8\_Mesprojets_ASM\_18F4525_Uart\18F26K22_Uart_Test_F6FCO_180604.cof.
----------------------------------------------------------------------
Release build of project `C:\Mplab8\_Mesprojets_ASM\_18F4525_Uart\18F26K22_F6FC0_Test.mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49
Mon Jun 04 15:31:09 2018
----------------------------------------------------------------------
BUILD SUCCEEDED
*/
Migrer 16F vers 18F
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Bonjour Päulfjujo,
Désolé pour le retard de ma réponse, j'étais absent.
Bah, tu me parles de plein de trucs que je ne connais pas encore
Banksel... je suppose que c'est une fonction qui veut dire Bank sélection; il n'y en a plus de banques dans les 18F non ?
ANSELC, ANSELA... certainement analogique/numérique sélection ? connais pas encore non plus.
Pour passer tout le port A en digital ne suffit-il pas de charger 0xFF dans PCFG3 du registre ADCON1 ? je ne l'ai pas fait dans mon programme ne voyant pas le rapport avec l'usart.
Je travaille avec un quartz extérieur de 4Mhz.
Ce qui est frustrant c'est que l'émission/réception fonctionne parfaitement sur les 16F et que je ne vois pas pourquoi çà ne touille pas sur 18F.
Merci pour ton code, je vais le tester et j'ai vu qu'il y a plein de choses à prendre
Désolé pour le retard de ma réponse, j'étais absent.
Bah, tu me parles de plein de trucs que je ne connais pas encore
Banksel... je suppose que c'est une fonction qui veut dire Bank sélection; il n'y en a plus de banques dans les 18F non ?
ANSELC, ANSELA... certainement analogique/numérique sélection ? connais pas encore non plus.
Pour passer tout le port A en digital ne suffit-il pas de charger 0xFF dans PCFG3 du registre ADCON1 ? je ne l'ai pas fait dans mon programme ne voyant pas le rapport avec l'usart.
Je travaille avec un quartz extérieur de 4Mhz.
Ce qui est frustrant c'est que l'émission/réception fonctionne parfaitement sur les 16F et que je ne vois pas pourquoi çà ne touille pas sur 18F.
Merci pour ton code, je vais le tester et j'ai vu qu'il y a plein de choses à prendre
Migrer 16F vers 18F
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour à tous,
tu as tout à fait raison.
Il n'y a pas de registre ANSEL (selection voie analogique) sur ton PIC, donc c'est ADCON1 qui en fait office.
et le port C n'a aucun lien avec un port ANALOGIQUE sur ce PIC.
je pense qu'il te manque RCIP à 1 ...
F6FCO a écrit :Pour passer tout le port A en digital ne suffit-il pas de charger 0xFF dans PCFG3 du registre ADCON1 ?
je ne l'ai pas fait dans mon programme ne voyant pas le rapport avec l'usart.
tu as tout à fait raison.
Il n'y a pas de registre ANSEL (selection voie analogique) sur ton PIC, donc c'est ADCON1 qui en fait office.
et le port C n'a aucun lien avec un port ANALOGIQUE sur ce PIC.
je pense qu'il te manque RCIP à 1 ...
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Migrer 16F vers 18F
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Je ne l'avais pas traité parce que j'avais désactivé les priorités (IPEN=0) pour passer en mode compatible 16F et aussi pour aborder les 18F le plus simplement possible dans un premier temps.
Une difficulté à la fois quand on découvre
Au vu de tes expériences je vais faire un essai en réactivant les priorités et en validant IPEN, RCIP et TXIP. Merci pour l'info et je vous tiens au courant.
Une difficulté à la fois quand on découvre
Au vu de tes expériences je vais faire un essai en réactivant les priorités et en validant IPEN, RCIP et TXIP. Merci pour l'info et je vous tiens au courant.
Migrer 16F vers 18F
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Re,
C'est bon, çà marche enfin . Bizarre que çà n'ait pas voulu sans les priorités mais bon, faut pas que je sois trop difficile. Il me reste à peaufiner la chose car le dernier caractère de mon message continue d'être transmis tant que je n'ai pas envoyé un nouveau message, me reste à trouver pourquoi.
Pour l'instant je me contente de charger TXREG avec le contenu de RCREG au sein de l'interruption.
C'est bon, çà marche enfin . Bizarre que çà n'ait pas voulu sans les priorités mais bon, faut pas que je sois trop difficile. Il me reste à peaufiner la chose car le dernier caractère de mon message continue d'être transmis tant que je n'ai pas envoyé un nouveau message, me reste à trouver pourquoi.
Pour l'instant je me contente de charger TXREG avec le contenu de RCREG au sein de l'interruption.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Migrer 16F vers 18F
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Bonjour tous,
Paul, pourrais-tu m'expliquer pourquoi tu mets une tempo de 200ms entre deux vidages du tampon UART ? un seul CLRF TXREG n'aurait-il pas suffit ?
Paul, pourrais-tu m'expliquer pourquoi tu mets une tempo de 200ms entre deux vidages du tampon UART ? un seul CLRF TXREG n'aurait-il pas suffit ?
Code : Tout sélectionner
; vidage tampon UART
CLRF TXREG1
call Tempo_200mS
CLRF TXREG1
SendL .13
SendL .10
Migrer 16F vers 18F
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour à tous..
OUI, MAIS
le but de cette manoeuvre est de chronometrer ma tempo de 200mS !
avec VBRAY Terminal et l'option TIME cochée
à chaque CRLF, il mets l' heure et millisecondes
il suffit alors de regarder l'ecart lu sur le terminal entre les 2 sauts de lignes.
Ca peut servir aussi à chronometrer la duree d'une boucle principale de programme ou un morceau de programme..
mais attention, à +-50mS pret ( duree d'un TIC PC )..
pour les duree plus courtes .. SQA Analyser ..
sur VBRAY terminal,
on peut aussi faire un effacement de l'ecran en envoyant le code 12 (Form Feed)
option RX Clear =12
mais il faut > 300mS pour qu'il le fasse proprement
donc à faire suivre d'une tempo
je mets carrement 500mS
UART1_Init(19200);
UART1_Write(12);
Delay_ms(500);
et on a un debut d'affichage possible sur un ecran bien propre ..
Code : Tout sélectionner
un seul CLRF TXREG n'aurait-il pas suffit ?
OUI, MAIS
le but de cette manoeuvre est de chronometrer ma tempo de 200mS !
avec VBRAY Terminal et l'option TIME cochée
à chaque CRLF, il mets l' heure et millisecondes
il suffit alors de regarder l'ecart lu sur le terminal entre les 2 sauts de lignes.
Ca peut servir aussi à chronometrer la duree d'une boucle principale de programme ou un morceau de programme..
mais attention, à +-50mS pret ( duree d'un TIC PC )..
pour les duree plus courtes .. SQA Analyser ..
sur VBRAY terminal,
on peut aussi faire un effacement de l'ecran en envoyant le code 12 (Form Feed)
option RX Clear =12
mais il faut > 300mS pour qu'il le fasse proprement
donc à faire suivre d'une tempo
je mets carrement 500mS
UART1_Init(19200);
UART1_Write(12);
Delay_ms(500);
et on a un debut d'affichage possible sur un ecran bien propre ..
Migrer 16F vers 18F
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Ok, compris ton explication même si je ne connais pas VBRAY
J'ai bien épluché ton code, et je t'en ai même piqué des parties, notamment la macro.
Deux choses:
- Si je peux me permettre, ton retfie n'est pas utilisé car placé juste en dessous du goto reception, tes interruptions sont terminées par le return après No-FERR. Je pense que tu as pensé 'call' et écris 'goto' , je fais çà assez souvent moi aussi
- dans mon code je ne peux rien envoyer à partir de la partie main, par contre je fais bien le job si je place les macros au sein de l'interrupt. A partir de là tout fonctionne (emission/reception) mais j'essaie de régler ce petit problème. Merci pour ton aide, j'ai bien avancé et avec Satinas vous m'avez tiré une fière chandelle du pied
Ce code est sensé envoyer 'F6FCO' à partir de l'interrupt emission et 'FANTASPIC' à partir du main, voici le résultat:
J'ai bien épluché ton code, et je t'en ai même piqué des parties, notamment la macro.
Deux choses:
- Si je peux me permettre, ton retfie n'est pas utilisé car placé juste en dessous du goto reception, tes interruptions sont terminées par le return après No-FERR. Je pense que tu as pensé 'call' et écris 'goto' , je fais çà assez souvent moi aussi
- dans mon code je ne peux rien envoyer à partir de la partie main, par contre je fais bien le job si je place les macros au sein de l'interrupt. A partir de là tout fonctionne (emission/reception) mais j'essaie de régler ce petit problème. Merci pour ton aide, j'ai bien avancé et avec Satinas vous m'avez tiré une fière chandelle du pied
Code : Tout sélectionner
;----------------------------------------------------------------------------------------------
; Liaison série asynchrone sur 18F4525
;----------------------------------------------------------------------------------------------
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
list p=18f4525 ; processeur utilisé
#include <p18f4525.inc> ; Définitions des constantes
;---------------------------------------------------------------------------------------------
CONFIG OSC = XT ; Oscillateur ext 4MHz
CONFIG IESO = OFF ; Oscillateur secondaire refusé (ON/OFF)
CONFIG PWRT = ON ; Délai au démarrage (ON/OFF)
CONFIG BOREN = OFF ; Reset si chute de tension (ON/OFF)
CONFIG BORV = 0 ; Tension de reset en 1/10ème Volts
CONFIG WDT = OFF ; Mise hors service du watchdog (ON/OFF)
CONFIG PBADEN = OFF ; PORTB<4:0> les broches sont configurées comme E/S numériques lors de la réinitialisation
CONFIG LPT1OSC = OFF ; Timer1 configuré pour un fonctionnement plus puissant
CONFIG MCLRE = ON ; Mclr
CONFIG STVREN = ON ; Reset sur débordement de pile (ON/OFF)
CONFIG LVP = OFF ; Programmation basse tension autorisée (ON/OFF)
CONFIG XINST = OFF ; L'extension du jeu d'instructions et le mode d'adressage indexé sont désactivés(mode hérité)
CONFIG DEBUG = ON ; Debugger hors service
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 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 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 ; Protection lecture de table block 0 (ON/OFF)
CONFIG EBTR1 = OFF ; Protection lecture de table block 1 (ON/OFF)
CONFIG EBTR2 = OFF ; Protection lecture de table block 2 (ON/OFF)
CONFIG EBTRB = OFF ; Protection lecture de table bootblock (ON/OFF)
;-------------------------------------- assignations ------------------------------------------
; #DEFINE
;------------------------------ déclaration des variables -------------------------------------
CBLOCK H'0'
ENDC
CBLOCK H'80'
W_TEMP
STATUS_TEMP
BSR_TEMP
Tampon_REC ; tampon réception
Tampon_EM ; tampon émission
Reg_1
Reg_2
Reg_3
ENDC
; ---------------------------------------- macros --------------------------------------------
send macro car
movlw car
btfss TXSTA,TRMT
goto $-2
nop
movwf TXREG
endm
;--------------------------------- adresse de depart après reset -----------------------------
ORG H'0'
goto init
;--------------------------------------- interruptions ---------------------------------------
ORG H'08'
; ----------- test pour savoir si on a reçu un caractère
btfss PIR1,RCIF ; registre plein ? si oui on saute à réception
goto int1 ; sinon on saute au test emission
reception
movff RCREG,Tampon_REC ; lecture de RCREG
btfss RCSTA,OERR ; test d'une erreur d'overrun
goto int1
; traitement de l'erreur d'overrun
bcf RCSTA,CREN ; on efface le bit OERR
bsf RCSTA,CREN ; on relance la réception
; ----------- on passe ensuite au test pour émission
int1 btfss PIR1,TXIF ; TXREG plein ? si oui on saute à emission
goto int2 ; sinon on termine
emission
; D'ici je peux envoyer mes caractéres alors que çà ne veut pas le faire dans le main
send 'F'
send '6'
send 'F'
send 'C'
send 'O'
send ' '
send .10
send .13
boucle_EM
btfss PIR1,TXIF
goto boucle_EM
int2 ; traitement des autres interruptions
retfie
;----------------------------------- Initialisations -------------------------------------------------
init
; ------------- ADCON0 et ADCON1(convertisseur ana/digital)
bcf ADCON0,ADON ; convertisseur a/n dévalidé
movlw 0xFF
movwf ADCON1,PCFG3 ; on passe tout en digital (pas logique puisque ADON=0 mais je préfère)
; ------------- INTCON (controle des interruptions)
movlw b'11000000'
movwf INTCON
; bit 7 (GIE/GIEH) = 1 activation des interruptions
; bit 6 (PEIE/GIEL) = 1 Peripheral interrupt enable bit
; bit 5 (TMROIE) = 0
; bit 4 (INTOIE) = 0
; bit 3 (RBIE) = 0
; bit 2 (TMROIF) = 0
; bit 1 (INTOIF) = 0
; bit 0 (RBIF) = 0
; ------------- RCON (reset control register)
movlw b'10000000'
movwf RCON
; bit 7 (IPEN) =1 Priorités activées
; bit 6 (SBOREN) = 0
; bit 5 (nc) = 0 non implémenté
; bit 4 (not RI) = 0 reset instructions flag bit
; bit 3 (not TO) = 0 watchdog timer time-ourt flag bit
; bit 2 (not PD) = 0 Power-down detection flag bit
; bit 1 (not POR) = 0 Power-on reset status bit
; bit 0 (not BOR) = 0 Brown-out reset status bit
; ------------- IPR1 (priorités interruptions)
movlw b'00110000'
movwf IPR1
; bit 7 (PSPIP) = 0 priorité port //
; bit 6 (ADIP) = 0 priorité Convertisseur A/D
; bit 5 (RCIP) = 1 haute priorité réception EUSART
; bit 4 (TXIP) = 1 haute priorité transmission EUSART
; bit 3 (SSPIP) = 0 liaison asynchrone
; bit 2 (CCP1IP) = 0 priorité CCP1
; bit 1 (TMR2IP) = 0 priorité Timer2
; bit 0 (TMR1IP) = 0 priorité Timer1
; ------------- PIE1 (validations interruptions)
movlw b'00110000'
movwf PIE1
; bit 7 (PSPIE) = 0 Port parallèle
; bit 6 (ADIE) = 0 A/D converter
; bit 5 (RCIE) = 1 interrupt reception activée
; bit 4 (TXIE) = 1 interrupt emission activée
; bit 3 (SSPIE) = 0 Master synchronous port
; bit 2 (CCP1IE) = 0 CCP1
; bit 1 (TMR2IE) = 0 TMR2
; bit 0 (TMR1IE) = 0 TMR1
;-------------- TXSTA (Transmission EUSART)
movlw b'00100100'
movwf TXSTA
; bit 7 (CSRC) = 0 (non utilisé)
; bit 6 (TX9) = 0 8 bits de transmission
; bit 5 (TXEN) = 1 autorise la transmission
; bit 4 (SYNC) = 0 mode asynchrone
; bit 3 (nc) = 0 (non implémenté)
; bit 2 (BRGH) = 1 mode asynchrone haute vitesse
; bit 1 (TRMT) = 0 (en lecture seule)
; bit 0 (TX9D) = 0 (non utilisé)
;------------- RCSTA (Reception EUSART)
movlw b'10010000'
movwf RCSTA
; bit 7 (SPEN) = 1 utilisation du port série
; bit 6 (RX9) = 0 8 bits reception
; bit 5 (SREN) = 0 don't care = on s'en tape
; bit 4 (CREN) = 1 autorise la reception
; bit 3 (ADDEN) = 0 non utilisé en 8 bits
; bit 2 (FERR) = 0 no framing error
; bit 1 (OERR) = 0 no overrun error
; bit 0 (RX9D) = 0 mode 8 bits
; ------------- vitesse de transmission
movlw d'25' ; réglages sur 9600bauds avec sync=O, brgh=1, brg16=0, xtal=4Mhz
movwf SPBRG
bcf BAUDCON,BRG16 ; réglé à 8bits
bcf PORTC,4 ; reset led témoin de réception connectée sur Rc5
; ------------ PORT C
movlw B'11000000' ; Rc6 et Rc7 en input
movwf TRISC
clrf PORTD
goto main
; -------------------------------------- Programme principal --------------------------------------
main
; d'ici rien n'est envoyé, pas encore trouvé pourquoi
send 'F'
send 'A'
send 'N'
send 'T'
send 'A'
send 'S'
send 'P'
send 'I'
send 'C'
send ' '
send .10
send .13
goto main
END
Ce code est sensé envoyer 'F6FCO' à partir de l'interrupt emission et 'FANTASPIC' à partir du main, voici le résultat:
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 59 invités