Merhaba
Bu dosya işinize yarar mı?
bartnl.rar
aşagıdaki asm kodlarını birtürlü hex dosyasını oluşturamadım..bana yardımcı olurmusunuz lütfen bu konuda bunu kısa zamanda yapmam lazım yardımlarınızı bekliyorum..
libre -| RA2 \/ RA1 |- LCD 04 RS
' controle mesure -| RA3 RA0 |- LCD 06 E
' entree mesure -| RA4 OSC1 |- 4 Mhz
' + 5 Volts -| MCLR OSC2 |- 4 MHz
' MASSE -| GND VCC |- + 5 Volts
' libre -| RB0 RB7 |- LCD 14 DATA
' PLUS BOUTON -| RB1 RB6 |- LCD 13 DATA
' MOINS BOUTON -| RB2 RB5 |- LCD 12 DATA
' MENU BOUTON -| RB3 RB4 |- LCD 11 DATA
' ------------------
'
'
' LCD 01 MASSE
' LCD 02 +5 volts
' LCD 03 point milieu d'un pot de 10k les 2 autres points sont masse et 5v
' LCD 05 RW à la masse
' LCD 07 à 10 non connectés
' les lignes des boutons sont au plus 5 volts par une resistance de 10K et actives par mise a la masse
' RA3 ET RA4 sont reliées entre elles et forment l'entrée du frequencemetre par une resistance de 470 Ohms serie
'*******************************************************************
' L'amplificateur est constitué d'un 2N2369 en émetteur commun (à la masse),
' résistance de 560 Ohms (reliée au +5volts) dans le collecteur et résistance de 39K entre collecteur et base.
' Entrée par la base via une capa, sortie sur le collecteur vers la resistance
' d'entrée du fréquencemètre (470 Ohms -> RA4).
'******************************** LCD ***********************************
DEFINE LCD_DREG PORTB 'datas sur port B
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTA 'Register Select sur RA1
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTA 'Enable sur RA0
DEFINE LCD_EBIT 0
DEFINE LCD_BITS 4 'Mode 4 bits
DEFINE LCD_LINES 2 'LCD 2 lignes de 16 caractères
'*********************************** VARIABLES *********************
FREQ0 VAR WORD
FREQ VAR WORD
FRE VAR WORD
FREQH VAR WORD
FREQL VAR WORD
FHI VAR BYTE
FLO VAR BYTE
FLAG VAR BYTE
COUNT1 VAR BYTE
TRISABUF VAR BYTE
BMENU VAR PORTB.3
PLUS VAR PORTB.1
MOINS VAR PORTB.2
MENU VAR BYTE
TEMPS VAR BYTE
P VAR WORD 'valeur du prédiviseur
P2 VAR BYTE
B1 VAR BYTE
IND VAR BYTE
B3 VAR BYTE
B4 VAR BYTE
FR VAR BYTE
'*********************************** INITIALISATION ASM ***************
Asm
movlw 0x10 ;PORTA 4 en entree
movwf 0x5
MOVLW 0x37
option ;charge 00100111 dans le registre option
MOVLW 0x10 ;init freq avec RA4 en entrée
MOVWF _trisabuf
EndAsm
'********************************* INITIALISATION BASIC **************
MENU =2
TEMPS=5
'****************** LECTURE DE LA VALEUR DU PREDIVISEUR ***********
READ 1, FLAG
IF FLAG = 55 THEN
READ 2,P.BYTE0
READ 3,P.BYTE1
ELSE
P= 256 'valeur par défaut
ENDIF
PAUSE 100
LCDOUT $FE,1," FREQUENCEMETRE"
LCDOUT $FE,$C0," F6CSX - V 4.7"
PAUSE 500
'************************************************************************
MAIN:
BUTTON BMENU,0,255,0,B4,1,MEN
GOTO TESTE
MEN: MENU=MENU+1
TESTE: IF MENU = 2 THEN NORMAL
IF MENU = 3 THEN PREDIV
IF MENU = 4 THEN BASE_TEMPS
IF MENU > 4 THEN MENU = 2
PAUSE 300
GOTO MAIN
'************************** CHOIX DU PREDIVISEUR *********************
PREDIV:
LCDOUT $FE,1,"* PREDIVISEUR *"
LCDOUT $FE,$C0," P= ",#P
LOOP1: BUTTON PLUS,0,10,5,B1,1,PICK1 'Va à pick1 si bouton PLUS appuyé
BUTTON MOINS,0,10,5,B3,1,PICK2
BUTTON BMENU,0,255,0,B4,1,MEN
PAUSE 100
GOTO LOOP1
PICK1: IND = IND + 1
IF IND< 9 THEN CHOIX
IND= 0
GOTO CHOIX
PICK2: IF IND = 0 THEN SAUTE
IND = IND - 1
GOTO CHOIX
SAUTE: IND = 8
CHOIX: LOOKUP2 IND,[10,16,32,40,64,80,128,256,512],P
LCDOUT $FE,1,"* PREDIVISEUR *"
LCDOUT $FE,$C0," P= ",#P
WRITE 1 , 55
WRITE 2 , P.BYTE0 ' SAUVE LA VALEUR DE P
WRITE 3 , P.BYTE1
GOTO MAIN
'*********************** MODIF BASE DE TEMPS ************************
BASE_TEMPS:
IF PLUS=0 THEN
TEMPS=TEMPS+1
ENDIF
IF MOINS=0 THEN
TEMPS=TEMPS-1
ENDIF
LCDOUT $FE,1,"TEMPS:",#TEMPS," "
PAUSE 300
GOTO MAIN
'************************* MESURE ET AFFICHAGE***********************
NORMAL:
GOSUB MESURE
'********************* FREQUENCE LUE SUR L' ENTREE DU PIC ************
FREQ= (FHI*256)+FLO 'Mise sur 16 bits du résultat de mesure
FREQH=FREQ / 5
FREQL=FREQ //5
FR=FREQL*2
FRE=FREQH
LCDOUT $FE,1,"FREQ ",#FRE,".",#FR," KHz "
'****************** FREQUENCE A L'ENTREE DU PREDIVISEUR **************
P2=P/2
FREQH=FREQ / 250
FREQL=FREQ //250
FREQH=FREQH*P2 'Valeur du prédiviseur / 2
FREQL=FREQL*P2 'Valeur du prédiviseur / 2
FREQL=FREQL/250
FREQ=FREQH+FREQL
FREQH= FREQ/10
FREQL= FREQ-(FREQH*10) 'un seul chiffre après la virgule
' *** AFFICHAGE FREQUENCE SUR LA 2ÈME LIGNE ***
LCDOUT $FE,$C0,"x",#P," ",#FREQH,".",#FREQL," MHz"
PAUSE 500
GOTO MAIN
'********************* ROUTINE DE MESURE ***************************
MESURE:
Asm
;;;;;;;;;;;;;;;;;;;;;;;;;;;; AUTORISATION DU COMPTAGE
clrf TMR0 ; RAZ timer
bsf _trisabuf,3 ; RA4 en entrée et RA3 en entrée autorisation comptage
movf _trisabuf,W
tris PORTA
;;;;;;;;;;;;;;;;;;;;;;;;;;;; BASE DE TEMPS
movf _TEMPS,W
movwf _COUNT1
dxxx nop
decfsz _COUNT1
GoTo dxxx
nop
nop
Call delay
Call delay
Call delay
Call delay
Call delay
;;;;;;;;;;;;;;;;;;;;;;;;;;; ARRET DU COMPTAGE
bcf _trisabuf,3 ;RA4 en entrée et RA3 en Sortie pour bloquer le comptage
movf _trisabuf,W
tris PORTA
;;;;;;;;;;;;;;;;;;;;;;;;;;; RECUPERATION DES COMPTEURS
calcul MOVF TMR0,W ;timer -> travail
MOVWF _FHI ;travail -> FHI 8 bits de poids fort comptage
clrf _COUNT1 ;remise a zero compteur
Toggle incf _COUNT1,F ;incrementation du compteur
bsf PORTA,3 ;RA3 a 1
bcf PORTA,3 ;RA3 a 0
movf TMR0,W ;lecture du timer
subwf _FHI,w ;on regarde si le prediviseur a incrementé le timer
btfsc STATUS,2 ;comparaison
GoTo Toggle ;si le timer a pas incrementé on recommence
comf _COUNT1,F ;complement au compteur
incf _COUNT1,W ;incrementation du compteur
movwf _FLO ;travail -> FLO 8 bits de poids faible comptage
GoTo fin
;;;;;;;;;;;;;;;;;;;;;;;;;;; BASE DE TEMPS
delay movlw 197 ; 1ms selon AN592
movwf _COUNT1 ;
nop ;
GoTo $+1 ;
GoTo $+1 ;
dly GoTo $+1 ;
decfsz _COUNT1 ;
GoTo dly ;
Return ;
fin
EndAsm
RETURN
Merhaba
Bu dosya işinize yarar mı?
bartnl.rar
Şu anda 1 kullanıcı bu konuyu görüntülüyor. (0 kayıtlı ve 1 misafir)