PDA

Visualizza la versione completa : Definire il microchip in Assembler


Kontrofakocero
18-11-2003, 23:11
Ciao ragazzi.
Un mio amico mi ha spedito una mail sperando che io fossi in grado di modificare l'init del tipo di processore nei suoi programmi in Assembler, mentre io arrivo al massimo a VB.
Sono programmi per controllare delle luminarie natalizie, vi espongo la mail:

il programma 4piovar.asm è funzionante con il microprocessore microchip 12c/508a/509a devo usare lo stesso programma utilizando un micro pic 12c671 sempre microchip. Le piedinature corrispondono.
Ilfile luci4can.asm è un programma funzionante con il modello 12c671 ma ha una grande differenza e cioè che sfrutta le funzioni analogiche dello stesso 12c671 e utiliza il proprio oscillatore interno oltre che chiaramente usa delle macro.Guardando la semplicità del mio programma 4piovar.asm la differenza da colmare stà nella parte INIT
infatti il processore 12c509 ha solo un cosidetto Bank0
mentre il 12c671 ha bank0 e bank1 e le uscite da configurare sono sul bank1 che va prima inizializato.


Ecco il programma 4piovar.asm:
__________________________________________________ __________________
;************************************************* *******
; *
; 4PIVAR.asm *
; PIOGGIA VARIABILE *
; con 12c509 *
; (c) 2000, Sabetta GIOVANNI *
; Verificato il 29-12-01 trimmer da 100K; RESISTENZA *
; 10K COND.POL. 10NANO *
; EXT.RC MASTERCLEAR INT. WATCHDOG OFF *
;************************************************* *******

processor 12c509a
include "p12c509a.inc"




CONTATORE_1 equ 0Ch ;Contatore RITARDO ACCENSIONE
CONTATORE_2 equ 0Dh ;Contatore RITARDO ACCENSIONE
CONTATORE_3 equ 0Eh ;Contatore NUMERO DI VOLTE 5


; ***************************
; * Inizializzazione *
; ***************************

org 0000H

goto INIT


DELAY

movwf CONTATORE_2 ;Ricarica Count_2
DELAY1
movlw 2h ;Poni in W il numero 20h
movwf CONTATORE_1 ;Ricarica Count_1
DELAY2
decfsz CONTATORE_1,1 ;Decrementa Count_1
goto DELAY2 ;Se non è a 0 vai a Delay
decfsz CONTATORE_2,1 ;Decrementa Count_2
goto DELAY1 ;Se non è a 0 vai a Delay
retlw .0 ;Torna al programma principale

INIT
clrf STATUS

movlw b'11000000' ;Inizializzazione timer
option
movlw b'00000000' ;Preset uscite a zero
movwf GPIO
movlw b'11101000' ;Configurazione porta I/O
tris GPIO ;GP 0,1,2,4 output
;


; ***************************
; * Programma principale *
; ***************************
;
MAIN


TEMPO_1
movlw .15 ;VARIABILE NUMERO DI VOLTE DA RIPETERE
movwf CONTATORE_3 ;CONTATORE 3 DECREMENTA IL NUM. DI VOLTE
RIPETE_1
decfsz CONTATORE_3,f
goto TEMPO1
goto TEMPO_2 ;Torna al programma principale
TEMPO1
bsf GPIO,0 ;ACCENDE
movlw .8 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,0 ;SPEGNE
;
bsf GPIO,1
movlw .8
call DELAY
bcf GPIO,1

bsf GPIO,2 ;ACCENDE
movlw .8 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,2 ;SPEGNE
;
bsf GPIO,4
movlw .8
call DELAY
bcf GPIO,4

GOTO RIPETE_1
;
TEMPO_2
movlw .20 ;VARIABILE NUMERO DI VOLTE DA RIPETERE
movwf CONTATORE_3 ;CONTATORE N°3 DECREMENTE IL NUM. DI VOLTE
RIPETE_2
decfsz CONTATORE_3,f
goto TEMPO2
goto TEMPO_3 ;Torna al programma principale
TEMPO2
bsf GPIO,0 ;ACCENDE
movlw .7 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,0 ;SPEGNE
;
bsf GPIO,1
movlw .7
call DELAY
bcf GPIO,1

bsf GPIO,2 ;ACCENDE
movlw .7 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,2 ;SPEGNE
;
bsf GPIO,4
movlw .7
call DELAY
bcf GPIO,4

GOTO RIPETE_2
;
TEMPO_3
movlw .25 ;VARIABILE NUMERO DI VOLTE DA RIPETERE
movwf CONTATORE_3 ;CONTATORE N°3 DECREMENTE IL NUM. DI VOLTE
RIPETE_3
decfsz CONTATORE_3,f
goto TEMPO3
goto TEMPO_4 ;Torna al programma principale
TEMPO3
bsf GPIO,0 ;ACCENDE
movlw .6 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,0 ;SPEGNE
;
bsf GPIO,1
movlw .6
call DELAY
bcf GPIO,1

bsf GPIO,2 ;ACCENDE
movlw .6 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,2 ;SPEGNE
;
bsf GPIO,4
movlw .6
call DELAY
bcf GPIO,4

GOTO RIPETE_3
;
TEMPO_4
movlw .30 ;VARIABILE NUMERO DI VOLTE DA RIPETERE
movwf CONTATORE_3 ;CONTATORE N°3 DECREMENTE IL NUM. DI VOLTE
RIPETE_4
decfsz CONTATORE_3,f
goto TEMPO4
goto TEMPO_5 ;Torna al programma principale
TEMPO4
bsf GPIO,0 ;ACCENDE
movlw .5 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,0 ;SPEGNE
;
bsf GPIO,1
movlw .5
call DELAY
bcf GPIO,1

bsf GPIO,2 ;ACCENDE
movlw .5 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,2 ;SPEGNE
;
bsf GPIO,4
movlw .5
call DELAY
bcf GPIO,4

GOTO RIPETE_4
;
TEMPO_5
movlw .35 ;VARIABILE NUMERO DI VOLTE DA RIPETERE
movwf CONTATORE_3 ;CONTATORE N°3 DECREMENTE IL NUM. DI VOLTE
RIPETE_5
decfsz CONTATORE_3,f
goto TEMPO5
goto TEMPO_6 ;Torna al programma principale
TEMPO5
bsf GPIO,0 ;ACCENDE
movlw .4 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,0 ;SPEGNE
;
bsf GPIO,1
movlw .4
call DELAY
bcf GPIO,1

bsf GPIO,2 ;ACCENDE
movlw .4 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,2 ;SPEGNE
;
bsf GPIO,4
movlw .4
call DELAY
bcf GPIO,4

GOTO RIPETE_5

;
TEMPO_6
movlw .40 ;VARIABILE NUMERO DI VOLTE DA RIPETERE
movwf CONTATORE_3 ;CONTATORE N°3 DECREMENTE IL NUM. DI VOLTE
RIPETE_6
decfsz CONTATORE_3,f
goto TEMPO6
goto TEMPO_7 ;Torna al programma principale
TEMPO6
bsf GPIO,0 ;ACCENDE
movlw .3 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,0 ;SPEGNE
;
bsf GPIO,1
movlw .3
call DELAY
bcf GPIO,1

bsf GPIO,2 ;ACCENDE
movlw .3 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,2 ;SPEGNE
;
bsf GPIO,4
movlw .3
call DELAY
bcf GPIO,4

GOTO RIPETE_6

TEMPO_7
movlw .45 ;VARIABILE NUMERO DI VOLTE DA RIPETERE
movwf CONTATORE_3 ;CONTATORE N°3 DECREMENTE IL NUM. DI VOLTE
RIPETE_7
decfsz CONTATORE_3,f
goto TEMPO7
goto MAIN ;Torna al programma principale
TEMPO7
bsf GPIO,0 ;ACCENDE
movlw .2 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,0 ;SPEGNE
;
bsf GPIO,1
movlw .2
call DELAY
bcf GPIO,1

bsf GPIO,2 ;ACCENDE
movlw .2 ;SET TEMPO DI DELAY
call DELAY ;Routine di ritardo
bcf GPIO,2 ;SPEGNE
;
bsf GPIO,4
movlw .2
call DELAY
bcf GPIO,4

GOTO RIPETE_7

END
__________________________________________________ __________________

Lo so che è una menata ma spero di trovare qualcuno che ci aiuti a cambiare l'init di 4piovar.asm per adattarlo al 12c671.
Grazie 1000 di cuore a chi vorrà aiutarci.

$$$
19-11-2003, 15:18
se mi dici dove posso trovare i vari set
di istruzioni asm per quei microprocessori
FORSE te lo posso riscrivere....

Kontrofakocero
20-11-2003, 05:21
Ti ringrazio infinitamente per l'interesse, tuttavia il problema è proprio quello.
Il mio amico costruisce luminarie natalizie e aveva creato quel programma probabilmente prendendo spunti da altri, quindi non sa minimamente dove trovare set di istruzioni.
Figuriamoci io, non ho mai digitato 1 riga di assembler! Sono arrivato al massimo a VB.
Non so proprio dove cercare, proverò a fare una ricerca sul web... vediamo cosa salta fuori.
Intanto grazie 1000.
Ciao!

Kontrofakocero
24-11-2003, 04:15
Ricerca infruttuosa.
Qualcuno mi sa dire se i set di istruzioni si possono trovare da qualche parte?
Sono protetti per caso da copyright?
Se ho scritto qualcosa contro il regolamento avvertitemi e non si ripeterà.

Grazie 1000, ciao.

Loading