Hi,
I hope this is the right place to grab your attention. I am using a 16F73 @ 20Mhz with Hardware USART @ 115Kbps. I am using RB0 external interrupt portb.0 (can't help it only it is available) . Initially it is set to fire interrupt on a Low2High edge. Now when inside the interrupt I want to toggle the INT edge bit in the option_reg to have an interrupt on High2Low edge. The simple idea is to reset a timer when a variable duty cycle pulse begin and read the timer value when it turns off. Can't sit in a tight loop to watch if portb.0 = 0 cause got other tasks to do. So I am using Darrel's INT in both ASM and PBP. Here is the code:
Now my questions are :Code:ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler INT_INT, INT_ASM, ASM, NO INT_Handler INT_INT, _INT_PBP, PBP, YES endm INT_CREATE ; Creates the interrupt processor ENDASM ; BELOW IS THE ASM INTERRUPT HANDLER ASM INT_ASM BSF STATUS, RP0 ; SELECT BANK 1 BTFSS OPTION_REG, INTEDG ; CHECK THE INTERRUPT EDGE GOTO EDGE_LOW ; IF HERE THEN EDGE IS HIGH2LOW AND INT OCCURED AND NEEDS TO BE ALTERED///////// EDGE_HIGH BCF OPTION_REG, INTEDG ; SET TO INTERRUPT ON LOW2HIGH TRANSITION CLRF STATUS ; SELECT BANK0 CLRF TMR0 ; CLEAR TIMER0 BSF _HIGH_EDGE ; SET FLAG THAT THIS IS A LOW2HIGH_EDGE INT INT_RETURN ; RETURN FROM THE ASM INTERRUPT ; IF HERE THEN EDGE IS LOW2HIGH AND INT OCCURED AND NEEDS TO BE ALTERED //////// EDGE_LOW ; BANK1 IS ALREADY SELECTED BSF OPTION_REG, INTEDG ; SET TO INTERRUPT ON LOW CLRF STATUS ; SELECT BANK0 MOVF TMR0, 0 ; MOVE TIMER0 TO W MOVWF _TIMER ; MOVE TO THE TIMER VARIABLE IN BANK 0 BCF _HIGH_EDGE ; SET FLAG THAT THIS IS HIGH2LOW_EDGE INT INT_RETURN ; RETURN FROM THE ASM INTERRUPT ENDASM INT_PBP: ' PBP INTERRUPT HANDLER IF HIGH_EDGE = 1 THEN ' HSEROUT [10,"L2H",10] ' @ INT_RETURN ; RETURN FROM INSTANT INTERRUPT ELSE HSEROUT [10,"H2L",#TIMER, 10] ENDIF @ INT_RETURN ; RETURN FROM INSTANT INTERRUPT
1. Will this work ? Chances of false interrupt should not be, cause anyway while changing the option_reg the INT0 flag is not cleared and taken care of in the next PBP slice. Am I right ?
2. Should I manually check the transmit buffert (TRMT) and do the transmission to make things faster or let it be handled by PBP (keeps my hairfall under control)
P.S. : Actually I am counting on the email notification and everybody working with Darrel's II. Lester/Darrel please move this thread if you think that this should go as a new thread.


)
. Lester/Darrel please move this thread if you think that this should go as a new thread.


Bookmarks