Ðề tài: CCS C for PIC16F877A
View Single Post
Old 12-10-2007, 12:59 AM   #4
cooloo
Nhập môn đệ tử
 
Tham gia ngày: Oct 2007
Bài gửi: 2
:
Trích:
Nguyên văn bởi nhh View Post
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()
{
while(true)
	{
	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....
Bạn ơi , khi mình compile cái code như trên thì nó báo lỗi warning về thiếu "void" . Mình bỏ thêm : void main(void) vào thì nó mới chạy .
Những function : delay() , rs232(), i2c thì tìm ở đâu vậy ???

thay đổi nội dung bởi: cooloo, 12-10-2007 lúc 04:54 AM. Lý do: thêm vào
cooloo vẫn chưa có mặt trong diễn đàn