Bài giảng Vi điều khiển: Chapter 4 - Ngô Như Khoa
lượt xem 12
download
Trong chương này sẽ đề cập đến lập trình 8051 số học và lôgic. Các nội dung chính trong chương này gồm có: Số học các số có dấu và số không dấu, các số nhị phân và mã BCD, các lệnh cộng, phép trừ, phép nhân, phép chia, các phép toán Logic,... Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Vi điều khiển: Chapter 4 - Ngô Như Khoa
- LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC Microcontroller Chapter 4 Ngo Nhu Khoa Department of Computer Engineering DCE ThaiNguyen University of Technology
- Các chủ đề z Số học các số có dấu và số không dấu z Các số nhị phân và mã BCD z Các lệnh cộng z Phép trừ z Phép nhân z Phép chia z Các phép toán Logic z Các phép Quay và hoán đổi z Bộ nhớ địa chỉ hoá Bit và các lệnh trên bit đơn 10/1/2005 2 DCE
- 1. Phép cộng không dấu z Cú pháp add a, source ; A = A + source – Giá trị nhớ (nếu có) sẽ đặt trong cờ CY mov A, #0F5H add A, #0BH ; A = F5 + B0 = 00, CY=1 z Phép cộng các số 16 bit addc A, source ; A = A + source + CY – Cộng 2 byte thấp bằng lệnh add – Lưu lại kết quả – Cộng 2 byte cao bằng lệnh addc 10/1/2005 3 DCE
- 1. Phép cộng không dấu ... z Ví dụ phép cộng các số 16 bit Cộng UUVV và PPQQ clr C mov A, QQ add A, VV mov r6, A mov A, PP addc A, UU mov r7, A Kết quả là số 16 bit đặt trong các thanh ghi R7:R6 và CY 10/1/2005 4 DCE
- 2. Cộng các số BCD z BCD – Binary Coded Decimal – 4 bits được sử dụng để mô tả 1 số hệ 10 từ 0-9 z Gói BCD chứa 2 số BCD trong 1 Byte – 17 PBCD = 17decimal = 11hex z Phép cộng gói BCD có thể không là 1 số BCD hợp lệ. Do đó người ta phải sử dụng lệnh hiệu chỉnh thập phân (da A) để sửa lại z Sau phép cộng 2 gói BCD, gọi da để nhận được PBCD đúng mov A, #47H ; first BCD = 47d mov B, #25H ; second BCD = 25d add A,B ; A = 6CH (binary addition of 47H and 25H) da A ; A = 72H (BCD result of addition) 10/1/2005 5 DCE
- 2. Cộng các số BCD ... z Để hiệu chỉnh 1 số BCD không hợp lệ, cộng 6 với chữ số mà lớn hơn 9 z Cơ chế thực hiện của lệnh da – Nếu nibble thấp > 9 hay AC=1 thì cộng 6 (0110) với nibble thấp – Nếu nibble cao > 9 hay CY=1 thì cộng 6 với nibble cao z Chú ý: da chỉ có hiệu lực đối với lệnh ADD. Với các lệnh khác (inc, sub, ...), thì sự hiệu chỉnh này phải được thực hiện bằng tay. 10/1/2005 6 DCE
- 3. Phép trừ không dấu z Cú pháp: subb x, y ; x = x-y with borrow from CY z Thực hiện: – Lấy số bù 2 của số trừ (y) – Cộng nó với số bị trừ (x) – Đảo bit cờ nhớ z Nếu cờ CY được lập sau phép trừ, thì kết quả là số âm với giá trị tuyệt đối là số bù 2 của kết quả z Chú ý: – Lệnh subb thực hiện trừ có nhớ, nếu CY được lập trước khi gọi lệnh. đặc điểm này được sử dụng cho phép trừ các số 16bit – Để nhận được thông thường, phải xoá cờ CY trước khi gọi lệnh subb 10/1/2005 7 DCE
- 3. Phép trừ không dấu ... z Ví dụ clr c ; xoá cờ CY cho phép trừ mov A, #4CH ; subb A, #6EH ; hai toán hạng, thực hiện: 4C – 6E jnc done ; nếu CY= 0 kết qủa là số dương cpl A ; CY=1, kết quả là số âm $ đảo bit giá trị chứa trong A inc A ; và cộng thêm 1 done: mov R1, A ; kết quả cuối cùng đặt trong R1 z Trừ 2 số 16 bit: 2762H – 1296H clr C ; xóa CY mov A, #62H ; subb A, #96H ; 62H – 96H = CCH và CY=1 mov R7, A ; lưu byte thấp của kết quả vào R7 mov A, #27H ; trừ các byte cao subb A, #12H ; 27H – 12H - 1 = 14H mov R6, A ; lưu byte cao KQ vào R6; 16 bit KQ đặt trong R6:R7 10/1/2005 8 DCE
- 4. Phép nhân và phép chia z MUL AB ; A x B, kết quả đặt trong BA mov A, #25H ; operand1: 25H mov B, #65H ; operand2: 65H mul AB ; 25H * 65H = E99H ; B = 0EH, A = 99H z DIV AB ; A/B, đặt thương trong A số dư trong B mov A, #95H mov B, #10 div AB ; A = 9 (thương - quotient), B = 5 (dư - remainder) 10/1/2005 9 DCE
- 5.1. Các số có dấu – Khái niệm z Biểu diễn dấu – Chỉ dùng 1 bit trong số tất cả các bit biểu diễn cho các số – Thường là MSB (most significant bit) được gán làm bít dấu – Các bit còn lại biểu diễn độ lớn của số - magnitude z 8051 chỉ có các thanh ghi 8-bit – Chỉ có thể dùng 7 bit để biểu diễn độ lớn các số có dấu – Các số dương trong 8051 = 0 đến +127 (7 bits) – Các số âm: từ -128 đến –1 10/1/2005 10 DCE
- 5.2. Các số có dấu – Số âm z Biểu diễn số âm trong số học các số có dấu như sau: – Bit dấu (MSB) được lập là 1 – Độ lớn là 1 dạng của số bù 2 z Các ví dụ Khoảng -128 = 80H Biểu diễn: –5 Biểu diễn: –34H Biểu diễn: –128 -127 = 81H 5 = 0000 0101 34H = 0011 0100 128 = 1000 0000 ….. Cpl = 1111 1010 Cpl = 1100 1011 Cpl = 0111 1111 -1 = FFH +1 = 1111 1011 +1 = 1100 1100 +1 = 1000 0000 0 = 00H Hex = FBH Hex = CCH Hex = 80H 1 = 01H Vậy: –5 = FBh Vậy: –34H = CCH Vậy: –128 = 80H +127 = 7FH 10/1/2005 11 DCE
- 5.3. Các số có dấu – Sử dụng z Các ứng dụng trong thực tế có thể yêu cầu 1 giá trị xác định được biểu diễn như 1 số có dấu – Đo nhiệt độ:–20deg, +10deg vv – Đo mức Nước/Gas/Beer trong bể chứa z Dữ liệu được thu nhận và lưu trữ như là 1 mảng các số có dấu – Một số phần tử trong mảng có thể là âm, trong khi các phần tử khác lại là số dương – Việc nhận diện số âm nhờ MSB. Nếu MSB=1, số đó là âm z Cùng các phép toán (add, sub, mul, div vv) có thể cần thiết được thực hiện trên các phần tử của mảng và kết quả cũng có thể là số dương hoặc âm. 10/1/2005 12 DCE
- 6. 8051 – Số học các số có dấu z 8051 sử dụng sự biểu diễn số âm trong lệnh trừ (subb). Tuy nhiên, như thế chưa đủ! z Khi các số có dấu được sử dụng, thì người lập trình phải quan tâm đến số học các số có dấu. z Sự tràn số phải được đề cập đến. Cờ nhớ là chưa đủ, vì chỉ có 7 bit để biểu diễn giá trị của các số có dấu. z Do đó, 8051 còn cung cấp 1 cờ khác, đó là cờ tràn – OV cho mục đích này. 10/1/2005 13 DCE
- 6. 8051 – Số học các số có dấu ... z Phép cộng A+B A = 01H, B = FFH A+B A = FEH, B = FFH A = +1, B = -1 A = -2, B = -1 A = 0000 0001 A = 1111 1110 B = 1111 1111 B = 1111 1111 + = 1 0000 0000 + = 1 1111 1101 A+B = 0H A+B = FDH = -3 z Phép trừ A-B; A = 01H, B = FFH A-B; A = FEH, B = 01H A = +1, B = -1 A = -2, B = +1 2’s(B) = 0000 0000 +1 = 0000 0001 2’s(B) = 1111 1110 +1 = 1111 1111 A = 0000 0001 A = 1111 1110 2’s(B) = 0000 0001 2’s(B) = 1111 1111 + = 0 0000 0010 + = 1 1111 1101 A-B = 02H A-B = FDH = -3 10/1/2005 14 DCE
- 6. 8051 – Số học các số có dấu … z Sự tràn có thể xảy ra do độ lớn của các số có dấu, mà nó có thể làm thay đổi bit dấu. z Cờ OV được kiểm tra để xác định lỗi xảy ra trong số học các số có dấu. z Ví dụ A+B, A=+96 (60H), B=+70(46H) A = 0110 0000 B = 0100 0110 + = 1010 0110 = A6H = -90 (wrong) OV = 1, CY=0 96+70 = 166 > +127 10/1/2005 15 DCE
- 6. 8051 – Cờ tràn z Sau các phép toán số học, OV được lập nếu: – Nhớ từ D6 sang D7, nhưng không nhớ từ D7 – Nhớ từ D7 nhưng không nhớ từ D6 sang D7 – Các trường hợp trên chỉ thỉ 1 kết quả sai trong khi 8051 thực hiện các phép toán với số có có dấu. z Sau một lệnh số học liên quan đến các số có dấu, kiểm tra cờ OV, để xác định lỗi – Sử dụng lệnh jb PSW.2 hay jnb PSW.2 – PSW.2 = OV 10/1/2005 16 DCE
- 7. 8051 Các lệnh logic z AND – anl dest, source ; dest = dest AND source – Thường sử dụng làm mặt nạ để che đi(set to 0) 1 vài bit trong 1 toán hạng z OR – orl dest, source ; dest = dest OR source – Commonly used to set a few bits in an operand z XOR – xrl dest, source ; dest = dest XOR source – Commonly used to clear a register, check if two registers have the same value and toggle a few bits z Complement – cpl A ; A = A’ z None of these instructions affect any flags 10/1/2005 17 DCE
- 8. 8051 – Lệnh so sánh z CJNE – Cjne dest, source, rel address – So sánh đích (dest) với nguồn (source), và nhảy đến địa chỉ quan hệ (relative address) nếu không bằng nhau – Về cơ bản, 1 phép trừ mà không làm thay đổi các toán hạng, nhưng lại tác động đến cờ CY: – dest > source CY=0 Cmp: cjne R5, #80, NEQ – dest < source CY=1 EQ: …. ;R5= #80 NEQ: jnc GREAT LESS: … ;R5< #80 z Ví dụ GREAT: …. ;R5 > #80 – Kiểm soát liên tục P1 Loop: mov A, P1 – và chỉ thoát, nếu:P1=63H cjne A, #63, loop 10/1/2005 18 DCE
- 9. 8051 – Hoán đổi và Quay z Thao tác quay Bitwise được yêu cầu trong nhiều ứng dụng, như truyền thông nối tiếp, điều khiển, .... z Quay phải Example for RR Example for RL – rr A ; rotate right A mov A, #AAH mov A, #55H z Quay trái rr A ; now A = 55H rl A ; now A = AAH – rl A ; rotate left A rr A ; now A = 2AH rl A ; now A = 54H z Quay phải/trái có nhớ – Sử dụng CY trong phép quay (9 bit rotate) theo thứ tự sau: – rlc A ; D7 CY D0 – rrc A ; D0 CY D7 z Hoán đổi các nibble – swap A ; Hoán đổi D7-D4 với D3-D0 10/1/2005 19 DCE
- 10. 8051 – Các lệnh Bit đơn z Lập bit – set bit_name ;bit = 1 z Xoá bit – clr bit_name ;bit = 0 z Đảo bit – cpl bit_name ;bit = bit’ z Lệnh nhảy có điều kiện trên giá trị của bit – jb (jump if bit=1) – jnb (jump if bit=0) – jbc (jump if bit=1 and clear the bit) 10/1/2005 20 DCE
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Vi điều khiển: Chapter 3 - Ngô Như Khoa
21 p | 111 | 18
-
Bài giảng Vi điều khiển: Chapter 1 - Ngô Như Khoa
26 p | 112 | 16
-
Bài giảng Vi điều khiển: Chapter 2 - Ngô Như Khoa
23 p | 94 | 15
-
Bài giảng Vi điều khiển: Chapter 7 - Ngô Như Khoa
24 p | 122 | 14
-
Bài giảng Vi điều khiển: Chapter 5 - Ngô Như Khoa
25 p | 85 | 13
-
Bài giảng vi điều khiển - Bài số 5
49 p | 77 | 12
-
Bài giảng Vi điều khiển: Chapter 6 - Ngô Như Khoa
17 p | 91 | 9
-
Bài giảng Vi điều khiển: Chapter 8 - Ngô Như Khoa
19 p | 67 | 8
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn