PDA

View Full Version : Mình muốn ngắt bằng cạnh lên phải làm sao


TTL
15-06-2006, 07:47 PM
Mình viết 1 đoạn code muốn ngắt bằng cạnh lên mong các bác chỉ giáo

#include "16f877a.h"
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use rs232(baud=9600,parity=n,xmit=pin_c6,rcv=pin_c7)

#include "lcd.c"
#include "kbd.c"

#byte port_b=6
int dem;
char a1,a2,b1,b2,c1,c2; //khai bao cac bien dai dien cho gio, phut ,giay)


#int_timer0 /*ngat do bo dinh thoi 1 */
ngat_timer0()
{
dem++;
if(dem==1)
{
dem=0;
lcd_putc(a1);
lcd_putc(a2);
lcd_putc(":");
lcd_putc(b1);
lcd_putc(b2);
lcd_putc(":");
lcd_putc(c1);
lcd_putc(c2);
c2=c2+1;
if (c2>=':')
{
c2='0';
c1=c1+1;
}
if (c1>='6')
{
c1='0';
b2=b2+1;
}
if (b2>=':')
{
b2='0';
b1=b1+1;
}
if (b1>='6')
{
b1='0';
a2=a2+1;
}
if (a2>=':')
{
a2='0';
a1=a1+1;
}
if (a1>='2' & a2=='4')
{
a1='0';
a2='0';
}
lcd_putc("\f");
}
}

#int_rb
ngat_rb()
{
if(bit_test(port_b,4)==1)
{
b2=b2+1;
}
if(bit_test(port_b,5)==1)
{
a2=a2+1;
}
}

void main(void)
{

a1=a2=b1=b2=c1=c2='0'; //setup cho dong ho chay thu 00:00:00
enable_interrupts(global);
enable_interrupts(int_timer0);
enable_interrupts(int_rb);
setup_timer_0(rtcc_internal|rtcc_div_2);
lcd_init();
while(1)
{

}
}

nhh
16-06-2006, 12:23 PM
Rất đơn giản trong phần khởi tạo ngắt.Ví dụ như ngắt ngoài RB,thì:

enable_interrupts(INT_RB);
ext_int_edge(L_to_H); // low to high
// nếu muốn ngắt cạnh xuống thì H_to_LMà hình như ngắt cạnh lên là mặc định thì phải ....

Không biết bạn có edit lại file 16F877A.h không? PORTB chứ không PORT_B

TTL
18-06-2006, 06:22 PM
Cám ơn bạn bây giờ thì mình đã hiểu

dohoangnam
21-07-2006, 11:18 AM
Cảm ơn các bác!!!