Ðăng Nhập

View Full Version : Hỏi về việc khai báo #use fast_io(port)???


dvtrieu89
02-04-2009, 10:06 PM
Các bác cho em hỏi về cách sử dụng các khai báo #use fast_io(port). Khi nào mình dùng? Không dùng thì chương trình có bị ảnh hưởng gì không? Cảm ơn các bác nhiều lém lém...

phandinh
02-04-2009, 10:42 PM
///////////////////////// dùng #use fast_io////////////////////////////
#include <16f877a.h>
#fuses nowdt,hs,noprotect
#use delay(clock = 4000000)
#use fast_io(b) //
#byte portb=0x06 // phải khai báo địa chỉ port B nếu dùng fast_io(b)
void main()
{
set_tris_b(0);
while(1)
{
portb = 0xff ;
delay_ms(500);
portb = 0;
delay_ms(500);
}
}
////////////////////// không dùng #use fast_io////////////////////////////
#include <16f877a.h>
#fuses nowdt,hs,noprotect
#use delay(clock = 4000000)
void main()
{ while(1) /// vòng lặp luôn xảy ra
{
output_high(pin_b0);
output_high(pin_b1);
output_high(pin_b2);
output_high(pin_b3);
output_high(pin_b4);
output_high(pin_b5);
output_high(pin_b6);
output_high(pin_b7);
delay_ms(500);
output_low(pin_b0);
output_low(pin_b1);
output_low(pin_b2);
output_low(pin_b3);
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
output_low(pin_b7);
delay_ms(500);
}
}

dvtrieu89
03-04-2009, 12:12 AM
khi minh khai báo #include <def_877a.h> thì nó đã định nghĩa #byte portb=0x06 rồi phải không các bác, vậy có cần khai báo thêm không. Cụ thể đoạn khai báo của em dưới đây, các bác xem dùm nha.

#include <16f877A.h>
#include <def_877a.h>
#fuses NOWDT,HS,PUT,NOPROTECT,NOLVP,NODEBUG
#use delay(clock=16000000)
#use fast_io(b)
void khoitao()
{
set_tris_d(0x00);
set_tris_c(0x00);
set_tris_e(0xff);
set_tris_b(0xff);
}
......
if((rb1==1)&&(rb2==1)&&(rb3==1)&&(rb4==1))
.....
cảm ơn bác nha

nguyennam8888
03-04-2009, 12:23 AM
khi minh khai báo #include <def_877a.h> thì nó đã định nghĩa #byte portb=0x06 rồi phải không các bác, vậy có cần khai báo thêm không. Cụ thể đoạn khai báo của em dưới đây, các bác xem dùm nha.

#include <16f877A.h>
#include <def_877a.h>
#fuses NOWDT,HS,PUT,NOPROTECT,NOLVP,NODEBUG
#use delay(clock=16000000)
#use fast_io(b)
void khoitao()
{
set_tris_d(0x00);
set_tris_c(0x00);
set_tris_e(0xff);
set_tris_b(0xff);
}
......
if((rb1==1)&&(rb2==1)&&(rb3==1)&&(rb4==1))
.....
cảm ơn bác nha

không cần phải khai báo lại đâu bạn

dvtrieu89
03-04-2009, 12:25 AM
các bác cho em hoi thêm khi mình khai báo #use fast_io(b) thì mình sử dụng các lệnh ví dụ như:
output_low(pin_b0);
output_low(pin_b1);
output_low(pin_b2);
output_low(pin_b3);
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
output_low(pin_b7);

Có vấn đề gì không?
Thankssssssssss

nguyennam8888
03-04-2009, 12:34 AM
các bác cho em hoi thêm khi mình khai báo #use fast_io(b) thì mình sử dụng các lệnh ví dụ như:
output_low(pin_b0);
output_low(pin_b1);
output_low(pin_b2);
output_low(pin_b3);
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
output_low(pin_b7);

Có vấn đề gì không?
Thankssssssssss

khi khai báo như vậy thì trong chương trình khi dùng các lệnh io như output_low(), output_high() , thì no chỉ mất 1 lệnh ma thôi

dvtrieu89
03-04-2009, 12:46 AM
Em không khai báo #use fast_io(b) thì chương trình không có lỗi, có phải là chắc chắn nó cahj sai không các bác?

nguyennam8888
03-04-2009, 01:25 AM
Em không khai báo #use fast_io(b) thì chương trình không có lỗi, có phải là chắc chắn nó cahj sai không các bác?

trong main() ban phải dùng hàm set_tris_X() để chỉ chân vào ra thì khai báo #ues fast_io() mới có hiệu lực, không thì chương trình sẽ chạy sai

dvtrieu89
03-04-2009, 08:52 AM
Vậy để đảm bảo chương trình không sai thì ta nên khai báo #ues fast_io() cho tất cả các port phải không bác.
Em mới chuyển qua C nên còn gà lắm. Cảm ơn bác đã tận tình chỉ dẫn.

cskiller
03-04-2009, 11:00 AM
S ử dụng #use fast_io() sẽ báo cho CCS biết việc thực hiện lệnh SET_TRIS_X() một lần trước khi sử dụng tới IO, điều này sẽ làm cho việc Read/Write các IO nhanh hơn so với việc không khai báo(mặc định CCS sẽ thực hiện gán lại TRIS của IO trước khi Read/Write).
Vậy nên nếu ứng dụng của bạn chắc chắn dùng port 1 IO vào 1 chức năng nào đó làm Input hoặc Output thôi thì khai báo #use_fast_io() sẽ rất hiệu quả.

dvtrieu89
03-04-2009, 08:04 PM
Mình đã hiểu rồi cảm ơn các bạn nhiều nha. Khi nào có gì thắc mắc lại nhờ các bạn tiếp nhé! Hihi

hcmut.khoamaisi
24-09-2010, 02:50 AM
Mình không khai báo được dòng #include <def_877a.h> .CCS cứ báo lỗi là không tìm thấy file trên trong mục device.Bạn nào có kinh nghiệm rồi xin chỉ giáo giùm.Cám ơn nhiều lắm

vinh2809
24-09-2010, 04:45 PM
Mình không khai báo được dòng #include <def_877a.h> .CCS cứ báo lỗi là không tìm thấy file trên trong mục device.Bạn nào có kinh nghiệm rồi xin chỉ giáo giùm.Cám ơn nhiều lắm

Ui y hệt em, bỏ đi chương trình vẫn chạy tốt ko sao cả. Em cũng chẳng hiểu tại sao, ai biết chỉ giùm

love_ac
24-09-2010, 07:10 PM
Lâu không dùng CCS nên ko nhớ rõ lắm. Hình như file Def_877a.h là do mình định nghĩa hay qui ước một số thứ ở trong đó. Thế thì bạn để file này ở chỗ nào...

caovanhuong
25-09-2010, 03:03 AM
Ui y hệt em, bỏ đi chương trình vẫn chạy tốt ko sao cả. Em cũng chẳng hiểu tại sao, ai biết chỉ giùm

bạn phải có cái file này và bỏ chung vào một thư mục mà bạn lưu dự án thì mới được.

vinh2809
25-09-2010, 11:56 AM
bạn phải có cái file này và bỏ chung vào một thư mục mà bạn lưu dự án thì mới được.

<def_887.h> là file do người dùng tự định nghĩa có đúng không? Có 1 vài bài nói là tìm được file này trên diễn đàn nhưng em ko tìm thấy. Mấy file đó lấy ở đâu vậy anh

caovanhuong
25-09-2010, 08:35 PM
<def_887.h> là file do người dùng tự định nghĩa có đúng không? Có 1 vài bài nói là tìm được file này trên diễn đàn nhưng em ko tìm thấy. Mấy file đó lấy ở đâu vậy anh

đây là file Def_877A

vinh2809
25-09-2010, 10:02 PM
đây là file Def_877A
À vậy xin hỏi luôn các file def của các con khác ví dụ 18f4550 thì ở đâu vậy? Nếu không có mà tự ngồi định nghĩa lại thì hơi ngại.
Nhân tiện hỏi luôn, bác biết chỉ giùm em các file .h cũng tự sửa được phải không và nếu sửa thì khi làm cũng chỉ cần làm theo cái mình đã sửa.
Ví dụ file 16F887.h của em thấy khai báo #define sAN0 1 // A0, nếu dùng theo các ví dụ AN0 thì lại báo lỗi => sửa thành #define AN0 1 // A0 sau dùng AN0 thôi vẫn được chứ

nhat_minh1
28-09-2010, 05:30 PM
su dung port nào thi khai báo ,

hcmut.khoamaisi
28-09-2010, 05:35 PM
Mình đã hiểu rồi khi có khai báo
#use fast_io(b)
thì không dùng :#include <def_877a.h> được
mà buộc phải khai báo địa chỉ của portB cu thể là
#byte portb=0x06 // phải khai báo địa chỉ port B nếu dùng fast_io(b)

caovanhuong
28-09-2010, 09:44 PM
Mình đã hiểu rồi khi có khai báo
#use fast_io(b)
thì không dùng :#include <def_877a.h> được
mà buộc phải khai báo địa chỉ của portB cu thể là
#byte portb=0x06 // phải khai báo địa chỉ port B nếu dùng fast_io(b)

không đúng, nếu mà không khai báo file def_877a.h thì mới phải định nghĩa các chân và các thanh ghi và vẫn có thể sử dụng #use fast_io(portx). còn khi khái báo file trên thì vẫn khai báo được #use fast_io(portx). trong chương trình không khai báo #use fast_io(portx) thì chương trình vẫn chạy tốt nhưng trong 1 vài trường hợp thì khai báo nó thì chương trình sẽ chạy nhanh hơn.

hoantien05
29-09-2010, 11:27 PM
để xuất ra từng bit trong CCS thì dùng lênh output_low(), output_high(), tuy nhien trong wa trình viêt em không muốn ghi tên các bit ( vi dụ output_high(pin_b0)) mà em muốn dạt ten nó thì phải làm sao???

vinh2809
30-09-2010, 12:36 AM
để xuất ra từng bit trong CCS thì dùng lênh output_low(), output_high(), tuy nhien trong wa trình viêt em không muốn ghi tên các bit ( vi dụ output_high(pin_b0)) mà em muốn dạt ten nó thì phải làm sao???

khai báo ở đầu chương trình #bit id = x.y id là tên biến, x là vị trí byte, y là vị trí bit => xuất giá trị = giá trị cho biến

caovanhuong
30-09-2010, 12:38 AM
để xuất ra từng bit trong CCS thì dùng lênh output_low(), output_high(), tuy nhien trong wa trình viêt em không muốn ghi tên các bit ( vi dụ output_high(pin_b0)) mà em muốn dạt ten nó thì phải làm sao???

nếu bạn đã sử dụng khai báo file def_877a.h (vi1 dụ là con PIC6F877a) thì nó đã định nghĩa sẵn cho bạn chân I/O ví dụ bạn muốn xuất chân RB3 ra mức 1 thì bạn chỉ cần ghi là RB3=1;
và các chân khác cũng tương tự như RB0 đến RB7, RA0-RA7 và các port C, D và E. còn nếu không sử dụng file def_xxx thì bạn phải định nghĩa chân cho nó bằng hàm #bit tenbien=port.x (x này là vị trí chân) chẳng hạn là #bit RB3=portb.3 thì có nghĩa là bạn định nghĩa chân RB3 là portb3

ichitea606
10-04-2015, 11:37 PM
#include <16F877A.h>
#include <def_16f877a.h>
#fuses NOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP, NOCPD,NOWRT
#use delay(clock=12000000)
#USE FAST_IO(A)
#USE FAST_IO(B)

#byte portb=0x05
#byte portb=0x06


unsigned char macot[]={255, 255, 255, 255, 255,
255, 254, 224, 254, 255,
255, 224, 251, 251, 224,
255, 224, 255, 255, 255,
255, 255, 255, 224, 234,
238, 255, 224, 252, 251,
247, 224, 255, 255, 255,
255, 255, 255, 255, 255, };


int8 i,m,k,j;

//**************************chuong trinh chinh**********************************
void main()
{
//ADC_OFF;

set_tris_b(0);
set_tris_a(0);
delay_ms(100);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(global);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us

j=0x01;

while(true)
{
//********************************PHUT************** *****************

for(m=0;m<35;m++)
{
for(k=0;k<90;k++)
{
j=0x01;

for(i=0;i<5;i++)
{
portb=macot[i+m];
delay_ms(1);
porta=(j&(0x3f)); //porta=01 0000 0011 1111
j=j<1;
}
porta=0;
}
}



}
}

code của em như thế này mà nó cứ báo là chưa khai bào porta là sao các bác? mong các bác chỉ giúp.

khanhtanvn88
21-04-2015, 01:35 PM
#byte portb=0x05
#byte portb=0x06
kiểu này mà ko lỗi mới lạ