D
duky
Guest
dokazal by nekdo poradit jak tento projekt upravit aby se po sepnuti tlacitka ledka zapne a po vypnuti tlacitka se ledka zase vypne? dole je to cely zabaleny kdo by to dokazal nejak rozlousknout je pro me buh, zdrojak pred modifikaci vypada asi takhle
Code:
list p=16F84A ; list directive to define processor
#include <p16F84a.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** CONSTANTS DEFS (oblast definic konstant)
_option SET 3 ; option registr, hodn 8
_int SET 20 ; vypiname GIE kvuli prvni inicialzaci nebot se nam rozbehne casovac
_delay SET .256-.250 ; pro TMRo hodnota, je vzdy roven 256 - prislusne zpozdeni
_porta SET B'11111101'
;***** VARIABLE DEFINITIONS(proměnné)
cblock 0x0C ; definicni obor pro adresy
w_tmp ; promenna pracujici s isr
stat_tmp ; promenna pracujici s isr
flag_r ; nas registr pro priznaky
endc ; konec bloku
;SYSTEM DEFINITIONS(systémové) (preddefinovane funkce)
#define BANK0 BCF STATUS,RP0 ; nastaveni banky 0
#define BANK1 BSF STATUS,RP0 ; nastaveni banky 1
#define T0_F flag_r,0 ; priznakovy bit vyprseni casovace (tmr)
#define PA0 PORTA,0
#define PA1 PORTA,1
;MACRO DEFINITIONS(definice macer)
;**********************************************************************
RST EQU 0x0000 ; processor reset vector(reset procesoru na nulu)
goto start ; go to beginning of program(skok na adresu)
ISR EQU 0x0004 ; interrupt vector location
movwf w_tmp ; save off current W register contents
movf STATUS,w ; move status register into W register ;
movwf stat_tmp ; save off contents of STATUS register
; tady píšeme vlastní přerušení(place ISR here)
bcf INTCON,T0IF ;
MOVLW _delay
movwf TMR0 ;
bsf T0_F ;
movf stat_tmp,w
movwf STATUS
swapf w_tmp,f
swapf w_tmp,w
retfie
;/////////////////////////////////////////////////////////////////////////////
; tady je vlastní začátek programu
start: ; zacatek programu
BANK1 ; prepnuti do banky1
MOVLW _option ; inicializace - co budeme inicializovat konstanta option, naplneni registru w
MOVWF OPTION_REG ; presun z w registru kam chceme tedy option_reg
MOVLW .1 ; inicializace trisa pro v/v
MOVWF TRISA ; presun na port a
MOVLW _int ; move do int reg. naplneni registru int
MOVWF INTCON ; presun z registru w kam chceme
MOVLW _delay ; presune do reg. W hodnotu _delay
BANK0 ; prepnuti do banky 0
MOVWF TMR0 ; nastavuje stejnou
CLRF flag_r ; vynulovani registru flag_r
BSF INTCON,GIE ; nastaveni hodnoty v registru intcon do jednicky bit GIE
button: ; navesti prog.
BTFSC PA0 ; testujeme pokud je jednicka a pokud je v dalsim kroku ho nastavujeme do nuly
goto button ; navrat na namesti timer
but01: BTFSS PA0 ;
goto but01
movlw _delay
movwf TMR0 ;
bcf T0_F
BTFSS T0_F
goto $-1
BTFSS PA0
goto but01
MOVLW 2
XORWF PORTA,f
goto button
END ; directive 'end of program'