Professional Documents
Culture Documents
#include <8051.h>
// Hàm trễ (delay) sử dụng để đảm bảo chu kỳ làm việc đúng
void delay(unsigned int count) {
while (count--);
}
void main() {
// Thiết lập chân P1.0 là ngõ ra
P1_0 = 0; // Xác định trạng thái ban đầu là 0
P1_0 = 1; // Xác định trạng thái ban đầu là 1
// Cấu hình Timer 1 để tạo sóng vuông
TMOD = 0x10; // Chọn chế độ 16-bit cho Timer 1
TH1 = 0xFF - (XTAL_FREQ / (PWM_FREQ * 2 * 16)); // Tính toán giá trị đặt
trước cho Timer 1
TL1 = TH1; // Sao chép giá trị đặt trước vào thanh ghi thấp
TR1 = 1; // Khởi động Timer 1
while (1) {
// Kiểm tra xem nếu giá trị Timer 1 lớn hơn hay bằng chu kỳ làm việc, thì đảo
trạng thái của ngõ ra P1.0
if (TF1) {
TF1 = 0; // Đặt lại cờ tràn
P1_0 = !P1_0; // Đảo trạng thái của ngõ ra
delay((100 - DUTY_CYCLE) * 100); // Trễ để tạo chu kỳ làm việc
}
}
}
Câu 2 : Viết chương trình dùng Timer tạo sóng vuông f=500Hz. Biết rằng
tần số thạch anh là 12MHz và bộ đinh thời 0.
#include <8051.h>
// Hàm trễ (delay) sử dụng để đảm bảo chu kỳ làm việc đúng
void delay(unsigned int count) {
while (count--);
}
void main() {
// Thiết lập chân P1.0 là ngõ ra
P1_0 = 0; // Xác định trạng thái ban đầu là 0
P1_0 = 1; // Xác định trạng thái ban đầu là 1
while (1) {
// Kiểm tra xem nếu giá trị Timer 0 lớn hơn hay bằng 128, thì đảo trạng thái
của ngõ ra P1.0
if (TF0) {
TF0 = 0; // Đặt lại cờ tràn
P1_0 = !P1_0; // Đảo trạng thái của ngõ ra
}
}
}
Câu 3 : Thiết kế trên proteus hệ thống đèn giao thông 3 đèn xanh đỏ vàng
có thứ tự sáng lần lượt 30s, 20s, 3s