B ảng 2.4: Tóm tắc các lệnh trong vi xử lý
2.4.3. Khởi tạo và truy xuất các thanh ghi định thờ
Các bộđịnh thời thường được khởi động 1 lần ở thời điểm bắt đầu chương trình. TMOD là thanh ghi được khởi động trước tiên vì đây là thanh ghi thiết lập chếđộ hoạt động ví dụ khởi động bộ định thời 1 hoạt động chế độ 16 bit (chếđộ 1) xung clock được cấp từ mạch dao động trên chip.
MOV TMOD, #00010000B
Kết quả của lệnh này thiết lập M1 = 0 và M0 = 1 đểấn định chếđộ 1, C/T=0 và GATE = 0 để sử dụng xung clock trên chip, xóa các bit chọn chếđộ của bộđịnh thời 0. trong thực tế bộđịnh thời làm việc bắt đầu khi bit điều khiển hoạt động TR1 được set bằng 1.
Trong trường hợp cần đếm sốđếm ban đầu các thanh ghi định thời TL1, TH1 cũng phải được khởi động, cờ tràn set =1 khi xảy ra số đếm tràn từ FFFFH xuống 0000H, vì vậy một khoảng thời gian 100μs có thể định thời bằng cách khởi động TL1/TH1 chứa số đếm nhỏ hơn 0000H một lượng là 100 nghĩa là -100 hay FF9CH. Các lệnh sau thực hiện điều này:
MOV TL1, #9CH MOV TH1, #0FFH
Kếđến bộđịnh thời bắt đầu hoạt động bằng cách thiết lập bít điều khiển hoạt động bằng 1 như sau:
SETB TR1
Cờ tràn được hoạt động thiết lập sau khoảng thời gian 100μs bằng cách sử dụng một lệnh rẽ nhánh và lặp lại chính lệnh này trong khi cờ tràn chưa đực set bằng 1:
WAIT: JNB TF1, WAIT
Khi bộđịnh thời tràn, ta cần dừng bộđịnh thời và xóa cờ tràn bằng phần mềm: CLR TR1 ; dừng bộđịnh thời
CLR TF1 ; xóa cờ tràn
- Đọc bộđịnh thời : ta phải đọc 2 thanh ghi định thời bằng 2 dòng lệnh liên tiếp, một sai pha có thể xuất hiện nếu có tràn từ byte thấp chuyển sang byte cao giữa 2 lần đọc do vậy ta không đọc đúng được giá trị cần đọc. Giải pháp đưa ra là trước tiên ta đọc byte cao, kếđến byte thấp và rồi đọc byte cao lần nữa. Nếu byte cao thay đổi giá trị ta lặp lại các thao tác đọc vừa nêu. Ví dụđọc thanh ghi TL1/TH1 đưa vào thanh ghi R6, R7 va giải quyết vấn đề vừa nêu:
AGAIN: MOV A, TH1 MOV R6, TL1
CJNE A, TH1, AGAIN MOV R7, A
Ví dụ: viết chương trình tạo sóng xung vuông 10KHz trên chân P1.0 bằng cách sử dụng bộđịnh thời 0.
Với tần số 10 KHz yếu cầu chu kỳ 100 μs. Với thời gian mức cao là 50 μs và thời gian mức thấp 50 μs. Do khoảng thời gian này nhỏ hơn 256 μs nên chế độ2 sử dụng được. một tràn xảy ra sau 50 μs yêu cầu một giá trị sốđếm nhỏ hơn 00H một lượng +50 phải được nạp và được nạp lại cho TL0, nghĩa là giá trị nạp cho TH0 là -50. Dưới đây là chương trình theo yêu cầu:
ORG 8100H
MOV TMOD, #02H ; chếđộ tự nạo lại 8 bit MOV TH0, #-50H ; TH0 chứa giá trị -50 SETB TR0 ; bộđịnh thời hoạt động LOOP: JNB TF0, LOOP ; chờ tràn CLR TF0 ; xóa cờ tràn CPL P1.0 ; đổi trạng thái P1.0 (bù) SJMP LOOP ; lặp lại END
Ví dụ: mạch còi được nối chân P1.7 đầu vào nối chân P1.6. Viết chương trình đọc mức logic chuyển mạch chân P1.6 và hụ còi trong 1s sau mỗi lần phát hiện sự chuyển trạng thái từ 1 xuống 0.
HUNDERED EQU 100 ; 100x10000 μs = 1s
COUNT EQU 10000
ORG 8100H
MOV TMOD, #01H ;chếđộ 1, bộđịnh thời 0 LOOP: JNB P1.6, LOOP ; chề logic 1 ở ngõ vào WAIT: JB P1.6, WAIT ; chờ ligic 0 ở ngõ vào
SETB P1.7 ; hụ còi CALL DELAY ; chờ 1 s CLR P1.7 ; tắt còi SJMP LOOP DELAY: MOV R7, #HUNDERED AGAIN:
MOV TH0, #HIGH COUNT
MOV TL0, #LOW COUNT
WAIT2: JNB TF0, WAIT2 CLR TF0 CLR TR0 DJNZ R7, AGAIN RET END 2.5. HOẠT ĐỘNG PORT NỐI TIẾP 2.5.1. Giới thiệu
Chức năng của port nối tiếp là thực hiện việc chuyển đổi dữ liệu song song thành nối tiếp khi phát và chuyển đổi dữ liệu nối tiếp thành song song khi thu. Các mạch phần cứng bên ngoài truy xuất thông qua chân TxD (P3.1 phát dữ liệu) và RxD (P3.0 thu dữ liệu).
Đặc trưng của port nối tiếp là hoạt động song công nghĩa là có thể thu phát đồng thời. phần mềm sử dụng 2 chức năng đặc biệt SBUF và SCON để truy xuất port nối tiếp. Bộđệm của port nối tiếp SBUF có địa chỉ 99H. Việc ghi lên SBUF sẽ nạp dữ liệu để phát và việc đọc SBUF sẽ truy xuất dữ liệu đã nhận (xem hình 2.17) .
Thanh ghi điều khiển port nối tiếp SCON (dịa chỉ 98H thanh ghi định địa chỉ bit) thanh ghi này chứa các bit trạng thái và các bit điều khiển. Các bit điều khiển sẽ thiết lạp chếđộ hoạt động cho port nối tiếp còn các bit trang thái chỉ ra sự kết thúc việc thu hoặc phát 1 ký tự.
Hình 2.17: Sơđồ khối của port nối tiếp