mplab pic 16f84a button on/off

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'

 

Attachments

  • 5z6 - tlacitko.rar
    255 KB · Views: 95

Welcome to EDABoard.com

Sponsor

Back
Top