PDA

View Full Version : xin mọi người tư vấn cho em bài ngắt timer này cái ạ


toan_320.vn
19-11-2013, 11:42 AM
mọi người ơi, đề bài của em như thế này Sử dụng ngắt timer 0 để quét led 7 đoạn hiển thị số lần bấm phím (được đo bởi ngắt ngoài) trong khoảng thời gian 1 phút (được định thời bởi ngắt timer 1) em viết chuơng trình mà mô phỏng không hiểu sao chưa tới 1 phút led 7 đoạn da set vê 00 rồi ạ, đáng lẽ ra theo bài toán thì 60s sau nó mới set lại lần đếm đúng ko anh, anh xem thử em sai đoạn nào, cảm ơn anh nha!!
#include<16f877a.h>
#FUSES NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)

int maled[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
int16 dem,sln;
int slb=0,sll,so,hc,hdv;
#INT_EXT
EXT_ISR() {

slb++;
if (slb>99) slb = 0;
}
#int_timer1
void ngat_timer1()
{
set_timer1(3036);//0,5s//
{
sln++;
if(sln==360) sln=0;
slb=0;
//hc=slb/10,hdv=slb%10;

}}

#int_timer0
void ngat_timer0()

{
set_timer0(6);// 0,5ms//
dem++;
if(dem==5)//5*0,5=2ms
{
dem=0;
// output_d(0x00); // T?t các LED
hc=slb/10,hdv=slb%10;
if(sll==0)
{
output_high(pin_d1);
output_low(pin_d0);
output_c(maled[hc]);

}
else
{
output_high(pin_d0);
output_low(pin_d1);
output_c(maled[hdv]);

}
sll++;
if(sll>1) sll=0;

}
}

void main()
{
set_tris_b(0xFF);
set_tris_d(0x00);
set_tris_c(0x00);
enable_interrupts(int_timer0);
enable_interrupts(int_EXT);
enable_interrupts(int_timer1);
ext_int_edge(H_TO_L); // Chon ngat theo suon am//
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
setup_timer_1(T1_internal|T1_div_by_8);//1:4//
enable_interrupts(global);
set_timer0(6);
set_timer1(3036);
while(1)
{

}
}