Giúp em cái mạch đếm xung :(

nmt2704

Trứng gà
Em mô phỏng cái mạch đếm xung bằng ngắt, nhưng không hiểu sao đưa code vào lại không nhút nhích j hết =.=, cứ 000 mãi ức chế :((
Code:
#include<htc.h>
#include <stdio.h>
#include <stdlib.h>
#include "lcd.h"
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_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 //tan so thach anh 4Mhz
int i, k, m, l ,a,b,c,j;
void ex_in_init()
{
GIE=1;
PEIE=1;
 
RBIF=0;
RBIE=1;
 
}
void init_port(void)
{
TRISB=0xff;
 
ANSEL=0;
ANSELH=0;
 
}
void interrupt isr()
{   
    if( (RBIF==1)&&(RBIE==1)&&(PEIE==1))
    {    j=j+1;
       
        RBIF=0;
    }
}
 
void main(void)
{   
ex_in_init();
init_port();
lcd_init();
 
    while(1)
{
        i=j;
        lcd_clear();
        a= i/100;
        lcd_putc(a+48);
        i= i-a*100;
        b=i/10;
        lcd_putc(b+48);
        i= i-b*10;
        c=i;
        lcd_putc(c+48);
        __delay_ms(100);
   
};
}
 

Attachments

em đang cho port B là output hết thì sao dùng ngắt được. cái đó phải cho Pin dùng ngắt là input thì mới dùng được em.
 

honghiep

Cố Vấn CLB
Staff member
em đang cho port B là output hết thì sao dùng ngắt được. cái đó phải cho Pin dùng ngắt là input thì mới dùng được em.
Cái TRISB = 0xff là output đúng mà a :-(
Em mô phỏng cái mạch đếm xung bằng ngắt, nhưng không hiểu sao đưa code vào lại không nhút nhích j hết =.=, cứ 000 mãi ức chế :((
Code:
#include<htc.h>
#include <stdio.h>
#include <stdlib.h>
#include "lcd.h"
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_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 //tan so thach anh 4Mhz
int i, k, m, l ,a,b,c,j;
void ex_in_init()
{
GIE=1;
PEIE=1;
 
RBIF=0;
RBIE=1;
 
}
void init_port(void)
{
TRISB=0xff;
 
ANSEL=0;
ANSELH=0;
 
}
void interrupt isr()
{ 
    if( (RBIF==1)&&(RBIE==1)&&(PEIE==1))
    {    j=j+1;
     
        RBIF=0;
    }
}
 
void main(void)
{ 
ex_in_init();
init_port();
lcd_init();
 
    while(1)
{
        i=j;
        lcd_clear();
        a= i/100;
        lcd_putc(a+48);
        i= i-a*100;
        b=i/10;
        lcd_putc(b+48);
        i= i-b*10;
        c=i;
        lcd_putc(c+48);
        __delay_ms(100);
 
};
}
Ở đây mình nghĩ bạn chưa enable cái interrupt.
Nếu bạn sử dụng chân RB0 với chức năng external interrupt thì bạn cần enable bit INTE và chọn cạnh của ngắt bằng bit INTEDG
Nếu bạn sử dụng RB0 với chức năng ngắt On-change thì bạn cần enable thêm bit IOCE (Mình nghĩ là bạn đang config với kiểu này) :D
 

Rebirth

Cố Vấn CLB
Staff member
Con PIC thì TRISx = 1 là input, = 0 là output.

Nó ngược lại với một số loại MCU khác. Bởi vì nó nghĩ là 1 ~ I (input), 0 ~ O (output).
 
Top