PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Help!!!!! giúp mình với (http://www.picvietnam.com/forum/showthread.php?t=32324)

dragonzzz 26-05-2013 02:22 AM

Help!!!!! giúp mình với
 
Mình làm mạch có một nút nhấn. Sử dụng ngắt ngoài RB4-RB7.
Vấn đề của mình ở đây là không sử dụng được biến toàn cục. Mình muốn ấn nút nhất 4 lần thì led thay đổi trạng thái. Nhưng biến toàn cục sau khi được tăng ở hàm ngắt, khi thoát ra khỏi hàm này nó trở về giá trị ban đầu. Đây là code của mình, mọi người xem và sửa sai dùm. Cảm ơn rất nhiều!

#include "C:\Users\Admin.Admin-PC\Documents\main.h"
#USE delay (clock=20000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
int8 mode;
#INT_RB
void RB_isr (void)
{
mode=mode+1;
}
Void main ()
{
set_tris_c (0x00);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
ext_int_edge(H_TO_L);
while (true)
{
if (mode==4)
{
output_low (pin_c0);
}
}
}

cx039 02-06-2013 11:03 PM

Hình như ngắt ngoài của bạn không hoạt động thì phải:

#INT_RB
void RB_isr (void)
{
RBIF=1;
if(RBIE && RBIF)
{
ifIF (rb7==0)
{
mode +=1;
}
}
}

vanminh_ictu 02-06-2013 11:12 PM

enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
ext_int_edge(H_TO_L);
câu lệnh này nghĩa là gì vậy a ơi

daosykhoa 03-06-2013 05:11 PM

trước hết bạn biết rằng ngắt rb là ngắt khi có thay đổi ở b4..b7 vậy khi bạn ấn nút sẽ có ngắt và bạn nhả nút cũng tạo thay đổi so với thời điểm trước đó nên cũng ngắt .
thứ 2 trong while của bạn chẳng có lệnh nào để nhìn thấy mode bằng bao nhiêu.

tôi thử VD sau:

nút bấm vào b4, trở kéo lên.
xuat ra port gia tri mode để test nhé

#include <16f877a.h>
#device *=16
#use delay(clock=20000000)
#fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT, NOPUT


int8 mode;
#int_rb
void interrupts_rb()
{
//toi lam nut nhan o b4
if(!input(pin_b4))mode++;
}

void main()
{
set_tris_b(0xff);
set_tris_c(0x00);
set_tris_d(0x00);
enable_interrupts(global);
enable_interrupts(int_rb);

while(1)
{
if(mode==4)output_high(pin_c0);else output_low(pin_c0);
output_d(mode);
}
}


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam