Armando pic Inserito: 9 dicembre 2004 Segnala Share Inserito: 9 dicembre 2004 Generato un impulso largo 700uS l'interrupt non parte( sia positivo^ che negativo!) se lostesso impulso viene ripetuto di continuocon un generatore di funzioni la rutin si avvia.Perche questo stupido programma non funziona?????? TITLE 'PROG01: INVIO IN SERIALE UN BYTE CON INTERRUPT RB0 list F=INHX8M,P=16f84A INCLUDE "P16F84A.INC" __CONFIG _CP_ON & _WDT_OFF & _PWRTE_OFF & _HS_OSC ORG 0 goto START ;Reset vector nop ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>> INTERRUPT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ORG 4 MOVWF WTEMP ; SALVO W IN WTEMP SWAPF STATUS,W ; SALVO I REGISTRI DI STATO BCF STATUS,5; ATTIVO IL BANCO 0 MOVWF STEMP ; SALVO IL REGISTRO DI STATO "SWAPPATO" BTFSS INTCON, T0IF; VERIFICO SE L'INTERR. E DEL TIMER0 GOTO BINT BCF INTCON, T0IF MOVLW .100 MOVWF TMR0 DECF TEMP, F ; RUTIN DEL TIME0 GOTO ENDERR BINT BTFSS INTCON, INTF; ineterrupt rb0 GOTO ENDERR ASSURDO MOVF LPOWER,W MOVWF RAM4 MOVLW .20 MOVWF ERRORE CALL DECOBIT ;1 CALL ATT102us RRF RAM4,F CALL DECOBIT ;2 CALL ATT102us RRF RAM4,F CALL DECOBIT ;3 CALL ATT102us RRF RAM4,F CALL DECOBIT ;4 CALL ATT102us RRF RAM4,F ; BYTE POWER LAMP CALL DECOBIT ;5 CALL ATT102us RRF RAM4,F CALL DECOBIT ;6 CALL ATT102us RRF RAM4,F CALL DECOBIT ;7 CALL ATT102us RRF RAM4,F CALL DECOBIT ;8 CALL ATT102us ENDERR BCF INTCON, INTF ; AZZERO BIT INT FLEG SWAPF STEMP, W MOVWF STATUS SWAPF WTEMP, F SWAPF WTEMP, W RETFIE ; esce dalla rutin e riabbilita il GIE ;--------------------------------------------------------------------------- ; START PROGRAM ;--------------------------------------------------------------------------- START ; ++++++++++++++++++++++++++++ RAM SETTING ASSIGN ++++++++++++++++++++ TEMP equ 0x20 UNITA equ 0x21 DECINE equ 0x22 CENTIN equ 0x23 STATO equ 0x24 TEMPM equ 0x25 VCODEC equ 0x26 DISPV equ 0x27 DLED1 equ 0x28 DLED2 equ 0x29 DLED3 equ 0x2a WAIT1 equ 0x2b WAIT2 equ 0x2c WAIT3 equ 0x2d WAIT4 equ 0x2e WTEMP equ 0x2f STEMP equ 0x30 TON equ 0x31 RUNON equ 0x32 LPOWER equ 0x33 LSTATUS equ 0x34 LEDBAR equ 0x35 SERV1 equ 0x36 SERV2 equ 0x37 SERV3 equ 0x38 SERV4 equ 0x39 RAM1 equ 0x3a RAM2 equ 0x3b RAM3 equ 0x3c RAM4 equ 0x3F INCFST equ 0x3d DECFST equ 0x3e ERRORE equ 0x40 ; ******************************** Setto tutte le porte ************************* BSF STATUS,5 ; Banco 1 movlw b'00011110' ; RA1,RA2,RA3,RA4 INPUT - RA0 OUT movwf TRISA ; movlw b'00000001' ; RB1...RB6 out 25 mA RB0 in movwf TRISB ; movlw b'00000111' ; pull up 'on' / INT up /TIMER Osc movwf OPTION_REG ; TIMER up / PSA for TIMER0/ PRESC 256 bcf STATUS,5 ; Seleziona SRAM banco 0 clrf PORTA ; Uscite della porta A tutte a 0 clrf PORTB ; Uscite della porta B tutte a 0 bsf STATUS,5 ; Seleziona SRAM banco 1 movlw b'00010000' ; INT GLOB off / INT EEP off / INT TIMER0 off movwf INTCON ; INT RB0 on /INT RB7-4 off / RES ALL flags bcf STATUS,5 ; Seleziona SRAM banco 0 ; ;---------------------- main program ---------------------------- MAIN CLRF RUNON CLRF LPOWER CLRF LSTATUS CLRF LEDBAR MOVLW .170 MOVWF LPOWER ;azzera tutte le variabili e setta a 200 la V LPOWER BSF INTCON,GIE ; abilito interrupt potra B MAIN2 BSF PORTB,1 ; ho eliminato tutto il resto del programma solo per ; poter escludere dei possibili erroriho lasciato solo ; questa stupidissima rutin in interrupt che chiramente ; non funziona. goto MAIN2 ;start del programma ;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ;|||||||||||||||||||||||||| RUTIN DI RITARDO |||||||||||||||||||||||||||||||| ATT102us MOVLW .4 MOVWF WAIT1 MOVWF WAIT2 ATTL000 MOVLW .5 MOVWF WAIT1 ATTL111 DECFSZ WAIT1, F GOTO ATTL111 DECFSZ WAIT2, F GOTO ATTL000 NOP NOP NOP NOP RETURN ;===================================== SUBRUTIN DECO BIT =========================== DECOBIT ; RBO è ELTO BTFSS RAM4,0 ;I GOTO BTD4 ;I BSF PORTB,1 ;I BIT2 GOTO BTD5 ;I BTD4 BCF PORTB,1 ;I BTD5 RETURN goto MAIN ; ;---------------------------------------------------------------- END Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora