Em đang làm bài nhấn nút 3 lần để thay đổi trạng thái LED mà làm mãi không xong :| Trên lớp các anh đã soạn code bài này, em gõ theo nhưng vẫn chưa chạy được (không chắc gõ giống hết vì hôm đó em chỉ xem được 1 phần màn hình).
Đoạn code: (nối port LED với port D).
Cho em hỏi:
1. Hàm delay nằm trong chương trình ngắt để làm gì.
2. Khi có xung từ nút nhấn vào chân T0CKI, bit TMR0 tăng lên 1, khi TMR0 đến 255, tăng 1 lần nữa (xuống 0) thì bật cờ T0IF, chương trình nhảy vào ngắt để nháy đèn. Vậy tại sao trong ngắt lại có lệnh if (RA0 == 0) để kiểm tra phím nữa vậy?
Đoạn code: (nối port LED với port D).
Code:
// Description:
// PICC6
// Bai 2: Timer0
// Import
#include <htc.h> // thu vien HTC compiler
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF); // 1st config. Word
__CONFIG(BOR4V_BOR21V); // 2st config. Word
#define _XTAL_FREQ 4000000 // crystal 4Mhz
void InitPort();
void InitTimer0();
// Main program
void main()
{
InitPort();
InitTimer0();
TMR0 = 0x00;
while(1);
}
void InitPort()
{
ANSEL = 0;
ANSELH = 0;
TRISA = 1;
TRISD = 0; // PORT D is output
PORTD = 0x00;
}
void InitTimer0()
{
T0CS = 1; // Mode counter
T0SE = 1; // Increment when 1 -> 0
PSA = 1;
TMR0 = 253;
T0IF = 0;
T0IE = 1;
GIE = 1;
}
void interrupt isr()
{
if (T0IE && T0IF)
{
[COLOR="red"]__delay_ms(100);
if (RA0 == 0)[/COLOR]
{
PORTD ^= 0xFF;
TMR0 = 253;
T0IF = 0;
}
}
}
1. Hàm delay nằm trong chương trình ngắt để làm gì.
2. Khi có xung từ nút nhấn vào chân T0CKI, bit TMR0 tăng lên 1, khi TMR0 đến 255, tăng 1 lần nữa (xuống 0) thì bật cờ T0IF, chương trình nhảy vào ngắt để nháy đèn. Vậy tại sao trong ngắt lại có lệnh if (RA0 == 0) để kiểm tra phím nữa vậy?