سلام دوستان
من یه برنامه دارم که خواستم باهاش وقفه دریافت یوزارت رو تست کنم. مدارمو به شکل زیر بستم:

این هم برنامم:
میبینید که خیلی سادس! ولی مگه نباید وقتی کلید رو یه لحظه فشار میدم فقط یک بار وارد وقفه بشه و یک واحد فقط به f اضافه بشه؟! یعنی با هربار زدن کلید یک بار وارد وقفه بشه.
ولی به محض زدن کلید با سرعت f شروع به شمردن میکنه و دیگه قطع نمیشه! هم توی پروتئوس و هم در عمل اینجوریه! علت چیه؟ من جایی دارم اشتباه میکنم؟
من یه برنامه دارم که خواستم باهاش وقفه دریافت یوزارت رو تست کنم. مدارمو به شکل زیر بستم:

این هم برنامم:
کد:
#include <mega32a.h>
#include <alcd.h>
#include <stdio.h>
char str[16],f;
interrupt [USART_RXC] void usart_rx_isr(void)
{
f++;
}
void main(void){
{
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x33;
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 3
// D5 - PORTC Bit 4
// D6 - PORTC Bit 5
// D7 - PORTC Bit 6
// Characters/line: 16
lcd_init(16);
// Global enable interrupts
#asm("sei")
}
while (1)
{
lcd_gotoxy(0,0);
sprintf(str,"%04d",f);
lcd_puts(str);
}
}
ولی به محض زدن کلید با سرعت f شروع به شمردن میکنه و دیگه قطع نمیشه! هم توی پروتئوس و هم در عمل اینجوریه! علت چیه؟ من جایی دارم اشتباه میکنم؟



گیر میکنه! چرا آخه مرتبا وقفه میخوره؟ ولتاژ rx حدود 2.8 ولته.
دیدگاه