PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   Help ! Ngắt RB (http://www.picvietnam.com/forum/showthread.php?t=9049)

7291665 28-04-2011 11:47 AM

Help ! Ngắt RB
 
Phần cứng mình lỡ thiết kế các chân RB4-RB7 nối qua nút nhấn rồi xuống mass ( đã mô phỏng chạy trường hợp nối lên nguồn còn nối xuống mass thì bó tay) . Vậy các Pro nào có thể chỉ mình cách viết code để thực hiện ngắt RB trogn trường hợp các chân này nối xuống mass ko?
Trích vài đoạn quan trọng

....................................( đã định nghĩa chân đầy đủ )
#int_RB
void interrupts_RB()
{
if(RBIF&&RBIE)
{
if(RB4==0)
{

}
if(RB5==0)
{
}
if(RB6==0)
{
}
if(RB7==0)
{
}
RBIF=0 ;
}
}
................... khởi tạo trong main
trisb = 0xf0;
portb = 0x0f;
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
enable_interrupts(GLOBAL);

tdm 28-04-2011 02:29 PM

Trích:

Nguyên văn bởi 7291665 (Post 44470)
Phần cứng mình lỡ thiết kế các chân RB4-RB7 nối qua nút nhấn rồi xuống mass ( đã mô phỏng chạy trường hợp nối lên nguồn còn nối xuống mass thì bó tay) . Vậy các Pro nào có thể chỉ mình cách viết code để thực hiện ngắt RB trogn trường hợp các chân này nối xuống mass ko?
Trích vài đoạn quan trọng

....................................( đã định nghĩa chân đầy đủ )
#int_RB
void interrupts_RB()
{
if(RBIF&&RBIE)
{
if(RB4==0)
{

}
if(RB5==0)
{
}
if(RB6==0)
{
}
if(RB7==0)
{
}
RBIF=0 ;
}
}
................... khởi tạo trong main
trisb = 0xf0;
portb = 0x0f;
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
enable_interrupts(GLOBAL);

thêm lệnh này vào hàm main: port_b_pullups(TRUE);//dung r keo len nguon
nếu không dùng lệnh này thì tại chân rb4....rb7 mỗi chân nối với r=10k lên nguồn dương.

7291665 28-04-2011 04:09 PM

Cám ơn bạn nhiều để mìh thử lại xem sao

7291665 28-04-2011 04:13 PM

Ok , đã thử thành công , cám ơn ban nhiều nhiều

alycuong 17-05-2011 01:45 AM

Trích:

Nguyên văn bởi tdm (Post 44478)
thêm lệnh này vào hàm main: port_b_pullups(TRUE);//dung r keo len nguon
nếu không dùng lệnh này thì tại chân rb4....rb7 mỗi chân nối với r=10k lên nguồn dương.

Cho e hỏi lệnh này có nghĩa là gì vậy: port_b_pullups(TRUE)

E cảm ơn!

stupid11 17-05-2011 11:18 AM

Trích:

Nguyên văn bởi alycuong (Post 45209)
Cho e hỏi lệnh này có nghĩa là gì vậy: port_b_pullups(TRUE)

E cảm ơn!

Lệnh này cho phép thiết lập port b có điện trở kéo lên Vcc....Khi bạn dùng nút nhấn ở portb..nếu không muốn dùng các điện trở kéo lên ở ngoài phần cứng thì dùng lệnh này..rất tiện lợi..

alycuong 18-05-2011 01:12 PM

A cho em hỏi lệnh break co thoát ra khỏi vòng lặp luôn luôn đúng while(true) dc k ah?

...
while(true)
{
...
if(...) break;
}

nguyen_de89 18-05-2011 04:48 PM

Trích:

Nguyên văn bởi alycuong (Post 45251)
A cho em hỏi lệnh break co thoát ra khỏi vòng lặp luôn luôn đúng while(true) dc k ah?

...
while(true)
{
...
if(...) break;
}

Lệnh break là thoát khỏi vòng lặp 1 cách cưỡng bức bạn à

alycuong 18-05-2011 05:40 PM

Trích:

Nguyên văn bởi nguyen_de89 (Post 45256)
Lệnh break là thoát khỏi vòng lặp 1 cách cưỡng bức bạn à

Mình biềt là vậy, nhưng ví dụ như thế này:

Void ct_con()
{
while(true)
{
x++;
if(x==200) break;
}
}

Void main()
{
...
ct_con();
...
}

Như bài thì có dùng lệnh for. Nhưng mình muốn hỏi khi vào chạy chương trình con thì khi x=200 thì break, vậy thì nó có thoát ra dc để tiếp tục vào chạy chương trình chính k, điều kiện ở trên là while(true).

hcmut.khoamaisi 18-05-2011 09:19 PM

Trích:

Nguyên văn bởi alycuong (Post 45262)
Mình biềt là vậy, nhưng ví dụ như thế này:

Void ct_con()
{
while(true)
{
x++;
if(x==200) break;
}
}

Void main()
{
...
ct_con();
...
}

Như bài thì có dùng lệnh for. Nhưng mình muốn hỏi khi vào chạy chương trình con thì khi x=200 thì break, vậy thì nó có thoát ra dc để tiếp tục vào chạy chương trình chính k, điều kiện ở trên là while(true).

có bạn ah!

nguyen_de89 18-05-2011 10:47 PM

Trích:

Nguyên văn bởi alycuong (Post 45262)
Mình biềt là vậy, nhưng ví dụ như thế này:

Void ct_con()
{
while(true)
{
x++;
if(x==200) break;
}
}

Void main()
{
...
ct_con();
...
}

Như bài thì có dùng lệnh for. Nhưng mình muốn hỏi khi vào chạy chương trình con thì khi x=200 thì break, vậy thì nó có thoát ra dc để tiếp tục vào chạy chương trình chính k, điều kiện ở trên là while(true).

Chắc chắn là thoát khỏi While(1) chứ bạn,ép buộc thoát mà

alycuong 11-06-2011 04:06 AM

Trích:

Nguyên văn bởi stupid11 (Post 45218)
Lệnh này cho phép thiết lập port b có điện trở kéo lên Vcc....Khi bạn dùng nút nhấn ở portb..nếu không muốn dùng các điện trở kéo lên ở ngoài phần cứng thì dùng lệnh này..rất tiện lợi..

http://i643.photobucket.com/albums/u...g/Untitled.png

CHo e hỏi là nếu dùng lệnh port_b_pullups(TRUE) như a giải thích thì phím ma trận thực tế thiết kế như trường hợp B có dc k. Còn nếu dùng lệnh trên mà trở kéo xuống Mass như trường hợp A thì lệnh port_b_pullups(TRUE) có dùng dc nữa k a? A giải thích giúp e với. E cám ơn.

stupid11 11-06-2011 02:06 PM

-Nếu trên mạch của bạn sử dụng B0-B3 là ngõ ra,B4-B7 là ngõ vào thì cả 2 trường hợp trên đều được...
-Trường hợp B thì không cần bàn nữa rồi phải không ?
-Còn trường hợp A thì mình chưa làm bao giờ,tuy nhiên trên lý thuyết là được..
Bạn xem hình dưới chắc cũng hiểu vì sao mà được..hihi.Chúc bạn vui...

http://i1090.photobucket.com/albums/...8b/pull-up.jpg

ocean_86 17-07-2011 11:45 PM

anh ơi!
em muốn đo hệ số COSj của lưới điện dùng ngắt ngoài trên chân RBO của pic 16f877a
em đã đuă dòng và áp sau khi chuyển từ song sin sang sóng vuông và cho qua con 74ls86 để so pha rồi bây giờ không biêt viêt chương trình làm sao
anh có thể giúp em được không? . em dung timer1. phần đo điện áp và dòng điện thì em đã làm chạy rồi
em cám ơn anh nhiều


Múi giờ GMT. Hiện tại là 11:47 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