Ăc..ặc..đang post thì bị cúp điện,bực cả mình...
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);
}
}
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
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:
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é !
Hẹn gặp lại vài hôm nữa ở bài Timer/Counter !
Chào!
