SPALOVÁK 2 - program assembler

22. února 2009 v 14:41 | Hawelson |  BEAMBOTI
; ***********************************************************************************************
; * Spalovak 2 - jednoduchý program.ASM *
; ***********************************************************************************************
; * Autor: Petr Hawliczek "Hawelson", Hawelson@seznam.cz, http://hawelson.blog.cz *
; * Program: Spalovak 2 - jednoduchý program *
; * Procesor: 16F228A *
; * Popis: Ovládaní pohybů a orientace v prostoru vozítka Spalovák 2 *
; * Nastaveni: RC *
; ***********************************************************************************************




INCLUDE<P16F628.INC>
LIST P=16F628

__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_ON & _BODEN_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT

; resetovací pin je zapnutý již zde (_MCLRE_ON) , _BODEN_ON - ochrana proti podpětí

;- Proměnné ----------------------------------------------------

c1 EQU h'20' ;proměnné pro časové prodlevy
c2 EQU h'21'
c3 EQU h'22'
c4 EQU h'23'
cIR EQU h'24'


;- Definice ----------------------------------------------------

; - čidla

#DEFINE IR PORTA,2 ;IR LED ok
#DEFINE PC PORTA,4 ;Pravé IR čidlo ok
#DEFINE LC PORTA,3 ;Levé IR čidlo ok
#DEFINE KLC PORTA,1 ;Krajní levé čidlo ok
#DEFINE LSC PORTA,0 ;Levé střední čidlo ok
#DEFINE PSC PORTA,7 ;Pravé střední čidlo ok
#DEFINE KPC PORTA,6 ;Krajní pravé čidlo ok

; - Pohonný motor tranzistory

#DEFINE prvPM0 PORTB,7 ;Pohonný motor, PNP (aktivní v 0) ok
#DEFINE prvPM1 PORTB,6 ;Pohonný motor, NPN (aktivní v 1) ok
#DEFINE druPM0 PORTB,5 ;Druhý tranzistor pro pohonný motor, PNP (aktivní v 0) ok
#DEFINE druPM1 PORTB,4 ;Druhý tranzistor pro pohonný motor, NPN (aktivní v 1) ok

; - Točíci motor tranzistory

#DEFINE prvTM1 PORTB,0 ;Točící motor, NPN (aktivní v 1) ok
#DEFINE prvTM0 PORTB,1 ;Točící motor, PNP (aktivní v 0) ok
#DEFINE druTM0 PORTB,2 ;Druhý tranzistor pro točící motor, PNP (aktivní v 0) ok
#DEFINE druTM1 PORTB,3 ;Druhý tranzistor pro točící motor, NPN (aktivní v 1) ok







;- Určení startu - podprogramy na začátku programu, pak nastavení V/V a pak teprve program ----------------


ORG 00h ; na prvni pozici v pameti bude GOTO START
GOTO START



;- PODPROGRAMY --------------------------------------------------------------------------------------------

;- podprogramy čekání ---


BLIK MOVLW 100 ;LED blikne tokikrát, jaké je zde číslo (čas blikání)
MOVWF cIR
waitIR BSF IR ;podprogram blikání IR LED
CALL CEKANIIR
BCF IR
CALL CEKANIIR ;rozdělení bliktutí IR LED (1část v log 1 & 4 části v log 0)
CALL CEKANIIR
CALL CEKANIIR
CALL CEKANIIR
CALL CEKANIIR
CALL CEKANIIR
CALL CEKANIIR
CALL CEKANIIR
CALL CEKANIIR
CALL CEKANIIR
DECFSZ cIR,1
GOTO waitIR
RETURN


CEKANICOUV MOVLW 255 ;čekácí doba při couvání (po zachycení překážky čidlem)
MOVWF c3
wait3 MOVLW 255
MOVWF c2
wait2 MOVLW 50 ;zpoždění pro couvání vozítka
MOVWF c1
wait1 DECFSZ c1,1
GOTO wait1
DECFSZ c2,1
GOTO wait2
DECFSZ c3,1
GOTO wait3
RETURN ;návrat

CEKANIIR MOVLW 15 ;určení frakvence blikání IR LED (255 = 430Hz) (už vypočteno s poměrem log1/log0 = 1:2)
MOVWF c4
wait4 DECFSZ c4,1
GOTO wait4
RETURN ;návrat



; - podprogramy pohonů ---

; pohonný-


DOPREDU BSF prvPM0 ;nastavení buzení tranzistoru pro jízdu dopředu (pohonný motor)
BSF prvPM1
BCF druPM0
BCF druPM1
RETURN

STOP BCF prvPM0 ;stop pohonného motoru (zabrždění)
BCF prvPM1
BCF druPM0
BCF druPM1
RETURN

DOZADU BSF druPM0 ;nastavení buzení tranzistoru pro jízdu dozadu (pohonný motor)
BSF druPM1
BCF prvPM0
BCF prvPM1
RETURN

; točící---


TOCENIZABRZDENO BCF prvTM1 ;točíci motor zabržděn (oba NPN aktivní)
BCF druTM1
BCF prvTM0
BCF druTM0
RETURN

TOCENIDOLEVA BSF prvTM1 ;točíci motor zatáčí doleva
BSF prvTM0
BCF druTM1
BCF druTM0
RETURN

TOCENIDOPRAVA BSF druTM1 ;točíci motor zatáčí doprava
BSF druTM0
BCF prvTM0
BCF prvTM1
RETURN


;- Nastavení vstupů/výstupů + definice začátku programu ---------------------------------------------


START MOVLW B'00000111' ;typ komparatoru (off)
MOVWF CMCON
BSF STATUS,RP0 ;přepnutí banky na 1
MOVLW b'11111011' ;Pouze IR LED bude výstupní
MOVWF TRISA
MOVLW b'00000000' ;binární hodnota do W
MOVWF TRISB ;Celý port B jako výstup
BCF STATUS,RP0 ;přesun zpět do banky 0


;--- Start programu (programy vykonávající se při startu) -------------------------------------------


ZACATEK MOVLW B'11111111' ;Nahrání LOG 1 na celý port B (4 tranzistory budou aktivní a vozítko zabržděno)
MOVWF PORTB

BSF IR ;rozsvícení IR, aby vozítko zjistilo, jestli má dostatek energie (napětí poklesne)
CALL CEKANICOUV ;čekání, aby vozítko okamžitě po zvýšení napětí nejelo (chvíli na test dostatku energie)
;LED indikující IR LED se na tu dobu rozsvítí (pokud napětí vydrží, vozítko se rozjede)

MOVLW B'00000000' ;Nahrání LOG 0 na celý port B (4 tranzistory budou aktivní a vozítko zabržděno)
MOVWF PORTB ;Nyní už nebude zatěžovan násobič - bylo již ověřeno čekáním, že je dotatek energie.



ROVNEstart1 BTFSC PSC ;VYROVNÁNÍ KOL - kontrola jestli nejsou kola natočena doprava (pozor, aktivní v LOG 0)!!
GOTO ROVNEstart2
CALL TOCENIDOLEVA
CALL ROVNEstart1

ROVNEstart2 BTFSC LSC ;VYROVNÁNÍ KOL - kontrola jestli nejsou kola natočena doleva (pozor, aktivní v LOG 0)!!
GOTO STOPTOCENIstart
CALL TOCENIDOPRAVA
CALL ROVNEstart2

STOPTOCENIstart CALL TOCENIZABRZDENO ;stop vyrovanáví kol - zadrždění toč. motoru


;--- První část programu (jízda rovně)-------------------------------------------------------------


BLIKANI CALL BLIK ;blikani IR LED (zjišťování překážek)

ROZHODOVANI00 BTFSC PC ;snímá jestli jsou oba čidla v 0
GOTO PRAVECIDLO01
BTFSC LC
GOTO LEVECIDLO10

CALL DOPREDU ;ovladaní motorů
CALL TOCENIZABRZDENO

ROVNE BTFSC PSC ;kontrola jestli nejsou kola natočena doprava (pozor, aktivní v LOG 0)!!
GOTO ROVNE2
CALL TOCENIDOLEVA
CALL ROVNE

ROVNE2 BTFSC LSC ;kontrola jestli nejsou kola natočena doleva (pozor, aktivní v LOG 0)!!
GOTO STOPTOCENI
CALL TOCENIDOPRAVA
CALL ROVNE2

STOPTOCENI CALL TOCENIZABRZDENO ;stop vyrovanáví kol - zadrždění toč. motoru
GOTO BLIKANI





;--- Druhá část programu (pravé čidlo aktivní)---------------------

PRAVECIDLO01 BTFSC LC ;provede se, jestli PČ=1 a LČ=O
GOTO OBACIDLA11

CALL STOP ;ovladaní motorů
CALL TOCENIDOPRAVA

KRAJNIPRAVE BTFSC KPC ;čekání dokud pravé krajní řidlo nebude v log0 (kola jsou otočeny) (pozor, aktivní v LOG 0)!!
GOTO KRAJNIPRAVE

CALL TOCENIZABRZDENO ;ovladaní motorů
CALL DOZADU
CALL CEKANICOUV ;čekání pči couvání (couvnutí o určitou vzdálenost)

CALL STOP ;rovnání předních kol
CALL TOCENIDOLEVA

ROVNE3 BTFSS PSC ;rovnání předních kol dokončeno
GOTO ROVNE3
CALL TOCENIZABRZDENO ;zastavení toření předních kol a návrat na snímaní překážek - až po snímaní vozítko dále rozhodne, jak pojede

GOTO BLIKANI




;--- Třetí část programu (levé čidlo aktivní)---------------------

LEVECIDLO10 CALL STOP ;ovladaní motorů
CALL TOCENIDOLEVA

KRAJNILEVE BTFSC KLC ;čekání dokud pravé krajní řidlo nebude v log0 (kola jsou otočeny) (pozor, aktivní v LOG 0)!!
GOTO KRAJNILEVE
CALL TOCENIZABRZDENO ;ovladaní motorů
CALL DOZADU

CALL CEKANICOUV ;čekání pči couvání (couvnutí o určitou vzdálenost)

CALL STOP ;rovnání předních kol
CALL TOCENIDOPRAVA


ROVNE4 BTFSS LSC ;rovnání předních kol dokončeno
GOTO ROVNE4

CALL TOCENIZABRZDENO ;zastavení toření předních kol a návrat na snímaní překážek - až po snímaní vozítko dále rozhodne, jak pojede

GOTO BLIKANI






;--- Čtvrtá část programu (oba čidla aktivní)---------------------

OBACIDLA11 GOTO LEVECIDLO10
END
END
 

2 lidé ohodnotili tento článek.