
;Program pro automatické řízení otevírání a zavírání vrat
;PO stusknutí tlačítka open(0.bit A) otevře
;PO stusknutí tlačítka clos(1.bit A) zavře
;Na začátku a konci jsou dvě čidla(abych poznal zda už je otevreno resp. zavreno)



;----------------------------------------------------------------------------------------------------------------------------------------------------------

LIST P=16F84, R=DEC
INCLUDE<P16F84.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _RC_OSC

;----------------------------------------------------------------------------------------------------------------------------------------------------------

#DEFINE  OPEN PORTA,0 		;tlačítko pro otevírání                         			P
#DEFINE  CLOSE PORTA,1 		;tlačítko pro zavírání							R
#DEFINE  END PORTA,2 		;čidlo že už je zavřeno	(kdyz sepne, je zavřeno)		        O
#DEFINE  START PORTA,3 		;čidlo že už je otevřeno(kdyz je v nule, je otevreno)			M	
													E
													N	
#DEFINE  MOTOR1 PORTB,0		;první vývod k motoru	 						N	
#DEFINE  MOTOR2 PORTB,1		;druhý vývod k motoru							E


  

;-----------------------------------------------------------------------------------------------------------------------------------------------------------


BSF STATUS,RP0                     ;přepnutí do banky jedna - vté musím nastavit co bude vstup  a co výstup
MOVLW B'00000000'                  ;do pracovního registru vložím hodnotu '00000000'
MOVWF TRISB			   ;obsah W registru přesunu do registru TRISB => všechny výstupní
MOVLW B'11111111'		   ;do pracovního registru vložím hodnotu  11111111
MOVWF TRISA			   ;obsah w registru přesunu do registru TRISA => všechny bity budou vstupní
BCF STATUS,RP0        		   ;návrat zpět do banky 0


;---------------------------------------------------------------------------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------------------------------------------------------------------------


zacatek  MOVLW    B'00000000'      ;posilam 00000000 do pracovniho(w) registru 	       
         MOVWF PORTB		   ;hodnotu W přesunu do PORTB(=>motor stojí)
	 

	 BTFSS OPEN		   ;testuji vstup na kerém mám připojené tlačítko(RPA0), je-li v jedničce přeskočí jednu následující instrukci, (je-li vnule nepřeskočí)
	 GOTO test1                ;skok na navesti test1
	 BTFSS CLOSE		   ;testuji vstup na kterém mám připojené tlačítko(RPA1), je-li v jedničce přeskočí jednu následující instrukci
         GOTO zacatek	           ;nepodmíněný skok na začátek
	 GOTO test2		   ;nepodmíněný skok na test2	
	 GOTO zacatek		   ;a celé znova
		


test1  	BTFSS START		   ;testuji jestli už není otevřeno
	GOTO zacatek		   ;pokud už je otevřeno, skáču na začátek			
	GOTO opening		   ;pokud ne, volám podprogram otevírání	
        GOTO zacatek		   ;nepodmíněný skok na začátek


test2  	BTFSS END		   ;testuji jestli už není zavřeno
	GOTO zacatek		   ;pokud už je zavreno, skáču na začátek			
	GOTO closing		   ;pokud ne, volám podprogram zavírání
	GOTO zacatek		   ;nepodmíněný skok na začátek



;-----------------------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------------------------

opening   NOP			  ;tato instrukce neděá vůbec nic, je tu jen pro přehlednost a zkoušku
 moto	  MOVLW    B'00000001'    ;podprogram pro otevírání 
	  MOVWF    PORTB	  ;do portu B posílám '00000001' => LED 1 bude svítit
	  BTFSS START		  ;testuji čidlo START
	  GOTO zacatek		  ;je-li už otevřeno, skáču na navěstí začátek
	  GOTO moto               ;nepodmíněný skok na návěstí opening
                  
;----------------------------------------------------------------------------------------------------------------------------------------------------------

closing   NOP		       	  ;tato instrukce neděá vůbec nic, je tu jen pro přehlednost a zkoušku	
 motc	  MOVLW    B'00000010'    ;podprogram pro zavírání
	  MOVWF    PORTB	  ;do portu B posílám '00000001' => LED 2 bude svítit
	  BTFSS END               ;testuji čidlo END
	  GOTO zacatek            ;je-li už zavřeno, skáču na začátek
	  GOTO motc               ; nepodmíněný skok na motc




				
;-----------------------------------------------------------------------------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------------------------------------------------------------------------


END					;konec programu













































