Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

• NGẮT NGOÀI CHẠY HIỆU ỨNG LED

• Nguyên lý: Sử dụng ngắt ngoài INT (chân RB0) để điều khiển các led ở
PORTD sáng với các hiệu ứng khác nhau. Mỗi lần ngắt ngoài xảy ra biến
đếm tăng lên 1 đơn vị và với một giá trị tương ứng thì sẽ đèn led sẽ nháy
ở hiệu ứng tương ứng.
• CODE:
#include <pic.h>
#include <pic16f877a.h>
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 20000000
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF
int d = 0;
void hieuung1()
{
PORTD = 0b01010101;
__delay_ms(500);
PORTD = 0b10101010;
__delay_ms(500);
}
void hieuung2()
{
PORTD = 0b00000001;
__delay_ms(500);
for(int j = 0; j<7 ;j++)
{
PORTD <<=1;
__delay_ms(500);
}

}
void hieuung3 ()
{
char Mang2[] = {0b00011000, 0b00100100, 0b01000010, 0xff};
for(int j =0;j<4;j++)
{
PORTD = Mang2[j];
__delay_ms (500);
}
}
void hieuung4()
{
PORTD=0xff;
__delay_ms(500);
}
void hieuung5()
{
char Mang3[] = {0b11000000, 0b00110000, 0b00001100,0b00000011};
for(int j =0;j<4;j++)
{
PORTD = Mang3[j];
__delay_ms (500);
}
}

void main(void)
{

TRISD = 0x00;
TRISBbits.TRISB0 = 1;
OPTION_REGbits.INTEDG = 1;
INTCONbits.INTE = 1;
INTCONbits.GIE = 1;

while(1)
{

if(d==1)
{
hieuung1();
}
if(d==2)
{
hieuung2();
}
if(d==3)
{
hieuung3();
}
if(d==4)
{
hieuung4();
}
if(d==5)
{
hieuung5();
}
}
}

void interrupt NGAT(void)


{
if(INTCONbits.INTF == 1)
{
d++;
if(d==6)
{
d=1;
}
INTCONbits.INTF = 0;
}
}

You might also like