Při přerušení od PORTB přestane fungovat přerušení od Timer2

mám takový možná hloupý problém ale pří použití přerušení jak od timer2 a portb mi procesor reaguje jen na přerušení od portb a timer2 jakoby neobsluhoval !? pokud vypnu přerušení od portb okamžitě jede timer2 mormálně . Docela mně to zarazilo v mplabu to při simulaci vše jede normálně !

:arrow_right: administrator: přejmenováno z "přerušení od portub a timer2"

Jakej MCU? Moje křišťálová koule hlásí špatnej signál, tak nevim.

16f886
dosud mi stačilo přerušení od tmr2 ale ted jsem chtě číst enkoder od porb ,pokud ale povolím přerušení od portub tak mi přestane chodit přerušení ob tmr2 . v simulaci to jede v pohodě ale v procesoru jsem si to i schválně navázal na výstupy a pokud je aktivní přerušení od portu b tak nenastává přerušení od tmr2 divný né

Podle mě je to jasný. Máš chybu v programu. Pokud ho sem nedáš, tak ti nikdo neporadí, protože nikdo není jasnovědec.

TAK JSEM UDĚLAL JEN TESTOVACÍ KOSTRU A TU NAHRÁL DO PROCESORU TAM PO AKTIVACI PŘERUŠENÍ OD TMR2 PŘESTANE JET PŘERUŠENÍ OD TMR2 ? PODOTÝKÁM V MPLABU TO JEDE NORMÁLNĚ

TADY JE KOD

errorlevel -302
;**********************************************************************
LIST p=16F886 ; list directive to define processor
#INCLUDE <p16F886.inc> ; processor specific variable definitions

 __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_ON & _INTRC_OSC_NOCLKOUT 

 __CONFIG _CONFIG2, _WRT_OFF & _BOR40V

BITY EQU 20H ;POMOCNÉ BITY CHODU REGULÁTORU
POMOC1 EQU 21H ;TESTOVACÍ POMOCNÁ
CASOVV EQU 22H
TEMP_W EQU 2BH
TEMP_ST EQU 2CH
;**********************************************************

;start se zpožděním pwrt=1
RESET org 00h
GOTO START
ORG 04H ;PŘERUŠENÍ NUTNO IDENTIFIKOVAT JAKÉ !

PUSH MOVWF TEMP_W
SWAPF STATUS,W
MOVWF TEMP_ST
;program přerušení
BANKSEL PIR1
;*****************************************

	BSF		BITY,2
	BTFSS	INTCON,RBIF
	GOTO	PRER1
	BTFSS	PORTB,3
	NOP
	BCF		INTCON,RBIF
	
	BSF		BITY,1
	GOTO	POP

PRER1 BTFSS PIR1,TMR2IF
GOTO START
BCF PIR1,TMR2IF

	BSF		BITY,0

;PROGRAM PŘERUŠENÍ KONEC
POP SWAPF TEMP_ST,W
MOVWF STATUS
SWAPF TEMP_W,F
SWAPF TEMP_W,W
RETFIE
;VÝMAZ BANK MIMO SPODNÍCH 5 SLOV
START CLRF TMR0 ;VÝMAZ ČASOVAČE0
CLRF PORTA
CLRF PORTB ;VÝMAZ PORTU B
CLRF CCP1CON
CLRF CCP2CON
CLRF PORTC
BANKSEL OSCCON
;BSF STATUS,RP0 ;BANKA1

	MOVLW	0X74			; 8MHz hfintosc stable
	MOVWF	OSCCON
	CLRWDT
	MOVLW	0x17			; nastaven před dělič 65536 pro WDT + aktivace wdt
	MOVWF	WDTCON
	MOVLW	0X0F			;128 před dělič pro wdt
	MOVWF	OPTION_REG
	MOVLW	0X7C			;KONSTANTA 125 PRO TMR2	
	MOVWF	PR2				
	MOVLW	0XFF
	MOVWF	TRISA
	MOVLW	0X0F
	MOVWF	TRISB			;PORTB HORNÍ VÝSTUP SPODNÍ VSTUP
	MOVLW	0X08
	MOVWF	IOCB			;ZAPIS POVOLENÍ PŘERUŠENÍ OD PORTU B PRO DEDEKCI ENKODERU
	CLRF	TRISC
	BSF		TRISC,0

	BANKSEL	ANSEL
	CLRF	ANSEL
	CLRF	ANSELH		
	;BCF		STATUS,RP0		;BANKA0
	BANKSEL	PORTC


	MOVLW	0XFF
	MOVWF	PORTC
	
	CLRF	BITY
	MOVLW	0X20
	MOVWF	FSR

NEXT CLRF INDF
INCF FSR,1
MOVF FSR,0
SUBLW 0X6F
SKPZ
GOTO NEXT

	GOTO 	START1

;****************************
START1 NOP

	MOVLW	B'01001110' 	;TMR2 PŘED DĚLIČ 4 PODĚLIČ 1
	BANKSEL T2CON
	
	MOVWF	T2CON
	BANKSEL	PIE1
	BSF		PIE1,TMR2IE
		;POVOLIT PŘERUŠENÍ
			;POVOLIT GENERÁLNÍ PŘERUŠENÍ
	MOVLW	B'11001000'
    MOVWF	INTCON		

	
	MOVLW	0X7C
	MOVWF	PR2

START2 NOP
CLRWDT
NOP

	BTFSS	BITY,0
	GOTO	S2
	BCF		PORTC,6
	BCF		BITY,0
	NOP
	NOP
	NOP
	BSF		PORTC,6

S2 BTFSS BITY,1
GOTO S3
BCF BITY,1
BCF PORTC,5
NOP
NOP
NOP
BSF PORTC,5

S3 BTFSS BITY,2
GOTO START2
BCF BITY,2
BTFSS BITY,3
GOTO S4
BCF PORTC,7
BCF BITY,3
GOTO START2
S4 BSF PORTC,7
BSF BITY,3
goto START2

end

Příště ASM, nebo aspoň to dej do Code. Mrknu na to.

omlouvám se ale docela mne to rozhodilo zkoušel jsem i vadu procesoru ale nic dělá to ve všech stějně a v mplabu to jede zvláštní i disable gdyž projdu tak nevypadá že by to chodit nemnělo - a to jsem si chtě ušetřít práci a použít jen dvě tlačítka a enkoder pro jednoduší ovládání jinak ten procesor nic nedělá zobrazí udaje a odešle je dál a na konec tady tězce pátrám co že jsem skonil až zjistím že to nejede právě k vuli tomu co jsem chtěl zjednodušit - jdu ten ekoder obsluhovat mimo přerušení ale - vrtámi to v hlavě

Zkontroluj si banksel.

MOVLW 0x17 ; nastaven před dělič 65536 pro WDT + aktivace wdt MOVWF WDTCON
Tohle ti nezapisuje. Jestli to bude mít vliv, to ale nevím.
Nějak se v tom programu nemůžu vyznat :frowning:. Máš to celý nějak divně napsaný.

to je v pohodě při očesání původního kudu jsem přehlíd pár bansel ale i tak ted jsem to zkusil a výsledek je stejný v mplabu časivač tiká přerušení se vyvolá v procesoru to ragije jen na přerurušní od porturb , když toto přerušení zakážu jede to normálně !?

Rotační kodér máš připojenej kam?

NA RB3 A RB2 ale jak jsem psal problém tví vtom že i holý procák v nepajivém poli dělá tyhlu zvláštnos - ale samozřejmně jsem zkusil i více procesoru ještě nepoužitých a přitom při simulaci to genereuje přerušení jak má ? záhady hlavolamu a mplab už jsem taky přehrál tak netuším - samo se držím zásady že chybu dělám určitě já al kdy je mi záhadou - už jsem tu obsluhu dekoderu napsal do prázdnéého procesu kdyse jinak čeká na značku z časovače ale i tak bych do budoucna rád věděl kde je chyba

toto určitě dobře není.

PRER1 BTFSS PIR1,TMR2IF GOTO START

Na tvém místě bych to celý přepsal.
Pořádně udělat INIT procesoru, MAIN a INTER, pokud dodržíš pár věcí, není důvod, proč by to nemělo fungovat.

na tom není nic špatně testuji jestli nevzniklo nějaké jiné přerušení které by vzniknout teoreticky nemnělo a vpřípadě že ano provedu něco jako reset !? moh bych ten bit netestovat myslet že je to tmr2 ale pořád to neřeší můj broblém přepisovat se ,mi to nechce toto je jen utržek kodu který vijma enkoderu fachá bez problému já chtěl jen zjednodušit ovládání , až stímhle zkončím tak si klidně vytáhnu i jiný procesor než tu 886 a potrenuji ten souběh přerušení . To přepsání by znamenalo napsat znova i knihovnu displeje na to nemám jaksi ted čas , a raději začnu dělat v C ale to musím natrénovat slučování textu pro vypisování na displej což se mi nedaří . Proto raději upravím pracující program . Momentálně ale nestíhám a k programování se dostanu leda o víkendu . :laughing: mne jen zajímalo zda něco takového již někdo neřešil - pokud rutina v mplabu běhá tak proč né v procesoru - dam-li povolení od portb na přepínač okamžitě dochází k vyvolání přerušení i od časovače to mně mate ale asi je to má chyba co se dá dělat .

tak pozri EERdata ci nahodou…