Chữ chạy

"Con đường đến với tri thức không dễ dàng, nhưng nếu chúng ta quyết đi sẽ đến được bến bờ tri thức !". Chào mừng các bạn đến với trang thông tin của Võ Hoàng Tâm - GV Khoa Điện Điện tử - Trường Đại học SPKT Vĩnh Long. Trang cung cấp thông tin - tài liệu học tập cho các bạn học viên và sinh viên. Chúc các bạn thành công trên hành trình đi tìm tri thức ...

Viết chương trình để mạch phát ra tiếng cảnh báo (8951)

Tín hiệu 1KHz và 500Hz phát ra trên chân 1 (p1.0), thời gian phát tín hiệu 1KHz là 100ms và thời gian phát tín hiệu 500Hz là 200ms.

Khóa điện trên chân 8 (p1.7) dùng tắt mở tín hiệu cảnh báo.

FLAG                           BIT 00h                       ; Định nghĩ Flag dùng làm bit cờ, hiện có trị là 0.
ORG 0000H 
START:                        JB P1.7,START         ; Chờ đặt nút K1 đặt xuống mức 0.
                                      JNB FLAG,NEXT      ; Nếu bit cờ Flag là 0 thì nhẩy đến tên nhãn NEXT. 
                                      MOV R2,#200           ; Nạp số thập phân 200 vào thanh ghi r2.
DV:                               CPL P1.0                   ; Lấy bù chân p1.0, lệnh bù bit có chức năng tự đảo. 
                                      LCALL DELY500      ; Cho gọi chương trình làm trễ 500us.
                                      LCALL DELY500      ; gọi lần nữa chương trình dely500.
                                      DJNZ R2,DV             ; Cho đếm lùi và thực hiện lệnh bù cpl p1.0 đến 200 lần.
                                      CPL FLAG                ; Đảo bit trong cờ Flag.
NEXT:                         MOV R2,#200             
 ; Nạp lại số thập phân 200 vào thanh ghi r2. 
DV1:                            CPL P1.0                    
; Lấy bù chân p1.0, có chức năng tự đảo. 
                                      LCALL DELY500      ; Cho gọi chương trình làm trễ 500us.
                                      DJNZ R2,DV1           ; Cho đếm lùi và thực hiện bù cpl p1.0 đến 200 lần.
                                      CPL FLAG                ; Lại cho đảo bit trong cờ Flag.
                                      SJMP START           ; Lập lại lệnh từ tên nhãn START. 
DELY500:                   MOV R7,#250             ; Viết chương trình con làm trễ 500us. Nạp số 250 và thanh ghi r7.
LOOP:                         NOP                            ; Lệnh trống, dùng nó làm tăng thời gian trễ lên gấp đôi.
                                      DJNZ R7,LOOP        ; Đếm lùi r7 để làm trễ.
                                      RET                           ; Cho quay lại thực hiện dòng lệnh sau lệnh call.
END                                                                 ; Dừng biên dịch

Phân tích cách viết các câu lệnh:

Trong bài nầy, Bạn thấy dùng khai báo bit để định nghĩa tên tự đặt của Bạn, như:

flag  BIT 0    ; Chữ flag do Bạn tự đặt là một BIT, hiện có giá trị là bit 0.

Bạn dùng lệnh nhẩy theo bit để kiểm tra khóa điện K1.

start: jb p1.7, start     ; Lệnh này sẽ chờ chân p1.7 xuống bit 0, nếu không nó sẽ luôn dừng lại ở đây.

cpl p1.0     ; Lệnh lấy bù trên chân p1.0, nghĩa là nó đang ở mức 0 thì cho chuyển lên 1 và ngước lại.

Phân tích các câu lệnh trên Bạn thấy:

Loa sẽ hú với tín hiệu 1000us  (do 2 lần gọi dely500) và kéo dài 200 lần rồi chuyển qua hú với tín hiệu 500us  (do chỉ gọi dely500 có 1 lần) cũng thức hiện 200 lần. Với cách tạo ra tín hiệu hú 2 nhịp này, Bạn sẽ nghe  tiếng hú từ Loa phát ra, tín hiệu nghe như tiếng còi hụ cảnh báo..