gpt4 book ai didi

c - AVR C 如何停止中断

转载 作者:太空宇宙 更新时间:2023-11-04 07:35:41 24 4
gpt4 key购买 nike

我正在为 AVR MCU 编程。

它有一个 POT,可以读取模拟引脚。似乎中断不断被调用,并且必须在 LCD_display 方法期间调用它,因为它弄乱了我的 LCD。

有没有办法在 block 运行之前停止中断?

int main(void)
{
/*Turn on ADC Interrupt */
ADCSRA |= (1 << ADIE);

/*Turn On GLobal Interrupts*/
sei();


/* Intalise LCD */
lcd_init(LCD_DISP_ON); /* initialize display, cursor off */
lcd_clrscr();
lcd_puts("READY");

DDRB &= ~(1 << PINB5); //set input direction
ADC_Init(128, 0); //initalize ADC


while (1)
{

if (!bit_is_clear(PINB, 5))
{
_delay_ms(500);

if (!pressed)
{
lcd_gotoxy(0,0);
lcd_clrscr();
lcd_puts("test"); //Doesnt work unless I dont comment out the last line of interrupt
pressed = 1;
}

}

/* INTERRUPTS */

//ADC INTERRUPT
ISR(ADC_vect)
{

char adcResult[4];

uint8_t theLowADC = ADCL;
uint16_t theTenBitResults = ADCH<<8 | theLowADC;
itoa(theTenBitResults, adcResult, 10);
ADCSRA |= (1 << ADSC); //next conversion *if i comment out this line it works*


}

最佳答案

如果中断处理程序对您的代码表现不佳,原因可能是您在中断处理程序上花费了太多时间。您应该只在中断处理程序中执行关键工作,而在应用程序代码中推迟不太重要的工作;使用在处理程序和应用程序代码之间共享的 volatile 标志让应用程序代码知道它是否有工作要做。在您的示例中,您应该推迟应用程序代码中的 itoa 调用。

关于c - AVR C 如何停止中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9257801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com