Có bác nào cho em hỏi là code em viết sai ở đâu mà em ngắt đc trên các chân của port b, đc rồi nhưng mà bị hiện tượng khi bắt đầu chạy, lần đầu tiên ấn nút thì nó chưa ngắt ngay và fari ấn lần 2, sau đó, thì cái nút nhấn thì nhận ngắt bt, nhấn 1 lần là đc.
Code:
#include <main.h>
static INT8 last_b=0xff;
#INT_RB
void RB_button(VOID)
{
BYTE changes;
changes = last_b ^ PORTB;
last_b = PORTB;
IF (bit_test (changes, 0)&& ! bit_test (last_b, 0))
{
//b0 went low
PORTC = 0b00000001;
}
IF (bit_test (changes, 1)&& ! bit_test (last_b, 1))
{
//b1 went low
PORTC = 0b00000010;
}
IF (bit_test (changes, 2)&& ! bit_test (last_b, 2))
{
//b2 went low
PORTC = 0b00000100;
}
IF (bit_test (changes, 3)&& ! bit_test (last_b, 3))
{
//b3 went low
PORTC = 0b00001000;
}
IF (bit_test (changes, 4)&& ! bit_test (last_b, 4))
{
//b4 went low
PORTC = 0b00010000;
}
IF (bit_test (changes, 5)&& ! bit_test (last_b, 5))
{
//b5 went low
PORTC = 0b00100000;
}
delay_ms (100);
//RBIF = 0; //Xoa co ngat RB
clear_interrupt (INT_RB);
}
void main()
{
setup_adc_ports (NO_ANALOGS);
setup_adc (ADC_OFF);
setup_spi (SPI_SS_DISABLED);
setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1 (T1_DISABLED);
setup_timer_2 (T2_DISABLED, 0, 1) ;
setup_comparator (NC_NC_NC_NC);
setup_vref (FALSE);
ANSELH=0x00;
ANSELH=0x00;
WPUB=0xFF;
enable_interrupts (INT_RB);
// ! enable_interrupts (INT_RB0);
// ! enable_interrupts (INT_RB1);
// ! enable_interrupts (INT_RB2);
// ! enable_interrupts (INT_RB3);
// ! enable_interrupts (INT_RB4);
// ! enable_interrupts (INT_RB5);
ext_INT_edge (H_to_L);
enable_interrupts (GLOBAL);
// TODO: USER CODE!!
// set tris
set_tris_a (0x00);
set_tris_b (0b11111111); //pin 6, 7 nhan tin hieu
set_tris_c (0x00);
set_tris_d (0x00);
set_tris_e (0x00);
// init port
// ! PORTA = 0x00;
PORTC = 0x00;
// ! PORTD = 0x00;
// ! PORTE = 0x00;
WHILE (TRUE)
{
//TODO: User Code
}
}