BÀI 19 : ĐẾM TỪ 0 ĐẾN 9 SỬ DỤNG NGẮT RB0 PIC16F877A XC8

6:05:00 AM
Chào các bạn trong BÀI 19 mình đã giới thiệu với các bạn về ngắt của PIC16F877A cụ thể là ngắt RB0 và trong bài này chúng ta sẽ ứng dụng ngắt RB0 vào trong bài này để đếm từ 0 đến 9. Như các bạn đã biết thì khi xảy ra ngắt thì con PIC của mình sẽ dừng các hoạt động kia lại và thực hiện ngắt của mình. Vì vậy trong bài này chúng ta sẽ ứng dụng việc đó vào để giải quyết bài này mỗi khi xảy ra ngắt thì sẽ tăng giá trị LED 7 đoạn lên 1 đơn vị cứ thế cho đến khi tới 9 thì quay lại. Từ bài này các bạn có thể đếm từ 0 -99 hoặc nhiều hơn nữa.
- Đây là ảnh mô phỏng protues.
đếm từ 0 đến 9 sử dụng ngắt rb0 pic16f877a xc8
- Đây là code chương trình.
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 8000000
#include <xc.h>
// BEGIN CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)

const unsigned char Code7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
unsigned int count=0;
void interrupt ISR(void);
void main (void)
{
    TRISD = 0x00;
    PORTD = 0X00;
   
    TRISBbits.TRISB0 = 1;
    PORTB = 0X00;
    INTCONbits.GIE = 1;
    INTCONbits.INTE = 1;
    OPTION_REGbits.INTEDG = 1;
    while(1)
    {
        PORTD = Code7Seg[count];
        if(count==10)
        {
            count=0;
        }
    }
}
void interrupt ISR(void)
{
        if(INTCONbits.INTF==1)
        {
            {
                count++;
                INTCONbits.INTF=0;
            }
        }
}
- Link download project Click here

Share this

Related Posts

Previous
Next Post »