Trích:
Nguyên văn bởi lequocbao
Code:
#include <16F877A.h>
#use delay (clock=20000000)
void main()
{
do
{
output_bit(pin_a0,1);
delay_ms(200);
output_bit(pin_a1,1);
delay_ms(200);
output_bit(pin_a2,1);
delay_ms(200);
output_bit(pin_a3,1);
delay_ms(200);
output_bit(pin_a4,1);
delay_ms(200);
output_bit(pin_a5,1);
delay_ms(200);
}While(true);
}//sau 6s thì tất cả chân của portA phải ở mức áp cao
Sẳn cho mình hỏi luôn:
#use delay (clock=20000000) và delay_ms(200) là trì hoãn 1s (cái này mình thử đo bằng đồng hồ )chứ không biết có đúng là 1s không nữa?Ý mình muốn hỏi là 02 cặp lệnh trên dùng như thế nào?và con số 20000000 là gì?
|
Với PIC16F877A, khi vừa cấp nguồn cho PIC thì các chân của port A ở chế độ ngõ vào analog. Để dùng như ngõ ra digital thì bạn cần cấu hình lại port A (xem ví dụ 4-1 trong datasheet của PIC16F877A).
#use delay (clock=20000000) báo cho trình biên dịch biết xung clock của vi điều khiển là 20 MHz, từ đó có thể tính ra các số đếm tương ứng cho các hàm delay_ms() và delay_us().
Theo hiện tượng bạn mô tả, hàm delay_ms(200) cho thời gian trễ khoảng 1 s, có thể thấy xung clock thực tế bạn đang dùng trong Proteus nhỏ hơn so với giá trị đã thiết lập trong code (20 MHz) khoảng 4, 5 lần.
Với những ví dụ bật/tắt LED dùng hàm delay_ms(), mô phỏng trong Proteus chỉ tốn thời gian một cách không cần thiết.
Thân,