Hi,
Perhaps you would look at the library serial_hw_int_cts.jal and adapt the
(not very) simplified routine below at your need.
The received data is in RCREG and we assume has one byte length.
var byte your_data = 0
procedure _serial_receive_interrupt_handler() is
pragma interrupt
var byte x
var bit usart_error
if (SERIAL_RCIF == TRUE) then -- UART receive interrupt
usart_error = FALSE
if (defined(U1CON0)== TRUE) then
-- Newer USART type
if U1ERRIR_FERIF | U1ERRIR_RXFOIF | U1ERRIR_RXBKIF | U1ERRIR_PERIF
then
-- reset framing and/or overflow errors
U1ERRIR_FERIF = FALSE
U1ERRIR_RXFOIF = FALSE
U1ERRIR_RXBKIF = FALSE
U1ERRIR_PERIF = FALSE
U1FIFO_RXBE = TRUE -- clear receive bufer
usart_error = TRUE
end if
else
-- Classic USART type
if ((RCSTA_OERR == TRUE) | (RCSTA_FERR == TRUE)) then --
frame/overr error
x = RCREG -- flush hardware buffer
while RCSTA_OERR == TRUE loop -- overrun state
RCSTA_CREN = DISABLED -- disable UART
RCSTA_CREN = ENABLED -- re-enable UART
x = RCREG -- \ flush hardware
buffers
x = RCREG -- /
end loop -- until no more overrun
usart_error = TRUE
end if
end if
your_data = RCREG -- here is your data if no communication error appears
end if
end procedure
On Mon, Apr 19, 2021 at 5:16 AM majid ebru <[email protected]> wrote:
>
> Sorry
> Can I use interrupt in Serial-Hardware?!
> Thank you
> majid ebru در تاریخ دوشنبه ۱۹ آوریل ۲۰۲۱ ساعت ۶:۴۳:۱۴ (UTC+4:30) نوشت:
>
>> Thank you very much
>> I just want to send/receive data with interrupt.
>> How can i do that?!
>> I should use i2c or spi
>> I can't find any sample about interrupt sending/receiving data in pic
>>
>>
>> Kiste در تاریخ یکشنبه ۱۸ آوریل ۲۰۲۱ ساعت ۲۳:۵۵:۴۵ (UTC+4:30) نوشت:
>>
>>> Hi!
>>>
>>> serial_software can't use interrupts. It is a "bit-bang" design which
>>> blocks the processor while sending data, or while waiting for incoming
>>> data.
>>>
>>> If you're using a controller which doesn't have a usart peripheral and
>>> need to send or receive asynchronous serial signals without blocking, you
>>> would need to fire one interrupt per bit. There is no library which uses
>>> this approach, and it would also be of little use. One interrupt per bit
>>> means you can only use very low baud rates, unless your controller is a
>>> very fast one. And all the fast controllers do have usart peripherals.
>>>
>>> Greets,
>>> Kiste
>>>
>>>
>>>
>>>
>>>
>>>
>>> Am Sonntag, 18. April 2021, 21:15:21 MESZ hat majid ebru <
>>> [email protected]> Folgendes geschrieben:
>>>
>>>
>>>
>>>
>>>
>>>
>>> Hi
>>> i have two PIC16f877A.
>>> how can i use Interrupt for send& receive data between they??
>>> i should use Serial_Software
>>> ------------
>>>
>>> ;@jallib section chipdef
>>> -- chip setup
>>> include 16f877a
>>> pragma target clock 8_000_000 -- xtal frequency
>>> pragma target OSC hs
>>> pragma target WDT disabled
>>> pragma target LVP disabled
>>> enable_digital_io()
>>> include print
>>> include delay
>>> intcon_gie = true -- Enable interrupt generally
>>> -------------------------- Port A ---------------------------------
>>> const bit ADC_HIGH_rESOLUTION = low
>>> const word ADC_rSOUrCE = 2_000
>>> const byte ADC_NVrEF = ADC_VrEF_POS--ADC_NO_EXT_VrEF--ADC_NO_VrEF-- and
>>> one Vref pin
>>> const byte ADC_NCHANNEL = 3 --- our 6 ADC channel
>>> include adc
>>> include math
>>> adc_init()
>>> var word ADC_Input_general_1 = 0
>>> var word ADC_Input_general_2 = 0
>>> var word ADC_Input_general_3 = 0
>>> -------------------------------------------- ok, now setup serial
>>> alias serial_sw_tx_pin is pin_C4
>>> alias serial_sw_rx_pin is pin_C5
>>> pin_C4_direction = output
>>> const serial_sw_baudrate = 9600
>>> var bit serial_sw_invert = false
>>> include serial_software
>>> serial_sw_init()
>>> -------------------------- Port B ---------------------------------
>>> alias in1 is pin_b0
>>> pin_b0_direction = input
>>> --------------------------------
>>> alias in2 is pin_b1
>>> pin_b1_direction = input
>>> --------------------------------
>>> alias in3 is pin_b2
>>> pin_b2_direction = input
>>> --------------------------------
>>> alias in4 is pin_b3
>>> pin_b3_direction = input
>>> --------------------------------
>>> alias in5 is pin_b4
>>> pin_b4_direction = input
>>> --------------------------------
>>> alias in6 is pin_b5
>>> pin_b5_direction = input
>>> -------------------------- Port E ---------------------------------
>>> alias SS1 is pin_e0
>>> pin_e0_direction = output
>>> SS1 = 0
>>> --------------------------------
>>> alias SS2 is pin_e1
>>> pin_e1_direction = output
>>> SS2 = 0
>>> -------------------------- Port D ---------------------------------
>>> alias Buzzer1 is pin_d1
>>> pin_d1_direction = output
>>> Buzzer1 = 0
>>> --------------------------------
>>> alias FlashLED1 is pin_d2
>>> pin_d2_direction = output
>>> FlashLED1 = 0
>>> --------------------------------
>>> alias Out_1 is pin_d3
>>> pin_d3_direction = output
>>> Out_1 = 0
>>> --------------------------------
>>> alias Out_5 is pin_d4
>>> pin_d4_direction = output
>>> Out_5 = 0
>>> --------------------------------
>>> alias Out_4 is pin_d5
>>> pin_d5_direction = output
>>> Out_4 = 0
>>> --------------------------------
>>> alias Out_3 is pin_d6
>>> pin_d6_direction = output
>>> Out_3 = 0
>>> --------------------------------
>>> alias Out_2 is pin_d7
>>> pin_d7_direction = output
>>> Out_2 = 0
>>> -------------------------------------------------------------------
>>> var word n = 0 , j = 0
>>> -------------------------------------------------------------------
>>> var bit bitOut1 = 0, bitOut2 = 0
>>> -------------------------------------------------------------------
>>> var word press = 0
>>> var word btnDelay = 500, btnDelay_1 = 0, btnDelay_2 = 0
>>> var word btnDelay_3 = 0, btnDelay_4 = 0
>>> var word buzDelay = 700, buzCount = 0 , sendByte = 0
>>> var byte temp1 = 0
>>> FlashLED1 = 1
>>> --------------------------------------------------- >>> interrupt >>>
>>> ----
>>> procedure ????? is pragma interrupt
>>> if ????? then
>>> block
>>> -- if recevive 10 => set Out_2 ??????????????
>>> end block
>>> end if
>>> end procedure
>>> -------------------------------------------------------------------
>>> forever loop
>>> ----------------------- Buzzer
>>> if buzDelay < buzCount then
>>> buzCount = 0
>>> end if
>>> if 0 < buzCount then block
>>> Buzzer1 = 1
>>> buzCount = buzCount + 1
>>> end block
>>> else
>>> Buzzer1 = 0
>>> end if
>>> ----------------------- btn1
>>> if in1 == 1 then
>>> btnDelay_1 = btnDelay_1 + 1
>>> else
>>> btnDelay_1 = 0
>>> end if
>>> if btnDelay < btnDelay_1 then block
>>> buzCount = 1
>>> btnDelay_1 = 0
>>> Out_1 = 0
>>> -- send Data to USART ?????????????????
>>> end block
>>> end if
>>> --------------------------------------------------
>>> if n < 8000 then block
>>> n = n + 1
>>> end block
>>> else block
>>> n = 0
>>> FlashLED1 = ! FlashLED1
>>> end block
>>> end if
>>> -----------------------
>>> end loop
>>> -----------------------------------------------------------
>>>
>>>
>>> please help or guide me
>>>
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "jallib" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/jallib/b69ef4ed-22dc-45d7-b710-f616ad6f3ed0n%40googlegroups.com.
>>>
>>>
>>> --
> You received this message because you are subscribed to the Google Groups
> "jallib" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jallib/667d11e7-254f-43bc-84bf-abed4acfc813n%40googlegroups.com
> <https://groups.google.com/d/msgid/jallib/667d11e7-254f-43bc-84bf-abed4acfc813n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
--
You received this message because you are subscribed to the Google Groups
"jallib" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jallib/CAM%2Bj4qshvMuSrUBfjC07uLV3S%3DwBH2zsOduzjeHKWNVjoKUf7g%40mail.gmail.com.