Lỗi cant open include file 16f877a.h là gì

/*ket qua o PORTB là:00000001,00000010,00000100,00001000,00010000,00100000,01000000,10000000,10000001,10000010,10000100,10001000,.....cuoi cung thi PORTB=0xFF */

include<16F877A.h>

include

fuses NOWDT,PUT,HS,NOPROTECT,NOLVP

use delay(clock=20000000)

use fast_io(b)

int8 sck,bienxoay;

main()

{

trisb=0;

while(true){

sck=8;

portb=0;

delay_ms(100);

bienxoay=1;

while(sck>0)

{

portb=bienxoay;

bienxoay=bienxoay<<1;

delay_ms(100);

sck--;

} 1.6. I/O + Delay _ Delay 1s RB0

include <16F877A.h>

fuses NOWDT,PUT,XT,NOPROTECT

use delay(clock=4000000)

byte PORTB = 0x06

int16 count;

int8 a;

//Chuong trinh ngat TMR0

int_timer0

void interrupt_timer0()

{

set_timer0(6);

++count;

if(count == 2000) // 2000*500us = 500000us = 1s

{

count=0;

rotate_left(&a,1);

}

}

//Chuong trinh chinh

void main(void)

{

set_tris_b(0);

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

a = 0x01;

while(true)

{

PORTB = a;

}

}

Lỗi cant open include file 16f877a.h là gì

1.7. Nháy Led RB0

Chương trình này làm nhấp nháy con led ở chân RB0 1s sáng, 1s tắt.

Code:

include<16F877A.h>

fuses NOWDT,PUT,HS,NOPROTECT

use delay(clock=10000000)

main()

{

output_high(PIN_B0);

delay_ms(1000);

output_low(PIN_B0);

delay_ms(1000);

}

}

Trên đây:

Code:

include<16F877A.h>

Khai báo con PIC bạn sử dụng, file này chương trình viết sẵn nhằm khai báo các bit, thanh ghi quan trọng trong con pic này.Các bạn có thể vào thư mục cài đặt C:\Program Files\PICC\Devices\16F877A.h để xem nó khai báo được những gì trong đó!

Code:

fuses NOWDT,PUT,HS,NOPROTECT

Thiết lập các config

Code:

use delay(clock=10000000)

Khai báo tần số dao động cấp cho PIC

Code:

output_high(PIN_B0)

Xuất ra chân RB0 mức logic 1 (tức 5V), do khi thực hiện hàm này đã bao hàm luôn việc tác động lên thanh ghi TRISB (dùng chọn chân I/O) do vậy ta không cần viết lệnh chọn chân I/O nữa.

Code:

output_low(PIN_B0)

Ngược lại

Code:

delay_ms(1000)

Tạo trễ khoảng thời gian theo mili giây là 1000 (tức 1s) *Chú ý hàm này chỉ có tác dụng khi có khai báo tần số dao động cấp cho PIC Và bây giờ thử làm cho tất cả 8 led nối với portB chớp tắt 1s xem nào!Phải chăng ta sẽ làm như sau (Viết trong vòng lặp while):

Code:

{

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(1000);

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(1000);

}

Viết như thế này thì quá dài và thiếu chính xác nữa, có cách nào khác hay hơn không ? Sao ta không xuất đẩy hẳn portB lên mức cao,tạo trễ 1s rồi ép cho nó xuống mức thấp,tạo trễ 1s cùng một lúc nhỉ !

Bài tiếp theo sẽ đưa ra câu trả lời....

output_high(pin_xx);

output_low (pin_xx);

Hai câu lệnh trên chỉ làm cho chân ra xx là cao hay thấp, ứng với mức logic 1 hoặc 0.trong bài trên ta muốn cho sáng tất một port thì chỉ càn câu lệnh :

Code:

void main (void )

{

set_tris_b(0); // cả port B là port ra

set_tris_c(0); // cả port C là port ra

port_b(0x00); // khởi tạo giá trị đầu port B là 0 ( Tất cả led đều tắt )

port_c(0x00); // khởi tạo giá trị đầu port B là 0 ( Tất cả led đều tắt )

delay_ms(100);

while(1)

{

port_b(0xff);

delay_ms(1000);

port_c(0xff);

delay_ms(1000);

}

}

1.8. Delay 1s portB

Lỗi cant open include file 16f877a.h là gì
Lỗi cant open include file 16f877a.h là gì

Ăc..ặc..đang post thì bị cúp điện,bực cả mình...

Lỗi cant open include file 16f877a.h là gì

Và đây là câu trả lời cho việc delay led ở portB 1s

Code:

include<16F877A.h>

fuses NOWDT,PUT,HS,NOPROTECT

use delay(clock=10000000)

use fast_io(b)

byte portb=0x6

main()

{

set_tris_b(0);

while(true)

{

portb=255; //all led on

delay_ms(1000);

portb=0; //all led off

delay_ms(1000);

}

}

Code:

byte portb=0x6

Khai báo địa chỉ portB, không như trong MPLAB đã định nghĩa luôn cái này cho ta, nếu không có dòng này chương trình sẽ báo lỗi chưa định nghĩa portB

Code:

set_tris_b(0)

Tất cả các chân của portB là output, muốn set tất cả các chân là input thì trong ngoặc là 255,....Trong HELP hướng dẫn lệnh này như sau:

"These functions allow the I/O port direction (TRI-State) registers to be set. This must be used with FAST_IO and when I/O ports are accessed as memory such as when a

BYTE directive is used to access an I/O port. Using the default standard I/O the built in functions set the I/O direction automatically."

Rõ ràng khi set byte làm I/O nếu ta thêm khai báo:

Code:

use fast_io(b)

Dùng khai báo này thì CCS sẽ chỉ thực hiện đúng một lệnh cho việc I/O các chân trên port tương ứng, nếu ko nó phải mất khoảng 3 hay 4 lệnh gì đó.

Phần I/O + Delay tạm thời xong như vậy, bác nào có phản hồi thì tiếp tục thảo luận.Xong phần này có thể viết về xuất led 7 đoạn, quét phím, LCD,....Bác nào viết thì cứ post lên cho bà con thảo luận nhé !

+Một phương án khác:

include <16F877A.h>

fuses HS, NOWDT, NOLVP, XT

use delay(clock=4000000)

void main() { byte leds = 0xff; set_tris_b(0x00); // configure pins of PORTB as output while (true) { output_b(leds); leds = ~leds; // toggle leds delay_ms(1000); } }

1.9. Delay_Timer0

//*****************************************

// CHUONG TRINH SU DUNG TMR0

//date:23/08/2005

//author:[email protected]

//status: OK!

//*****************************************

include<16F877A.h>

include

fuses NOWDT,PUT,HS,NOPROTECT,NOLVP

use delay(clock=20000000)

void tre_ms(unsigned int time); void main()

{

TRISB=0;

setup_timer_0();

while(1)

{

PORTB = 0;

tre_ms(250);

PORTB =0xff;

tre_ms(250);

}

}

//******************************************

void tre_ms(unsigned int time)

{

int8 i,j;

GIE=0;

T0CS=0;// Chon internal

T0SE=0;// rising edge

PSA =0;// Timer mode

PS2=0;PS1=1;PS0=1; // 1:8

for(i=0;i

{

for(j=0;j<5;j++)

{

TMR0=132;

while(tmr0if==0);

tmr0if = 0;

}

//**********

cho em hỏi, em đang làm thí nghiệm pic16f84a, làm led chớp tắt theo ý muốn nhưng em muốn dùng 1 biến trở để chỉnh tốc độ delay thì phải làm sao? nhờ các anh chỉ giáo! và em muốn dùng time 0 được không? (xin lỗi mấy anh, mục này mà em hỏi F84a)

Người ta thường dùng bộ ADC trong PIC (tất nhiên đang nói đến những chip có module ADC) để đọc giá trị của biến trở rồi điều chỉnh thời gian/tốc độ chớp tắt. Với PIC16F84A (không có module ADC), bạn vẫn có thể làm được điều đó, nhưng dùng một cách khác, được đề cập đến trong app. note 863 của Microchip. Bạn tìm đọc app. note đó trên web site của Microchip.

+cho em hoi trong ccs co ho tro vong lap " for" ko vay cac bac .. sao em lam hoai ma ko duoc vay .. bien dich van dung ma chay thi ko duoc...

Code:

include<16F877.h>

device *=16 ADC=8

fuses NOWDT,PUT,HS,NOPROTECT

use delay(clock=10000000)

use fast_io(b)

byte p3=0x06

byte porta=0x05

void main()

{

int8 const led[]={1,2,4,8,16,32,64,128},a;

set_tris_b(0);

set_tris_a(0);

set_tris_c(0);

set_tris_d(0);

while(true)

{

for( a=0;a<8;a++)

p3=led[a];

delay_ms(100);

}

}

Như thế nào là chạy không được?

Theo code của bạn, trong vòng while quá trình sau sẽ được thực hiện, nếu a là biến: 1. Xuất 8 lần dữ liệu ra p3 (địa chỉ 0x06) 2. Làm trễ 100 ms 3. Quay lại bước 1

Em biet no sai o dau roi. Sau moi lan gia tri a tang len 1 . phai delay mot khoan thoi gian, neu ko no se chay den gia tri cuoi cung roi xuat ra portb , vay p3=led[7]=128; nhu vay xem nhu vong lap ko co tac dung(co vay thoi cugn so y thiet(~_~).. Vay doan code dung la 8 con led se chay duoi nhau hoai (_)..)

Code:

include<16F877.h>

device *=16 ADC=8

fuses NOWDT,PUT,HS,NOPROTECT

use delay(clock=10000000)

use fast_io(b)

byte p3=0x06

void main()

{

int8 const led[]={1,2,4,8,16,32,64,128},a;

set_tris_b(0);

while(true)

{

for(a=0;a<8;a++)

{

p3=led[a];

delay_ms(20);

}

}

}

namqn: bạn nên đặt phần code của bạn giữa hai tag [ code] và [ /code] để định dạng cho phần code (hai tag không có khoảng trắng nào hết chứ không phải như được hiển thị ở đây).