使用硬件RX引脚作为arduino的中断引脚

时间:2017-06-10 11:20:18

标签: c++ arduino serial-port interrupt avr

我想使用Arduino的硬件RX引脚作为中断引脚。如果RX引脚上有任何可用数据,将产生中断信号,调用回调函数来读取输入的串行数据。我不希望我的loop()函数在串行端口上持续读取。我正在使用此代码,但我的中断没有被触发。我也尝试删除digitalPintointerrupt()但没有得到任何响应。

frozenset

d serial_read`

2 个答案:

答案 0 :(得分:0)

sei() ENABLES中断,而cli()禁用它们。你的意见建议你让他们倒退。也许还有其他问题,但这些说明肯定与你的意图不符。

如果你想获得更低级别,可以考虑一个纯粹的中断驱动设计,如:

ISR (USART0_UDRE_vect)
{
    // Send next byte and increment pointer
    UDR0 = *ub_outptr++;
    // Pointer wrapping
    if (ub_outptr >= UART_buffer + BUFF_SIZE)
    ub_outptr = UART_buffer;
    // If buffer is empty: disable interrupt
    if(--ub_buffcnt == 0)
    UCSR0B &= ~(1 << UDRIE0);

}

我知道这会带你离开Arduino库的东西,所以这可能不适合你。但它的工作原理(例如发送数据,因为我有一个活动项目,微控制器将数据发送到LCD显示器。这只是AVR-GCC C中的一个例子。)

答案 1 :(得分:0)

试试我的NeoHWSerial。它是Arduino核心类的修改版本HardwareSerial,用于SerialSerial1等的类。它增加了为每个接收到的字符注册回调的功能。