Program ASM: ; Signalizace železničního přejezdu - Projekt 013 ; nastavení typu mikrokontroléru LIST p=12F1822 #INCLUDE ; základní konfigurační soubory programování __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF __CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF ; Definice adres proměnných CBLOCK 0x20 del1 ; proměnná časovače del2 ; proměnná časovače del3 ; proměnná časovače del4 ; proměnná časovače del5 ; proměnná časovače del6 ; proměnná časovače ENDC ; Definice periférií #define R1 porta,0 ;LED červená na pinu RA0 #define R2 porta,1 ;LED červená na pinu RA1 #define W1 porta,2 ;LED bílá na pinu RA2 #define TL porta,4 ;tlačítko na pinu RA4 #define BZU porta,5 ;piezo bzučák na pinu RA5 ORG 0 ; program začíná na adrese 0 ; Nastavení registrů NASTAVENI BANKSEL PORTA ; výběr PORTA CLRF PORTA ; smazat piny PORTA BANKSEL LATA ; výběr registru LATA CLRF LATA ; smazat LATA BANKSEL ANSELA ; výběr analogové/digitální vstupy CLRF ANSELA ; nastavení všech výstupů jako digitál (digi=0, analog=1) BANKSEL TRISA ; volba vstupů (1) a výstupů (0) MOVLW B'00011000' ; RA3, RA4 vstupy, ostatní výstupy MOVWF TRISA ; nastavení vstupů/výstupů BANKSEL OSCCON ; registr nastavení frekvence oscilátoru MOVLW B'01100010' ; 2 MHz, interní oscilátor MOVWF OSCCON ; nastavení oscilátoru BANKSEL OPTION_REG BCF OPTION_REG, 7 ; nastavení možnosti pull-up odporů BANKSEL WPUA BSF WPUA, WPUA4 ; nastavení pull-up odporu na vstup tlačítka RA4 BANKSEL PORTA ; přepnutí do banky s PORTA ; Hlavní program S1 BTFSC TL ; Je sepnuto tlačítko? GOTO BILA ; pokud ne (TL=1) jdi na BILA BSF R1 ; pokud ano (TL=0) zapni červenou LED 1 CALL CASREDA ; čekej a pískej tón 1 BCF R1 ; vypni červenou LED 1 BSF R2 ; zapni červenou LED 2 CALL CASREDB ; čekej a pískej tón 2 BCF R2 ; vypni červenou LED 2 GOTO S1 ; jdi na S1 BILA BSF W1 ; zapni bílou LED CALL CASBILA ; čekej interval bílé BCF W1 ; vypni bílou LED CALL CASBILA ; čekej interval bílé GOTO S1 ; jdi na S1 ; ČASOVACÍ PODPROGRAM PRO BÍLOU CASBILA MOVLW .70 ; přesuň konstantu do del1 přes W MOVWF del1 CASBILA1 MOVLW .100 ; přesuň konstantu do del2 přes W MOVWF del2 CASBILA2 MOVLW .20 ; přesuň konstantu do del3 přes W MOVWF del3 CASBILA3 DECFSZ del3,f ; odečítej 1 od del3 GOTO CASBILA3 ; pokračuj v odečítání až do nuly, jinak přeskoč DECFSZ del2,f ; odečítej 1 od del2 GOTO CASBILA2 ; pokračuj v odečítání až do nuly, jinak přeskoč DECFSZ del1,f ; odečítej 1 od del1 GOTO CASBILA1 ; pokračuj v odečítání až do nuly, jinak přeskoč RETURN ; ČASOVACÍ PODPROGRAM PRO ČERVENOU 1 CASREDA MOVLW .1 MOVWF del1 CASREDA1 MOVLW .3 MOVWF del2 CASREDA2 MOVLW .150 MOVWF del3 CASREDA3 MOVLW .9 ; konstanta pro sepnutí bzučáku MOVWF del4 MOVLW .150 ; konstanta pro rozepnutí bzučáku MOVWF del5 BZUCENI BSF BZU ; zapni bzučák DECFSZ del4,f ; odečítej 1 od del4 GOTO BZUCENI ; pokračuj v odečítání až do nuly, jinak přeskoč TICHO BCF BZU ; vypni bzučák DECFSZ del5,f ; odečítej 1 od del5 GOTO TICHO ; pokračuj v odečítání až do nuly, jinak přeskoč DECFSZ del3,f ; čekání viz bílá GOTO CASREDA3 DECFSZ del2,f GOTO CASREDA2 DECFSZ del1,f GOTO CASREDA1 RETURN ; ČASOVACÍ PODPROGRAM PRO ČERVENOU 2 S JINOU FREKVENCÍ NEŽ ČERVENÁ 1 CASREDB MOVLW .1 MOVWF del1 CASREDB1 MOVLW .3 MOVWF del2 CASREDB2 MOVLW .150 MOVWF del3 CASREDB3 MOVLW .8 MOVWF del4 MOVLW .150 MOVWF del5 BZUCENI2 BSF BZU DECFSZ del4,f GOTO BZUCENI2 TICHO2 BCF BZU DECFSZ del5,f GOTO TICHO2 DECFSZ del3,f GOTO CASREDB3 DECFSZ del2,f GOTO CASREDB2 DECFSZ del1,f GOTO CASREDB1 RETURN END