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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 13-08-2011, 03:53 AM   #1
maruko
Đệ tử 1 túi
 
Tham gia ngày: Aug 2011
Bài gửi: 24
:
vidu ve ngat ngoai

các bác ơi. em có sửa lại code 1 ví dụ đơn giản về ngắt ngoài . sau khi suẳ chuơng trình cứ báo lỗi mà em k biết lỗi đó do đâu.
nhờ các bác testgiups em với. em cảm ơn




#include <16f877a.h>
#include <def_877a.h>
#device *=16
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
//#define led PIN_D1

//#use fast_io(b)
//#use fast_io(d)


boolean i = 1;
#int_ext
void ext_int_isr()
{
if(i == 1)
{
//output_high(led);
potrd =255;
i = 0;
}
else
{
//output_low(led);
portd=0;
i = 1;
}
}

void main()
{

// set_tris_b(0x01);
//set_tris_d(0x00);
TRISB =0x00;
TRISd =0x00;
portd=0x00;

port_b_pullups(true);
enable_interrupts(INT_EXT_H2L); // Cho phep ngat ngoai
enable_interrupts(global); // Cho phep ngat toan cuc
while(1);
}
maruko vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-08-2011, 09:39 AM   #2
goldstar09
Đệ tử 1 túi
 
Tham gia ngày: Aug 2009
Bài gửi: 18
:
Chào bạn.

Bạn đang dùng chức năng ngắt trên chân RB0?(ngắt ngoài). Không rõ bạn nhận được lỗi như thế nào từ trình biên dịch CCS?
Bạn khai báo biến i là biến kiểu boolean, tức là chỉ có hai giá trị 0, 1. Nhưng mình không thấy bạn tham chiếu giá trị i này vào đâu cả, cho nên có lẽ câu lệnh kiểm tra (i==1) không có ý nghĩa là chương trình đã vào hàm xử lý ngắt. Bạn lại định nghĩa các chân portB là ngõ ra??, theo mình các chân này phải là đầu vào số, như vậy bạn mới có thể đọc và kiểm tra được mức logic trên các chân này chứ. Thông cảm nếu nói sai!

Thân.

thay đổi nội dung bởi: goldstar09, 13-08-2011 lúc 10:05 AM.
goldstar09 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-08-2011, 11:32 AM   #3
maruko
Đệ tử 1 túi
 
Tham gia ngày: Aug 2011
Bài gửi: 24
:
vâng ! em đang dùng chức năng ngắt trên chân RB0?(ngắt ngoài)
code của em la :

#include <16f877a.h>
#include <def_877a.h>
#device *=16
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
//#define led PIN_D1
boolean i = 1;
#int_ext
void ext_int_isr()
{
if(i == 1)
{

potrd =255;
i = 0;
}
else
{

portd=0;
i = 1;
}
}

void main()
{
TRISB =0xff;
TRISd =0x00;
port_b_pullups(true);
enable_interrupts(INT_EXT_H2L); // Cho phep ngat ngoai
enable_interrupts(global); // Cho phep ngat toan cuc
while(1);
}


trình dịch cứ báo lỗi ở phần TRISTD VÀ TRISTB mặc dù em đã khai báo thư viện #include <def_877a.h> rồi .lỗi như trong file ảnh em gửi ấy. các bác suẳ lỗi giúp em với. em cảm ơn các bác nhiều
Hình Kèm Theo
File Type: jpg loi.jpg (61.1 KB, 7 lần tải)
maruko vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-08-2011, 04:27 PM   #4
hcmut.khoamaisi
Đệ tử 4 túi
 
hcmut.khoamaisi's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TPHCM
Bài gửi: 79
:
Send a message via Yahoo to hcmut.khoamaisi
Bạn đã add file def_877a.h vào mục device của PIC chưa?Mấy lỗi này theo mình nghĩ là toàn do thư viện thôi hà !!! bạn thử sửa bỏ 2 dòng :
TRISB =0xff;
TRISd =0x00;
Thay vào đó là dùng 2 lệnh:
set_tris_b(0xff);
set_tris_d(0x00);
__________________
My blog: http://autumnneverreturn.blogspot.com/
Đối thủ khó chiến thắng nhất là bản thân !!!
hcmut.khoamaisi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-08-2011, 04:48 PM   #5
ocean_86
Đệ tử 1 túi
 
Tham gia ngày: Mar 2010
Bài gửi: 12
:
Trích:
Nguyên văn bởi maruko View Post
các bác ơi. em có sửa lại code 1 ví dụ đơn giản về ngắt ngoài . sau khi suẳ chuơng trình cứ báo lỗi mà em k biết lỗi đó do đâu.
nhờ các bác testgiups em với. em cảm ơn




#include <16f877a.h>
#include <def_877a.h>
#device *=16
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
//#define led PIN_D1

//#use fast_io(b)
//#use fast_io(d)


boolean i = 1;
#int_ext
void ext_int_isr()
{
if(i == 1)
{
//output_high(led);
potrd =255;
i = 0;
}
else
{
//output_low(led);
portd=0;
i = 1;
}
}

void main()
{

// set_tris_b(0x01);
//set_tris_d(0x00);
TRISB =0x00;
TRISd =0x00;
portd=0x00;

port_b_pullups(true);
enable_interrupts(INT_EXT_H2L); // Cho phep ngat ngoai
enable_interrupts(global); // Cho phep ngat toan cuc
while(1);
}
chào bạn
bạn thử bỏ dòng này đi xem #include <def_877a.h>
và mình không hiểu cách viết này có đúng không bạn enable_interrupts(INT_EXT_H2L);
sau while(1) hình như không có dấu chấm.
bạn kiểm tra lại nha
chúc thành công
ocean_86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-08-2011, 11:29 AM   #6
maruko
Đệ tử 1 túi
 
Tham gia ngày: Aug 2011
Bài gửi: 24
:
các bác ơi, sửa giúp em đoạn code này với . code chạy rồi nhưng khi nạp vào mạch mô phỏng thì k thấy chạy các bác ah
em dùng ngắt ngoài trên chân RB1 nối với phím bấm và 1led nối với RD1
khi chạy mô phỏng thì bật lên cái led sáng ngay.ấn phím thì k thấy led tắt. mặc dù em ấn phím có thấy sự thay đổi trạng thái trên chân RB1
các bác xem giúp em với
#include <16f877a.h>
#use delay(clock = 20Mhz)
//#device *=16
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT


#use fast_io (b)
#use fast_io (D)


boolean i = 1;

#int_ext
void ext_int_isr(){
if(i == 1){
i=input(PIN_b1);
output_high(pin_d1);

i = 0;
}
else{
output_low(pin_d1);

i = 1;
}
}

void main(){

set_tris_b(0xff);
set_tris_D(0x00);

port_b_pullups(true);
enable_interrupts(INT_EXT_H2L); // Cho phep ngat ngoai
enable_interrupts(global); // Cho phep ngat toan cuc
while(1);
}
thank các bác nhiều
maruko vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-08-2011, 04:43 PM   #7
pstin
Đệ tử 7 túi
 
Tham gia ngày: Jul 2010
Nơi Cư Ngụ: TP HCM
Bài gửi: 190
:
Thấy lạ lạ!!!!!!!!. Lúc đầu i=1 thì thực hiện lệnh if và led sáng, rồi cho i=0, vòng chương trình tiếp theo thực hiện lệnh else và tắt led, và set i=1, lặp lại mãi như vậy. Theo tui nghĩ led sẽ chớp tắt liên tục tốc độ quá nhanh và bạn thấy led luôn sáng!!!!!!!!.
Thử sửa:
#include <16f877a.h>
#use delay(clock = 20Mhz)
//#device *=16
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT


#use fast_io (b)
#use fast_io (D)


boolean i = 1;

#int_ext
void ext_int_isr(){
i=input(PIN_b1);
if(i == 1){
output_high(pin_d1);
}
else{
output_low(pin_d1);
}
}

void main(){

set_tris_b(0xff);
set_tris_D(0x00);

port_b_pullups(true);
enable_interrupts(INT_EXT_H2L); // Cho phep ngat ngoai
enable_interrupts(global); // Cho phep ngat toan cuc
while(1);
}

Tui thì khai báo nút nhấn trong chương trình chính luôn, và việc nhấn phím thì rất đơn giản.
Chúc vui!!!!!!!!
pstin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


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à 05:08 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