Convertir un program du asm vers pic c compil

Fermé
marwamarwetta - 19 févr. 2010 à 13:12
DrNitro Messages postés 681 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 5 janvier 2015 - 19 févr. 2010 à 13:48
Bonjour,
je suis une étudiante,je suis entrain de faire un projet de fin d'étude.
j'ai un programme en assembleur,je veux le convertir en pic c compiler.
je vous demande avec mes respects de m'aider à trouver le programme correcte en pic c compile.
voici le programme en assembleur:

DEFINE OSC 20
DEFINE LOADER_USED
DEFINE CHAR_PACING 1000 ' Utilise un bootloade
include "modedefs.bas"
;***initialisation de l'afficheur lcd
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 0
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50
;***declaration des registres et des variables
TRISE =$00
TRISA=%011101
TRISC= %01111110
TRISD=$07
PORTE=$00
PORTD=$88
RANG VAR BYTE
TOMPAN VAR BYTE
COLONE VAR BYTE
KAY VAR BYTE[4]
ADR VAR BYTE
AFFI VAR BYTE
ADRSS VAR BYTE
NADRSS VAR BYTE
I VAR BYTE
J VAR BYTE
CPT VAR BYTE
CONT VAR BYTE
B0 VAR BYTE
etat var byte
code VAR byte[6]
codes VAR byte[5]
r VAR WORD
COD VAR BYTE
temp VAR BYTE
AD VAR BYTE
valeur var byte
index var byte [10]
;***enregestrem ent des chiffres du clavier
INDEX[0]= $42
INDEX[1]= $0C
INDEX[2]= $0A
INDEX[3]= $09
INDEX[4]= $14
INDEX[5]= $12
INDEX[6]= $11
INDEX[7]= $24
INDEX[8]= $22
INDEX[9]= $21
code[0]="0"
code[1]="6"
code[2]="5"
code[3]="5"
code[4]="4"
code[5]="8"
;***declaration des symboles et des variables utilisées par l'horloge
SDA var PORTC.4
SCL var PORTC.3
sec VAR BYTE
mnt var byte
hour var byte
month var byte
day var byte
year var byte
;***programme principale
debut: PORTE=%010
LCDOut $FE,$01
LCDOUT "tapez le code"
CONT=3
etat=0
r=0
PROG: FOR J=0 TO 3
ETQ: RANG =%00001000
TOMPAN =%00000000
LOOP: POKE PORTD,RANG
COLONE=0
IF PORTD.2=1 THEN AFF
COLONE=1
IF PORTD.1=1 THEN AFF
COLONE=2
IF PORTD.0=1 THEN AFF
if J=0 then completer
if r=20000 then debut
r=r+1
completer:
IF RANG=$40 THEN ETQ
RANG=RANG*2
TOMPAN=TOMPAN+3
IF PORTC.5=1 THEN ajout
IF PORTC.2=1 THEN suprimer
GOTO LOOP
AFF : if etat=1 then rest
LCDOUT $FE,$01
etat=1
rest: KAY[J]=PORTD
LCDOUT "*"
PAUSE 20
NEXT J
ADRSS=0
GOSUB recherche
GOTO ETQ3
END
;***sous programme si code correcte
ETQ1: LCDOUT $FE,$01
LCDOUT "code correcte "
LCDOUT $FE,$C0
LCDOUT "Acces autorise"
PORTE=%001
HIGH PORTA.5
pause 100
LOW PORTA.5
PAUSE 200
GOTO debut
;***sous programme si code incorrecte
;si conteur ccont=0
ETQ3: CONT=CONT-1
IF CONT<>0 THEN CODE2
LCDOUT $FE,$01
LCDOUT "code incorrecte"
LCDOUT $FE,$C0
LCDOUT "Acces refuse"
pause 100
LCDOUT $FE,$01
FOR J=0 TO 3
LCDOUT "ALARM"
SOUND PORTA.1,[250,10]
LCDOUT $FE ,$01
NEXT J
GOTO debut
; si conteur cont#0
CODE2: LCDOUT $FE,$01
LCDOUT "attention"
PAUSE 10
LCDOUT $FE ,$01
PAUSE 10
LCDOUT "attention"
pause 10
lcdout $FE,$C0
lcdout "repetez le code"
PAUSE 10
let etat=0
GOTO PROG
;****sous programme recherche
recherche: FOR J=0 TO 3
READ ADRSS,CPT
IF KAY[J]<>CPT THEN passer
ADRSS=ADRSS+1
next J
goto temps
return
passer: adrss=adrss-j
if adrsS>=255 THEN ETQ3
ADRSS= adrss+5
goto recherche
;*** suos programme acceetemps
temps : read adrss,temp
if temp="A" then etq1
if temp="P" then personnelP
if temp="S" then personnelS
personnelP: I2CREAD SDA,SCL,$D1,$00,[sec,mnt,hour,day,month,year]
IF (HOUR>=$08 AND hour<$16 ) THEN etq1
goto etq3
personnelS: I2CREAD SDA,SCL,$D1,$00,[sec,mnt,hour,day,month]
IF (HOUR>=$16 and hour<$24) THEN etq1
goto etq3
ajout: PORTE=%100
adrss=adr
LCDOUT $FE,$01
gosub motdepasse
miseajour:
SEROUT2 PORTC.0,T2400,["Tapez le code",13,10]
SEROUT2 PORTC.7,T2400,["Tapez le code",13,10]
ADR=ADRSS+5
FOR J=0 TO 3
B0=0
SERIN2 PORTC.1,T2400,[B0]
WRITE ADRSS,INDEX[B0-$30]
ADRSS=ADRSS+1
NEXT J
SEROUT2 PORTC.0,T2400,["donnez la classe",13,10]
SERIN2 PORTC.1,T2400,[B0]
WRITE ADRSS,B0
SEROUT2 PORTC.0,T2400,["voulez-vous ajoutez un autre code",13,10]
SERIN2 PORTC.1,T2400,200,DEBUT,[wait ("OK")]
ADRSS=ADRSS+1
goto miseajour
;***suprimer une code
suprimer: PORTE=%100
LCDOUT $FE,$01
gosub motdepasse
;entrer le code a suprimer
SEROUT2 PORTC.0,T2400,["tapez le code",13,10]
FOR J=0 TO 3
B0=0
SERIN2 PORTC.1,T2400,[B0]
codes[j]=INDEX[B0-$30]
NEXT J
SEROUT2 PORTC.0,T2400,["donnez la classe",13,10]
SERIN2 PORTC.1,T2400,[B0]
codes[j]=B0
;chercher le code dans la base
ADRSS=0
contenu: FOR J=0 TO 3
READ ADRSS,CPT
IF codes[J]<>CPT THEN passe
ADRSS=ADRSS+1
next J
goto exist
passe: adrss=adrss-j
if adrsS>=255 THEN fin
ADRSS= adrss+5
goto contenu
; suprimer le code
exist: nADRSS=ADRSS-5
FOR ADRSS=ADRSS TO 255
READ ADRSS,KAY
WRITE NADRSS,KAY
nADRSS=nADRSS+1
NEXT ADRSS
SEROUT2 PORTC.0,T2400,["voulez-vous suprimer un autre code",13,10]
SERIN2 PORTC.1,T2400,200,DEBUT,[wait ("OK")]
goto suprimer
motdepasse: SEROUT2 PORTC.0,T2400,["tapez le mot de passe",13,10]
FOR J=0 TO 5
SERIN2 PORTC.1,T2400,[b0]
IF code[j]<>b0 THEN faux
NEXT J
return
faux: SEROUT2 PORTC.0,T2400,[" code incorecte",13,10]
GOTO motdepasse
fin: SEROUT2 PORTC.0,T2400,["ce code n'existe pas",13,10]
goto debut




SVP j'attend vos réponces .
voici mon e-mail:marwaderwich@yahoo.fr
merci d'avance
A voir également:

1 réponse

DrNitro Messages postés 681 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 5 janvier 2015 99
19 févr. 2010 à 13:48
salut;
Ben deja ill faut configurer le pic l'oscillateur et le LCD par logiciel
et ensuite tu ecris le programme en C (pour pic)
et enfin aide toi d'un tuto:
https://www.technologuepro.com/microcontroleur/Tutorial_PIC_Ccompiler.htm
0