« Home « Kết quả tìm kiếm

Lý thuyết lập trình cơ bản - Chương 8: Các lệnh một bit và lập trình


Tóm tắt Xem thử

- Trong các bộ vi xử lýnh địa chỉ theo byte này thì các nội dung của một thanh ghi, bộ nhớ RAM hay cổng đều phải được truy cập từng byte một.
- Do vậy khả năng đánh địa chỉ đến từng bít của 8051 rất thích hợp cho ứng dụng này.
- Vậy những bộ phận nào của CPU, RAM, các thanh ghi, cổng I/O hoặc ROM là có thể đánh địa chỉ theo bít được.
- Vì ROM chỉ đơn giản dữ mã chương trình thực thi nên nó không cần khả năng đánh địa chỉ theo bít.
- Tất cả mọi mã lệnh đều định hướng theo byte chỉ có các thanh ghi, RAM và các cổng I/O là cần được đánh địa chỉ theo bít.
- Trong 8051 thì rất nhiều vị trí của RAM trong một số thanh ghi và tất cả các cổng I/O là có thể đánh địa chỉ theo từng bít.
- 8.1.1 Các lệnh một bít..
- Bảng 8.1: Các lệnh một bít của 8051.
- 8.1.2 Các cổng I/O và khả năng đánh địa chỉ theo bít..
- Ví dụ “SETB P1.5” là thiết lập bít cao số 5 của cổng 1.
- Do vậy ta chốt P1.0 với thời gian giữ chậm giữa các trạng thái..
- HERE: SETB P1.0 ;Thiết lập bít 0 cổng 1 lên 1..
- LCALL DELAY ;Gọi chương trình con giữ chậm DELAY CLR P1.0 ;P1.0 = 0.
- HERE: CPL P1.0 ;Bù bít 0 của cổng 1..
- BACK: SETB P1.3 ;Thiết lập bít 3 cổng 1 lên 1..
- CLR P1.3 ;Xoá bít 3 của cổng 1 và 0..
- Lưu ý rằng, khi mã “P1.0” được hợp dịch nó trở thành “SETB 90H” vì P1.0 có địa chỉ trong RAM là 90h.
- Từ hình vẽ 8.1 ta thấy rằng các địa chỉ bít cho P0 là 80H đến 87H và cho P là 90H đến 97H v.v.
- Hình 8.1 cũng chỉ ra tất cả các thanh ghi có khả năng đánh địa chỉ theo bít..
- Bảng 8.2: Khả năng đánh địa chỉ theo bít của các cổng..
- P0 P1 P2 P3 Port's Bit P0.0 P1.0 P2.0 P3.0 D0 P0.1 P1.1 P2.1 P3.1 D1 P0.2 P1.2 P2.2 P3.2 D2 P0.3 P1.3 P2.3 P3.3 D3 P0.4 P1.4 P2.4 P3.4 D4 P0.5 P1.5 P2.5 P3.5 D5 P0.6 P1.6 P2.6 P3.6 D6 P0.7 P1.7 P2.7 P3.7 D7.
- Ví dụ 8.2:.
- c) SETB 92H là dành cho SETB P1.2 d) SETB 0A7H là dành cho SETB P2.7.
- e) CLR 0F2H là dành cho CLR D2 của thanh ghi B.
- Hãy hiển thị liên tục, mỗi khi nó lên cao thì hãy gửi một xung cao-xuống-thấp (Aigh-to-low) đến cổng P1.5 để bật còi báo..
- Các lệnh JNB và JB có thể được dùng đối với các bít bất kỳ của các cổng I/O 0, 1, 2 và 3 vì tất cả các cổng này đều có khả năng đánh địa chỉ theo bít.
- 8.1.4 Các thanh ghi và khẳ năng đánh địa chỉ theo bít..
- Trong tất cả các cổng I/O đều có khả năng đánh địa chỉ theo bít thì các thanh ghi lại không được như vậy.
- Ta có thể nhìn thấy điều đó từ hình 8.1: Chỉ thanh gh B, PSW, IP, IE, ACC, SCON và TCON là có thể đánh địa chỉ theo bít, ở đây ta sẽ tập trung vào các thanh ghi A, B và PSW còn các thanh ghi khác sẽ đề cập ở các chương sau.
- Từ hình 8.1 hãy để ý rằng cổng PO được gán địa chỉ bít 80H-87H.
- Còn đại chỉ bít 88-8FH được gán cho thanh ghi TCON..
- Cuối cùng địa chỉ bít F0-F7H được gán cho thanh ghi B.
- Xét ví dụ 8.4 và 8.5 về việc sử dụng các thanh ghi này với khả năng đánh địa chỉ theo bít..
- Hình 8.1: Địa chỉa theo Byte và bít của bộ nhớ RAM các thanh ghi chức năng đặc biệt..
- Ví dụ 8.4: Hãy viết chương trình để kiểm tra xem thanh ghi tích luỹ có chứa một số chẵn không? Nếu có thì chia nó cho 2, nếu không thì hãy làm chẵn nó và sau đó chia nó cho 2..
- DO của thanh ghi A có bằng 0?.
- Ví dụ 8.5: Hãy viết đoạn chương trình để kiểm tra xem các bít 0 và 5 của thanh ghi B có giá trị cao không? Nếu không phải thì đặt chúng lên 1 và lưu vào thanh ghi bộ..
- Cắt thanh ghi B.
- Hình 8.2: Các bít của thanh ghi PSW..
- Khi RESET thì bằng 0 được chọn, chúng ta có thể chọn các băng bất kỳ khác bằng cách sử dụng khả năng đánh địa chỉ theo bít của PSW..
- Ví dụ 8.6: Hãy viết chương trình để lưu thanh ghi tích luỹ vào R7 của băng 2..
- Lời giải: Cờ 0V là bít PSW.2 của thanh ghi PSW.
- PSW là thanh ghi có thể đánh địa chỉ theo bít, do vậy ta có thể sử dụng lệnh sau để kiểm tra cờ 0V:.
- 8.15 Vùng nhớ RAM có thể đánh địa chỉ theo bít..
- Trong 128 byte RAM trong của 8051 thì chỉ có 16 byte của nó là có thể đánh địa chỉ theo bít được.
- Các cùng RAM có thể đánh địa chỉ theo bít là 20H đến 2FH.
- Với 16 byte này của RAM có thể cung cấp khả năng đánh địa chỉ theo bít là 128 bít, vì .
- Chúng được đánh địa chỉ từ 0 đến 127.
- Do vậy, những địa chỉ bít từ 0 đến 7 dành cho byte đầu tiên, vị trí RAM trong 20H và các bít từ 8 đến OFH là địa chỉ bít của byte thứ hai của vị trí RAM trong 21H v.v.
- Byte cuối cùng của 2FH có địa chỉ bít từ 78H đến 7FH (xem hình 8.3).
- Lưu ý rằng các vị trí RAM trong 20H đến 2FH vừa có thể đánh địa chỉ theo byte vừa có thể đánh địa chỉ theo bít..
- Để ý từ hình 8.3 và 8.1 ta thấy rằng các địa chỉ bít 00 - 7FH thuộc về các địa chỉ byte của RAM từ 20 - 2FH và các địa chỉ bít từ 80 đến F7H thuộc các thanh ghi đặc biệt SFR, các cổng P0, P1, v.v....
- Ví dụ 8.8: Hãy kiểm tra xem các bít sau đây thuộc byte nào? Hãy cho địa chỉ của byte RAM ở dạng Hex..
- a) Địa chỉ bít 42H của RAM thuộc bít D2 của vị trí RAM 28H..
- b) Địa chỉ bít 67H của RAM thuộc bít D7 của vị trí RAM 20H..
- c) Địa chỉ bít 0FH của RAM thuộc bít D7 của vị trí RAM 21H..
- d) Địa chỉ bít 28H của RAM thuộc bít D0 của vị trí RAM 25H..
- e) Địa chỉ bít 12H của RAM thuộc bít D4 của vị trí RAM 21H..
- f) Địa chỉ bít 05H của RAM thuộc bít D5 của vị trí RAM 20H..
- Ví dụ 8.9: Trạng thái của các bít P1.2 và P1.3 của cổng vào/ra P1 phải được lưu cất trước khi chúng được thay đổi.
- Hãy viết chương trình để lưu trạng thái của P1.2 vào vị trí bít 06 và trạng thái P1.3 vào vị trí bít 07..
- CLR 06 ;Xoá địa chỉ bít 06 CLR 07 .
- Xoá địa chỉ bít 07.
- JNB P1.2, OVER ;Kiểm tra bít P1.2 nhảy về OVER nếu P1.2 = 0 SETB 06 .
- Nếu P1.2 thì thiết lập vị trí bít 06 = 0.
- OVER: JNB P1.3, NEXT ;Kiểm tra bít P1.3 nhảy về NEXT nếu nó = 0 SETB 07 ;Nếu P1.3 = 1thì thiết lập vị trí bít 07 = 1 NEXT:.
- Tất cả các cổng I/O của 8051 đều có khả năng đánh địa chỉ theo bít? (đúng sai) 2.
- Tất cả mọi thanh ghi của 8051 đều có khả năng đánh địa chỉ theo bít? (đúng.
- Tất cả các vị trí RAM của 8051 đều có khả năng đánh địa chỉ theo bít? (đúng sai).
- Hãy chỉ ra những thanh ghi nào sau đây có khả năng đánh địa chỉ theo bít:.
- Trong 128 byte RAM của 8051 những byte nào có khả năng đánh địa chỉ theo bít.
- Hãy tìm xem các bít dau thuộc những byte nào? Hãy cho địa chỉ của các byte RAM theo số Hex:.
- Các địa chỉ bít 00 - 7FH và 80 - F7H thuộc các vị trí nhớ nào?.
- Thanh ghi TCON có thể đánh địa chỉ theo bít (đúng sai) 8.2 Các phép toán một bít với cờ nhớ CY..
- Bảng 8.3: Các lệnh liên quan đến cờ nhớ CY.
- Ví dụ 8.10: Hãy viết một chương trình để lưu cất trạng thái của các bít P1.2 và P1.3 vào vị trí nhớ tương ứng trong RAM 6 và 7..
- Lưu trạng thái P1.2 vào CY..
- Lưu trạng thái P1.2 vào CY.
- Nếu nó nạp địa chỉ của lời nhắn..
- Nạp địa chỉ không có lời nhắn..
- ORL C, P2.2, C .
- Hãy trình bày cách làm thế nào để lưu trạng thái bít P2.7 vào vị trí bít 31 của RAM..
- Bảng 8.4: Các lệnh đọc một cổng vào..
- JNB P2.1, đích Nhảy tới đích nếu, chân P2.1 = 0 JB PX.Y, JB P1.3, đích Nhảy đích nếu, chân P1.3 = 1 MOV C, PX.Y MOV C, P2.4 Sao trạng thái chân P2.4 vào CY.
- Dữ liệu này được AND với nội dung của thanh ghi A..
- Bảng 8.5: Các lệnh đọc một chốt (Đọc-sửa-ghi)..
- JBC PX.Y, đích JBC P1.1, đích.
- MOV PX.Y, C MOV P1.2, C.
- Các phép toán một bít này cho phép lập trình viên thiết lập, xoá, di chuyển và bù các bít riêng rẽ của các cổng, bộ nhớ hoặc các thanh ghi..
- Các cổng vào/ ra nào và các thanh ghi nào có thể đánh địa chỉ theo bít..
- Hãy giết chương trình tạo xung vuông với độ đầy xung 75%, 80% trên các chân P1.5 và P2.7 tương ứng..
- Viết chương trình hiển thị P1.4 nếu nó có giá trị cao thì chương trình tạo ra một âm thanh (sóng dung vuông 50% độ đầy xung) trên chân P2.7..
- Nhưng địa chỉ bít nào được gán cho các cổng P0, P1, P2 và P3 cho các thanh ghi PCON, A, B và PSW..
- Những địa chỉ bít dưới đây thuộc về cổng hay thanh ghi nào?.
- Hãy viết chương trình lưu các thanh ghi A, B vào R3 và R5 băng nhớ 2 tương ứng..
- Hãy tìm địa chỉ bít của các cờ này..
- Các cùng nhớ 128 byte của RAM thì những vùng nào là đánh địa chỉ theo bít được? Hãy đánh dấu chúng..
- Các địa chỉ sau thuộc vùng RAM nào?.
- Các địa chỉ nhỏ hơn 80H được gán cho địa chỉ 20-2FH của RAM phải không?.
- Viết chương trình kiểm tra D7 của thanh ghi A

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt