05-08-2014, 07:15 PM | #4 |
Nhập môn đệ tử
Tham gia ngày: Feb 2010
Bài gửi: 3
: |
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 } } |
|
|