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

Assembleur

 > 

Divers

 > 

Général

 > 

Probléme USART sur un PIC 18F46k20


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

Probléme USART sur un PIC 18F46k20

jeudi 10 mars 2011 à 11:42:33 | Probléme USART sur un PIC 18F46k20

leonidax86

Bonjour,

J'essaie de mettre au point une communication RS232 entre un PIC 18F46k20 et une IHM ( codé sous CVI).
J'utilise la carte DEMO Board du PICDEM 2 PLUS.

Le but pour l'instant est d'envoyé un octet de IHM le comparer dans le PIC est d'allumer ou d'éteindre une LED de la carte D'évaluation en fonction de l'octet envoyé.

J'ai déja mis au point ce petit test sur un PIC 16F76 est cela fonctionne parfaitement. Mais là je n'arrive pas à comprendre Pourquoi cela ne fonctionne pas. Si quelqu'un pourrais m'aider à résoudre ce petit problème??

J'utilise un quartz externe à 14,7456 MHZ

Voici mon code :


LIST p= 18f46k20 ; Définition de processeur
#include <p18F46K20.inc> ; fichier include



;=============================================================================
; CONFIGURATIONS EN MODE NORMAL =
;=============================================================================

CONFIG FOSC = HS
CONFIG FCMEN = OFF
CONFIG IESO = OFF
CONFIG PWRT = OFF
CONFIG BOREN = ON
CONFIG BORV = 30
CONFIG WDTEN = OFF
CONFIG WDTPS = 1
CONFIG CCP2MX = PORTBE
CONFIG PBADEN = OFF
CONFIG LPT1OSC = OFF
CONFIG HFOFST = OFF
CONFIG MCLRE = ON
CONFIG STVREN = ON
CONFIG LVP = OFF
CONFIG XINST = OFF
CONFIG DEBUG = OFF
CONFIG CP0 = OFF
CONFIG CP1 = OFF
CONFIG CP2 = OFF
CONFIG CP3 = OFF
CONFIG CPB = OFF
CONFIG CPD = OFF
CONFIG WRT0 = OFF
CONFIG WRT1 = OFF
CONFIG WRT2 = OFF
CONFIG WRT3 = OFF
CONFIG WRTC = OFF
CONFIG WRTB = OFF
CONFIG WRTD = OFF
CONFIG EBTR0 = OFF
CONFIG EBTR1 = OFF
CONFIG EBTR2 = OFF
CONFIG EBTR3 = OFF
CONFIG EBTRB = OFF

;=============================================================================
; ASSIGNATION PROGRAMME =
;=============================================================================

BRGVAL EQU D'95' ; pour un débit de 9615 bauds en mode high-speed

;=============================================================================
; VARIABLES ACCESS RAM =
;=============================================================================

; zone de 96 octets
; -----------------
CBLOCK 0x000 ; zone access ram de la banque 0

flags : 1 ; Flag pour déclancher la mise en sommeil du PIC
; b0 : bit activation de la mise en sommeil
; si a 1 , le PIC se met en mode sleep sinon
; il continue le traitements des données reçus.

OCTET : 1 ; Variable pour stocker l'octet reçu

LEDOFF : 1 ; Variable pour éteindre la LED

LEDON : 1 ; Variable pour allumer la LED

Sommeil : 1 ; Variable pour mettre en sommeil le PIC

w_temp : 1 ; Variable de sauvegarde du registre W

status_temp : 1 ; Variable de sauvegarde du registre status

BSR_temp : 1 ; Variable de sauvegarde du registre FSR

ENDC

;*****************************************************************************
; DEMARRAGE SUR RESET *
;*****************************************************************************

org 0x00 ; Adresse de départ après reset
goto init ; Initialisation du PIC


;=============================================================================
; ROUTINE D'INTERRUPTION =
;=============================================================================

org 0x008 ; Adresse d'interruption

;sauvegarder registres
;---------------------

movff WREG, w_temp ; Sauver registre W
movff STATUS, status_temp ; Sauver registre status
movff BSR, BSR_temp ; Sauver registre BSR

; Interruption RB0/INT
; --------------------
intsw1
btfsc INTCON,INT0IE ; Tester si interruption RB0 autorisée
btfss INTCON,INT0IF ; Oui, tester si interruption RB0 en cours
bra intsw2
call intrb0 ; Oui, traiter interruption RB0
goto restorereg ; et fin d'interruption

; Interruption réception USART
; ----------------------------
intsw2
btfss PIE1,RCIE ; Tester si interruption autorisée
goto restorereg ; Non fin interruption
btfss PIR1,RCIF ; Tester si interruption en cours
goto restorereg ; Non fin interruption
call intrc ; Oui, traiter interruption
goto restorereg ; et fin d'interruption

;restaurer registres
;-------------------
restorereg

movf w_temp , w
movwf WREG ; Restaurer registre W
movf status_temp , w
movwf STATUS ; Restaurer registre status
movf BSR_temp , w
movwf BSR ; Restaurer registre BSR
retfie ; Retour au programme principal


;=============================================================================
; INTERRUPTION =
;=============================================================================

; Interruption RB0
; ----------------
intrb0
bcf INTCON,INT0IF ; Effacer flag interruption RB0
bcf INTCON,INT0IE ; Désactivé Interruption RBO
bcf flags, 0 ; Désactivé le mode sommeil
return ; Retour routine Interruption

; Interruption réception USART
; ----------------------------
intrc
movf RCREG,w ; charger octet reçu dans Variable OCTET
movwf OCTET
bcf RCSTA,CREN ; Mettre fin à la réception

call compare ; Appeller fonction compare
return ; Retour routine Interruption

;=============================================================================
; FONCTION COMPARE =
;=============================================================================

compare

movf OCTET,w ; Compare données reçus avec variable
xorwf LEDOFF,w ; LEDOFF
btfsc STATUS,Z ; Si Z=1 au passe à TLEDOFF sinon on passe
goto TLEDOFF ; à la comparaison suivante
BTG PORTB ,RB2

movf OCTET,w ; Compare données reçus avec variable
xorwf LEDON,w ; LEDON
btfsc STATUS,Z ; Si Z=1 au passe à TLEDON sinon on passe
goto TLEDON ; à la comparaison suivante

movf OCTET,w ; Compare données reçus avec variable
xorwf Sommeil,w ; Sommeil
btfsc STATUS,Z ; Si Z=1 au passe à TSommeil sinon on passe
goto TSommeil ; à la comparaison suivante

return ; retour à l'interruption

;=============================================================================
; CONFIGURATION PORT =
;=============================================================================

TLEDOFF
bcf PORTB , 2 ; Mettre RB2 du PIC au niveau Bas
goto restorereg ; retour fin d'interruption

TLEDON
bsf PORTB , 5 ; Mettre RB2 du PIC au niveau Haut
goto restorereg ; retour fin d'interruption

TSommeil
bsf flags,0 ; Autorisé la mise en sommeil du PIC
goto restorereg


;=============================================================================
; INITIALISATIONS =
;=============================================================================

init


; initialisation USART
;------------------

bcf TXSTA , SYNC
bsf TXSTA , BRGH
bcf BAUDCON , BRG16
movlw BRGVAL
movwf SPBRGH
movlw BRGVAL
movwf SPBRG
movlw B'11000000'
movwf TRISC
movlw B'10000000' ; module en service, réception 8 bits
movwf RCSTA ; dans registre RCSTA


; lancer interruption USART
; -------------------------
bsf INTCON,PEIE ; interruptions périphériques en service
bsf PIE1 , RCIE
bsf PIE1,RCIF ; autoriser interrupts RX USART

bsf INTCON,GIE ; lancer les interruptions

; initialisation des variable (banque0)
;---------------------------

movlw B'00000000' ; initialiser variable Voie1ON
movwf LEDOFF

movlw B'00000001' ; initialiser variable Voie1OFF
movwf LEDON

movlw B'11110000' ; initialiser variable Voie2ON
movwf Sommeil



; initialisation des PORT
;---------------------------

movlw B'00000001'
movwf TRISB
movlw B'00000000'
movwf TRISA


movlw B'00000000'
movwf PORTB
movlw B'00000000'
movwf PORTA
movlw B'00000000'
movwf PORTC

goto start ; démarrer programme principal
;=============================================================================
; PROGRAMME =
;=============================================================================

start
; lecture sur port série
; ----------------------

bsf RCSTA,CREN ; lancer la réception
nop
nop
btfsc flags ,0 ; si flags est à 1 mettre PIC en sommeil
goto sleepPIC ; sinon boucler
goto start

sleepPIC
bsf INTCON, 4 ; Autoriser interuption RB0
sleep ; mode sommeil du PIC
nop
goto start ; boucler
END ; directive fin de programme


Cette discussion est classée dans : variable, config, interruption, off, movwf


Répondre à ce message

Sujets en rapport avec ce message

Interruption Bios ou Dos ? [ par Valmont ] Quand choisir d'utiliser une int Dos plutot que Bios et inversement qd il y a + ou - doublon, comme par ex. pour la lecture/ecriture de secteur sur un interruption du bios et du dos sous windows [ par eedy31 ] eedy31Salut a tous est ce que quelqu'un pourait m'aider car je ne sais pascomment faire pour utiliser les interruption du dos et du bios sous windows! probleme avec l interruption affichage de chaine [ par M0NTOYA ] bon voila mon probleme ,qd j utilse cette procedure(presentation) pour afficher une chaine de caractere presentation PROC PUSHA MOV AH,09h INT 21h POP probleme avec l interruption affichage de chaine [ par M0NTOYA ] bon voila mon probleme ,qd j utilse cette procedure(presentation) pour afficher une chaine de caractere presentation PROC PUSHA MOV AH,09h INT 21h POP Affichage caractere par caractere d'une variable DT [ par Eclipz ] BonjourVoila, un souci en MASM, j'ai une variable nommée Resultat de type DT et je voudrais afficher, caractere par caractere, son résultat... le prob interruption BIOS [ par project0 ] est ce quelqu un connais les interruptions BIOS qui arrete le systeme ( avec mise sous tension ) et celle qui permet un reboot ( redemarrage propre pa Access violation et ecriture de variable [ par anthraxx ] J'ai une question qui me traKsse avec MASM:quand je declare un tampon comme cela:buffer db 100 dup(0)et dans le code, j'essaye d'ecrire dedans, avec u interruption clavier nasm [ par escobales ] Bonjour,Je n'arrive pas à appeler l'interrruption clavier avec nasmj'ai ecrit un programme en C mais j'ai besoin d'utiliser le clavier pendant que le retour d'interruption [ par S2R ] Bonjour,Je n'arrive pas à récupérer l'adresse d'appel d'une int.J'aurais besoin de pouvoir changer l'adresse de retour d'une int (que j'ai reprogrammé interruption du clavier sous linux [ par xian2 ] bonjour,je voudrais connaitre l'equivalent de l'interruption 6 du int 21h du DOS.elle permet de lire le clavier sans afficher le caractère lu.mon co


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 4,072 sec (3)

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