PDA

View Full Version : Help ! Ngắt RB


7291665
28-04-2011, 11:47 AM
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
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
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
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
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
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
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
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
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/uu153/alycuong/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/i375/dungdt08b/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