Hola, como no se nada de programacion, no se que programa usar para modificar(intentar) y compilar este programa:
*****************************************************************************************************
INCLUDE "C:\ATLPIC\PIC16F84.h"
REM Vitesse de rotation en tr/mn
char VU,VD,VC,VM,VDM REM VU Unités, VD Dizaines, VC Centaines, VM Milliers, VDM dizaines de Milliers
char I,J,K REM Comptage temporisations
char P0,P1,P2 REM Mesure de la période par tranche de 250 µs
char N REM Nombre de tours comptés lors de la mesure
char F REM Flag de passage par l'interruption ( 250 µs )
char NP0,NP1,NP2 REM Nombre de périodes dans 1 seconde
char V3,V2,V1,V0 REM Nombre représentant une seconde en additionnant les périodes
char w_temp,STATUS_temp REM Pour interruption
*****************************************************************************************************
BIT E=porta,3 REM Écriture sur front descendant Afficheur
BIT RS=porta,2 REM 0-instruction / 1-donnée Afficheur
BIT CLOCK=porta,1 REM Impulsions en provenance du capteur du moteur
*****************************************************************************************************
ORG 0x0000 REM Vecteur Reset
GOTO main
ORG 0x0004 REM Vecteur Timer
GOTO inter
ORG 0x0005
main:
trisb=0x00 REM portb en sortie ( 8 bits de donnée de l’afficheur )
trisa=0x02 REM porta en sortie ( e, RS )sauf pa1 ( CLOCK )entrée d’horloge
Option_reg=11010000b REM Interruption affectée au timer - 250µs avec quartz 8.192 MHz
intcon.7=1 REM Valide le régime général des interruptions
intcon.5=0 REM Interdit l'interruption Timer
*****************************************************************************************************
* INITIALISATION DE L’AFFICHEUR
*****************************************************************************************************
FOR I=1 TO 25 REM Attente stabilisation alim.
GOSUB Attente
NEXT I
RS=0 REM Mode instruction
portb=0x30 REM SET Afficheur, 8 bits, 1 ligne
GOSUB ImpulsE REM Impulsion de validation
FOR I=1 TO 5 REM Temporisation ( Durée d’exécution de l’instruction )
GOSUB Attente
NEXT I
portb=0x30 REM 1 ligne, 7x5
GOSUB ImpulsE
GOSUB Attente
portb=0x08 REM Display OFF
GOSUB ImpulsE
GOSUB Attente
portb=0x0C REM Display ON
GOSUB ImpulsE
GOSUB Attente
portb=0x06 REM Entry mode set
GOSUB ImpulsE
GOSUB Attente
VU=0 REM Initialisation des variables vitesse
VD=0
VC=0
VM=0
VDM=0
GOSUB Affich
*****************************************************************************************************
intcon.2=0 REM Flag Timer effacé
*****************************************************************************************************
Début:
P0=0:P1=0:P2=0 REM Nombre de tours pendant une durée minimale de 250 ms
C0:
IF CLOCK=1 THEN GOTO C0 REM Attente d'un état 0 en provenance du capteur
N=1 REM N nombre de périodes mesurées ( période = durée d’un tour )
C1:
IF CLOCK=0 THEN GOTO C1 REM Attente d'un état 1 en provenance du capteur
intcon.5=1 REM Autorise l'interruption Timer sur le front montant
TMR0=00 REM RAZ contenu du Timer
*****************************************************************************************************
* Mesure de la durée d’un tour, si cette durée dépasse 250ms ( durant un tour, CLOCK=1 puis CLOCK=0 )
* Sinon mesure de la durée de N tours
*****************************************************************************************************
C5:
IF F=1 THEN REM Si F=1 on sort d'une interruption. Il faut ajouter 250 µs à la période
F=0 REM Remettre le Flag à 0
P0=P0+1 REM Ajout de 250 µs
IF P0=100 THEN REM ( P0 évolue de 0 à 100 )
P0=0
P1=P1+1 REM Une centaine de moins pour PO, une unité de plus pour P1
END IF
IF P1=100 THEN REM ( P1 évolue de 0 à 100 )
P1=0
P2=P2+1 REM Une centaine de moins pour P1, une unité de plus pour P2
END IF
END IF
IF CLOCK=1 THEN GOTO C5 REM On recommence tant que le capteur communique un état 1
C6:
IF F=1 THEN REM Si F=1 on sort d'une interruption. Il faut ajouter 250 µs à la période
F=0 REM Remettre le Flag à 0
P0=P0+1 REM Ajout de 250 µs
IF P0=100 THEN
P0=0
P1=P1+1 REM Une centaine de moins pour PO, une unité de plus pour P1
END IF
IF P1=100 THEN
P1=0
P2=P2+1 REM Une centaine de moins pour P1, une unité de plus pour P2
END IF
END IF
IF CLOCK=0 THEN GOTO C6 REM On recommence tant que le capteur communique un état 0
IF P1>10 THEN GOTO C7 REM On arrête la mesure lorsque que la durée > 250ms ( 1000 points de 250µs )
N=N+1 REM Nbre de tours pris en compte dans la mesure
IF N=116 THEN GOTO C7 REM On arrête la mesure lorsque la vitesse est supérieure à 25 000 trs/mn
GOTO C5
*****************************************************************************************************
* Affichage en cas de dépassement
*****************************************************************************************************
C7:
intcon.5=0 REM Fin de la mesure d'une période, interruption interdite
IF P1>23 OR P2<>0 THEN REM Si vitesse < 100 trs/mn affichage <<<<<
VU=12:VD=12:VC=12:VM=12:VDM=12 REM 12 + 30 = 42 = ‘<’
gosub Conv3
goto Début
END IF
IF N=116 THEN REM Si vitesse > 24 000 trs/mn affichage >>>>>
VU=14:VD=14:VC=14:VM=14:VDM=14 REM 14 + 30 = 44 = ‘<’
gosub Conv3
goto Début
END IF
GOSUB Conv4 REM Vers la conversion du résultat
GOTO Début REM On recommence une mesure
*****************************************************************************************************
*****************************************************************************************************
* CONVERSION PERIODE FREQUENCE
*****************************************************************************************************
********** Combien de fois P est contenu dans V, le résultat est NP
Conv4:
NP0=0:NP1=0:NP2=0 REM RAZ Nombre de périodes
V3=0:V2=0:V1=0:V0=0 REM RAZ Nombre représentant la seconde
Conv9: REM Calcul du nombre de périodes contenues dans une seconde.
V0=V0+P0 REM On additionne autant de fois que nécessaire P0 et P1
V1=V1+P1 REM afin d'obtenir 1 seconde dans V3 à V0
IF V0>99 THEN
V0=V0-100
V1=V1+1
END IF
IF V1>99 THEN
V1=V1-100
V2=V2+1
END IF
IF V2>99 THEN
V2=V2-100
V3=V3+1
END IF
NP0=NP0+1 REM NP0 et NP1 nombre de périodes durant une seconde
IF NP0=100 THEN REM Chaque fois, que l’on a ajouté P à V, on incrémente NP
NP0=0
NP1=NP1+1
END IF
IF NP1=100 THEN
NP1=0
NP2=NP2+1
END IF
IF V3=N THEN GOTO Conv10 REM N nombre de tours dont on a mesuré la période
GOTO Conv9 REM La conversion n’est pas terminée
*****************************************************************************************************
* MULTIPLICATION PAR 24 DE LA VITESSE ( 4 pour 4 x 250 µs = 1 ms et 6 pour 60 s dans 1 mn )
*****************************************************************************************************
Conv10:
P0=0:P1=0:P2=0 REM Résultat de l’opération dans P
Mult0:
IF NP0=0 THEN GOTO Mult1 REM On additionne NP fois 24
P0=P0+24
IF P0>99 THEN
P0=P0-100
P1=P1+1
END IF
IF P1>99 THEN
P1=0
P2=P2+1
END IF
NP0=NP0-1
GOTO Mult0
Mult1:
IF NP1=0 THEN GOTO Mult2
P1=P1+24
IF P1>99 THEN
P1=P1-100
P2=P2+1
END IF
NP1=NP1-1
GOTO Mult1
Mult2:
IF NP2=0 THEN GOTO DIVF
P2=P2+24
NP2=NP2-1
GOTO Mult2
*****************************************************************************************************
* CONVERSION DE P EN CODE DCB, LE RESULTAT EST DANS V ( VDM à VU )
*****************************************************************************************************
DivF:
VU=0:VD=0:VC=0:VM=0:VDM=0
Conv1:
IF P1=0 THEN GOTO Conv2 REM Conversion en DCB de P1 et P2
P1=P1-1
VU=VU+1
IF VU=10 THEN
VU=0
VD=VD+1
END IF
IF VD=10 THEN
VD=0
VC=VC+1
END IF
IF VC=10 THEN
VC=0
VM=VM+1
END IF
GOTO Conv1
Conv2:
IF P2=0 THEN GOTO Conv3
P2=P2-1
VC=VC+1
IF VC=10 THEN
VC=0
VM=VM+1
END IF
IF VM=10 THEN
VM=0
VDM=VDM+1
END IF
GOTO Conv2
Conv3:
GOSUB Affich REM Affichage de la vitesse de rotation
TMR0=0 REM Initialisation du contenu du Timer
intcon.2=0 REM Prochaine interruption Timer prise en compte
intcon.5=1 REM Les interruptions Timer sont autorisées
RETURN
*****************************************************************************************************
* AFFICHAGE DU RESULTAT – Les 0 non significatifs ne sont pas affichés
*****************************************************************************************************
Affich:
RS=0 REM Mode Instruction
portb=0X02 REM Home
GOSUB ImpulsE
FOR J=1 TO 50 REM Durée de l'attente d’exécution de l’instruction Home
GOSUB Attente
NEXT J
RS=1 REM Mode Donnée
portb='V' REM Affichage de V
GOSUB ImpulsE
GOSUB Attente
portb=' ' REM Affichage d'un espace
GOSUB ImpulsE
GOSUB Attente
portb='=' REM Affichage de =
GOSUB ImpulsE
GOSUB Attente
portb=' ' REM Affichage d'un espace
GOSUB ImpulsE
GOSUB Attente
portb=VDM+0x30 REM Affichage des Dizaines de Milliers
IF VDM=0 THEN REM Le chiffre + 30 donne le code du caractère ASCII à afficher
portb=' ' REM Si le chiffre des dizaines milliers est nul, affichage d'un espace
END IF
GOSUB ImpulsE
GOSUB Attente
portb=VM+0x30 REM Affichage des Milliers
IF VM=0 AND VDM=0 THEN
portb=' ' REM Si les milliers et dizaines de milliers sont nuls, affichage d'un espace
END IF
GOSUB ImpulsE
GOSUB Attente
portb=VC+0x30 REM Affichage des Centaines
GOSUB ImpulsE
GOSUB Attente
portb=VD+0x30 REM Affichage des Dizaines
GOSUB ImpulsE
GOSUB Attente
portb=VU+0x30 REM Affichage des Unités
GOSUB ImpulsE
GOSUB Attente
portb=' ' REM Affichage d'un espace
GOSUB ImpulsE
GOSUB Attente
portb='t' REM Affichage de tr/mn
GOSUB ImpulsE
GOSUB Attente
portb='r' REM
GOSUB ImpulsE
GOSUB Attente
portb='/' REM
GOSUB ImpulsE
GOSUB Attente
portb='m' REM
GOSUB ImpulsE
GOSUB Attente
portb='n' REM
GOSUB ImpulsE
GOSUB Attente
portb=' ' REM Affichage d'un espace
GOSUB ImpulsE
GOSUB Attente
RETURN
*****************************************************************************************************
* IMPULSION POSITIVE SUR LA BROCHE E
*****************************************************************************************************
ImpulsE:
E=1
FOR I=1 TO 30
NOP REM Durée de l'impulsion
NEXT I
E=0
RETURN
********* SOUS-PROGRAMME DE TEMPORISATION **********
Attente:
FOR K=1 TO 30
NOP
NEXT K
RETURN
*****************************************************************************************************
* INTERRUPTION
*****************************************************************************************************
inter:
asm movwf w_temp ; Sauvegarde des registres W et STATUS
asm swapf STATUS,0
asm movwf status_temp
intcon.2=0 REM Prochaine interruption du Timer prise en compte
F=1 REM Forçage F = 1, indique au programme principal que l'on vient de passer une inter.
asm swapf status_temp,0 ; Restitution des registres W et STATUS
asm movwf STATUS
asm swapf w_temp,1
asm swapf w_temp,0
asm retfie
END
Lo unico que quiero modificar son las letras del display. Saludos y gracias.