PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 15-02-2011, 09:01 PM   #1
angel_i2k
Nhập môn đệ tử
 
Tham gia ngày: Aug 2010
Bài gửi: 8
:
Red face Vấn đề ngắt ngoại vi portb

Chào các Pro!
Mình mới học pic nên có chút khó hiểu về ngắt ngoại vi port b. Chương trình của mình là dùng timer 0 để đếm đồng hồ hiển thị led 7 đoạn. Mình đã test ok. Nhưng khi mình thêm phần ngắt chân RB7 thì có vấn đề. Mình nối rb7 với 1 switch. Mình muốn khi rb7 mức 1 thì đồng hồ led 7 đoạn chạy bình thường. Còn khi rb7 mức 0 thì đồng hồ ngừng chạy. Nhưng khi mình test thì khi rb7 xuống mức 0 đồng hồ đứng luôn. Mặc dù mình điều khiển switch làm rb7 lên mức 1 lại vẫn không chạy lại được. Đây là chương trình. Mong các Pro quan tâm. Thanks nhiều.

#include<stdlib.h>
#include<math.h>
#use delay(clock= 20000000)
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
#int_rb
int gio,phut,giay;
int gio_chuc,gio_donvi;
int phut_chuc,phut_donvi;
int giay_chuc,giay_donvi;
int16 count;
// CHUONG TRINH NGAT PORT B
RB_ISR()
{
IF (pin_b7 ==0 )
{
disable_interrupts(int_timer0);
break;
}
if (pin_b7 ==1)
{
enable_interrupts(int_timer0);
break;
}

}
// CHUONG TRINH DEM THOI GIAN
void dem_thoi_gian (int &gio, int &phut, int &giay)
{
giay++;
if (giay==60)
{
giay = 0;
phut++;
}
if (phut == 60)
{
phut = 0;
gio++;
}
if (gio==24)
{
gio = 0;
phut=0 ;
giay=0 ;
}
}

// CHUONG TRINH XUAT LED 7 DOAN
int xuat_led(int x)
{
int value;
switch(x)
{
case 0:
value = 0x03;
break;
case 1:
value = 0x9F;
break;
case 2:
value = 0x25;
break;
case 3:
value = 0x0D;
break;
case 4:
value = 0x99;
break;
case 5:
value = 0x49;
break;
case 6:
value = 0x41;
break;
case 7:
value = 0x1f;
break;
case 8:
value = 0x01;
break;
case 9:
value = 0x09;
break;
}
return value;
}

// CHUONG TRINH NGAT TIMER 0
#int_timer0
void interrupts_timer0()
{
count++;
if(count ==10000)
{
count = 0;
dem_thoi_gian(gio,phut,giay);
}
}


void main()
{
set_tris_b(0xff);
set_tris_c(0);
set_tris_d(0);
gio=0;
phut=0;
giay=0;
enable_interrupts(int_rb);
enable_interrupts(global);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_DIV_2|RTCC_INTERNAL);
set_timer0(6);
while (1)
{
gio_chuc = gio/10;
gio_donvi= gio%10;
phut_chuc = phut/10;
phut_donvi= phut%10;
giay_chuc = giay/10;
giay_donvi= giay%10;

portc=0xfb;
portd=xuat_led(giay_donvi);
delay_ms(1);

portc=0xf7;
portd=xuat_led(giay_chuc);
delay_ms(1);

portc=0xef;
portd=xuat_led(phut_donvi);
delay_ms(1);

portc=0xdf;
portd=xuat_led(phut_chuc);
delay_ms(1);

portc=0xbf;
portd=xuat_led(gio_donvi);
delay_ms(1);

portc=0x7f;
portd=xuat_led(gio_chuc);
delay_ms(1);
}
}
angel_i2k vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 02:13 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam