Bonjour à tous,
je suis nouvelle. J'ai un projet de programmation en assembleur ou C du PIC 16F887 pour réaliser une transmission Réception série RS232 sur MPLAB IDE V8.50. Malheureusement le programme ne marche pas et pourtant tout m'a l'air normal. Je signale que je ne suis pas très douée en programmation.
Pourriez-vous m'aider?
voici le programme:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
;********************************************************************************:
; Ce programme envoi un message à 9600 Bd via l'USART
;********************************************************************************
LIST P=16F887 F=INHX32 ; directive qui définit le processeur utilisé
; et le format des données envoyées
#include<P16F887.INC> ; fichier de définition des constantes
;******************************************************************************
; BITS DE CONFIGURATION
;******************************************************************************
__CONFIG _HS_OSC & _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF
;******************************************************************************
; DECLARATION de VARIABLES *
;******************************************************************************
CBLOCK h'20' ; début de la zone en 20h en RAM
INDEX :1 ;INDEX occupe un octet à l'adresse 20h
ENDC ; Fin de la zone
; on aurait pu écrire aussi INDEX EQU Ox2O
;********************************************************************************
; DEMARRAGE SUR RESET *
;********************************************************************************
org 0x0 ; Adresse de départ après reset
goto debut
org 0x10 ; adresse de début du programme
debut
;********************************************************************************
; PROGRAMME PRINCIPAL *
;********************************************************************************
call init
caract0
BANKSEL INDEX
clrf INDEX ; initialisation de l'index qui pointe le premier caractère
boucle
movf INDEX,W ; W pointe le caractère à afficher
call MESSAGE ; recherche du caractère dans la table
andlw 0xFF ; test de fin de message (le dernier caractère est 0)
btfsc STATUS,Z
goto caract0 ; si c'est le dernier caractère on recommence au premier
call emission ; sous programme d'émission
call tempo ; attente
incf INDEX ,F ; incrémentation du caractère à afficher
goto boucle ; rebouclage
;********************************************************************************
; SOUS PROGRAMMES *
;********************************************************************************
;********************************************************************************
; INITIALISATION *
;********************************************************************************
init
; initialisation du PORTC en entrée
BANKSEl PORTC ; passage en banque 0
clrf PORTC ; RAZ des bascules D du port B
BANKSEL TRISC ; passage en banque 1
movlw 0xFF
movwf TRISC ; PORTC en entrée pour utiliser l'usart
; initialisation de l'USART
BANKSEL SPBRG ; passage en banque 1
movlw d'25' ; avec BRGH=1, il faut 25 dans SPBRG pour 9,6 kBd
movwf SPBRG
movlw h'24' ;
movwf TXSTA ; 8 bits, autorisé, asynchrone, haute vitesse
BANKSEL RCSTA ; passage en banque 0
movlw h'80'
movwf RCSTA ; port série
; initialisation du Timer 1 :division par 8 de l'horloge interne
BANKSEL T1CON ; passage en banque 0
movlw b'00110001' ; T1CGPS1=1 T1CGPS0=1 T1OSCEN=0 TMR1CS=0 TMR1ON=1
movwf T1CON ; predivision TMR1 timer 1:8, hor ext off, hor int
; timer on
return
;********************************************************************************
; TEMPORISATION 100ms *
;********************************************************************************
; fréquence du quartz : 4 MHz, temps de cycle 1 µs , prédivision : 8
; 2E16 - 100ms/8µs= 53036d = CF2Ch
tempo
movlw 0x2C
movwf TMR1L ; initialisation de TMR1L
movlw 0xCF
movwf TMR1H ; initialisation de TMR1H
boucle_tmr
btfss PIR1,TMR1IF ; Test bit TMR1F de PIR1
goto boucle_tmr ; boucle d'attente si timer non nul
bcf PIR1,TMR1IF ; RAZ du drapeau
return
;********************************************************************************
; EMISSION *
;********************************************************************************
emission
movwf TXREG ; le caractère dans W est prêt à être émis
boucle_emission
btfss PIR1,TXIF ; attente de l'envoi du dernier bit
goto boucle_emission
return
;*****************************************************************************
; TABLE *
;********************************************************************** *******
MESSAGE
ADDWF PCL,F
DT "Salam Aleikum" ; directive de définition d'une table de caractère
RETLW h'0D' ; Retour chariot
RETLW h'00' ; indicateur de fin de message
;*****************************************************************************
END