LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · Do đó người ta phải sử...

23
DCE LP TRÌNH 8051 SHC VÀ LÔ GIC Microcontroller Chapter 4 Ngo Nhu Khoa Department of Computer Engineering ThaiNguyen University of Technology

Transcript of LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · Do đó người ta phải sử...

Page 1: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

DCE

LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC

MicrocontrollerChapter 4

Ngo Nhu Khoa

Department of Computer Engineering

ThaiNguyen University of Technology

Page 2: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 2 DCE

Các chủ đềSố học các số có dấu và số không dấuCác số nhị phân và mã BCDCác lệnh cộngPhép trừPhép nhânPhép chiaCác phép toán LogicCác phép Quay và hoán đổiBộ nhớ địa chỉ hoá Bit và các lệnh trên bit đơn

Page 3: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 3 DCE

1. Phép cộng không dấuCú pháp

add a, source ; A = A + source– Giá trị nhớ (nếu có) sẽ đặt trong cờ CY

mov A, #0F5Hadd A, #0BH ; A = F5 + B0 = 00, CY=1

Phép cộng các số 16 bitaddc 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

Page 4: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 4 DCE

1. Phép cộng không dấu ...Ví dụ phép cộng các số 16 bitCộng UUVV và PPQQ

clr Cmov A, QQadd A, VVmov r6, Amov A, PPaddc A, UUmov r7, A

Kết quả là số 16 bit đặt trong các thanh ghi R7:R6 và CY

Page 5: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 5 DCE

2. Cộng các số BCDBCD – Binary Coded Decimal

– 4 bits được sử dụng để mô tả 1 số hệ 10 từ 0-9Gói BCD chứa 2 số BCD trong 1 Byte

– 17 PBCD = 17decimal = 11hexPhé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ạiSau phép cộng 2 gói BCD, gọi da để nhận được PBCD đúng

mov A, #47H ; first BCD = 47dmov B, #25H ; second BCD = 25dadd A,B ; A = 6CH (binary addition of 47H and 25H)da A ; A = 72H (BCD result of addition)

Page 6: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 6 DCE

2. Cộng các số BCD ...Để hiệu chỉnh 1 số BCD không hợp lệ, cộng 6 với chữ số mà lớn hơn 9Cơ 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

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.

Page 7: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 7 DCE

3. Phép trừ không dấuCú pháp:subb x, y ; x = x-y with borrow from CY

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ớ

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ả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

Page 8: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 8 DCE

3. Phép trừ không dấu ...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 – 6Ejnc done ; nếu CY= 0 kết qủa là số dươngcpl A ; CY=1, kết quả là số âm đảo bit giá trị chứa trong Ainc A ; và cộng thêm 1done: mov R1, A ; kết quả cuối cùng đặt trong R1

Trừ 2 số 16 bit: 2762H – 1296Hclr C ; xóa CYmov A, #62H ;subb A, #96H ; 62H – 96H = CCH và CY=1mov R7, A ; lưu byte thấp của kết quả vào R7mov A, #27H ; trừ các byte caosubb A, #12H ; 27H – 12H - 1 = 14Hmov R6, A ; lưu byte cao KQ vào R6; 16 bit KQ đặt trong R6:R7

Page 9: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 9 DCE

4. Phép nhân và phép chia

MUL AB ; A x B, kết quả đặt trong BAmov A, #25H ; operand1: 25H

mov B, #65H ; operand2: 65H

mul AB ; 25H * 65H = E99H ; B = 0EH, A = 99H

DIV AB ; A/B, đặt thương trong A số dư trong Bmov A, #95H

mov B, #10

div AB ; A = 9 (thương - quotient), B = 5 (dư - remainder)

Page 10: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 10 DCE

5.1. Các số có dấu – Khái niệmBiể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

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

Page 11: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 11 DCE

5.2. Các số có dấu – Số âmBiể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ù 2Các ví dụ

Biểu diễn: –5

5 = 0000 0101

Cpl = 1111 1010

+1 = 1111 1011

Hex = FBH

Vậy: –5 = FBh

Biểu diễn: –34H

34H = 0011 0100

Cpl = 1100 1011

+1 = 1100 1100

Hex = CCH

Vậy: –34H = CCH

Biểu diễn: –128

128 = 1000 0000

Cpl = 0111 1111

+1 = 1000 0000

Hex = 80H

Vậy: –128 = 80H

Khoảng

-128 = 80H

-127 = 81H

…..

-1 = FFH

0 = 00H

1 = 01H

+127 = 7FH

Page 12: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 12 DCE

5.3. Các số có dấu – Sử dụngCá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

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

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.

Page 13: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 13 DCE

6. 8051 – Số học các số có dấu8051 sử dụng sự biểu diễn số âm trong lệnh trừ (subb). Tuy nhiên, như thế chưa đủ!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.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.Do đó, 8051 còn cung cấp 1 cờ khác, đó là cờ tràn –OV cho mục đích này.

Page 14: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 14 DCE

6. 8051 – Số học các số có dấu ...Phép cộng A+B A = 01H, B = FFH

A = +1, B = -1A = 0000 0001B = 1111 1111+ = 1 0000 0000A+B = 0H

A+B A = FEH, B = FFHA = -2, B = -1A = 1111 1110B = 1111 1111+ = 1 1111 1101A+B = FDH = -3

A-B; A = FEH, B = 01HA = -2, B = +12’s(B) = 1111 1110 +1 = 1111 1111A = 1111 11102’s(B) = 1111 1111+ = 1 1111 1101A-B = FDH = -3

A-B; A = 01H, B = FFHA = +1, B = -12’s(B) = 0000 0000 +1 = 0000 0001A = 0000 00012’s(B) = 0000 0001+ = 0 0000 0010A-B = 02H

Phép trừ

Page 15: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 15 DCE

6. 8051 – Số học các số có dấu …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.Cờ OV được kiểm tra để xác định lỗi xảy ra trong số học các số có dấu. 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

Page 16: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 16 DCE

6. 8051 – Cờ trànSau 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.

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

Page 17: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 17 DCE

7. 8051 Các lệnh logicAND

– 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ạngOR– orl dest, source ; dest = dest OR source– Commonly used to set a few bits in an operandXOR– 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 bitsComplement– cpl A ; A = A’None of these instructions affect any flags

Page 18: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 18 DCE

8. 8051 – Lệnh so sánhCJNE

– 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– dest < source CY=1

Ví dụ– Kiểm soát liên tục P1 – và chỉ thoát, nếu:P1=63H

Cmp: cjne R5, #80, NEQEQ: …. ;R5= #80NEQ: jnc GREATLESS: … ;R5< #80GREAT: …. ;R5 > #80

Loop: mov A, P1

cjne A, #63, loop

Page 19: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 19 DCE

9. 8051 – Hoán đổi và QuayThao 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, ....Quay phải

– rr A ; rotate right A

Quay trái– rl A ; rotate left A

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

Hoán đổi các nibble– swap A ; Hoán đổi D7-D4 với D3-D0

Example for RR

mov A, #AAH

rr A ; now A = 55H

rr A ; now A = 2AH

Example for RL

mov A, #55H

rl A ; now A = AAH

rl A ; now A = 54H

Page 20: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 20 DCE

10. 8051 – Các lệnh Bit đơnLập bit

– set bit_name ;bit = 1

Xoá bit– clr bit_name ;bit = 0

Đảo bit– cpl bit_name ;bit = bit’

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)

Page 21: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 21 DCE

11. Bit addressable Regs and MemoryCác cổng I/O (P0 – P3), B, PSW, IP, IE, ACC, SCON và TCON là các thah ghi cókhả năng địa chỉ hoá theo Bit (BARs)Các bit của BARs có thể được tham chiếu đến theo cú pháp Register.bitnum (P0.1, PSW.2, IE.4 vv) hay bởi địa chỉ của chúngĐịa chỉ Bit là địa chỉ cơ sở của thanh ghi + số thứ tự Bit

– ACC địa chỉ cơ sở là E0H, do đó ACC.1=E1H, ACC.7=E7H– P0, địa chỉ cơ sở là 80H, do đó P0.0=80H, P0.5=84H ...

16 bytes của bộ nhớ RAM nội cũng được địa chỉ hoá Bit– 20H đến 2FH có 1 địa chỉ bit từ 00H đến 7FH– clr 67H ; xoá D7H của RAM tại vị trí 2CH– setb 05H ; lập bit 5 của RAM, tại vị trí 20H

Page 22: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 22 DCE

12. Các lệnh đơn bit với cờ nhớ CY8051 có các lệnh đặc biệt để thao tác trực tiếp với cờ nhớ CY

– setb C; clr C; cpl C; mov b,C; mov C,b; jnc, jc, anl C,b; anl C,/b; orl C,b; orl C,/b

– anl C, /b ;C = CY AND b’

Ví dụ: Bật quạt (P2.2) và ngắt đèn (P2.3)

Fan_on: setb C

orl C,P2.2 ;CY = CY OR P2.2

mov P2.2, C ; bật quạt nếu nó chưa thực sự bật

Light_off: clr C

anl C,P2.3 ;CY = CY AND P2.3

mov P2.3,C ; tắt đèn, nếu nó chưa thực sự tắt

Page 23: LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC - tnu.edu.vn and... · 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Để hiệu

10/1/2005 23 DCE

Chương 4: Ôn tậpSố học các số có dấu và không dấuCác số nhị phân và mã BCDPhép cộng, trừ, nhân và chiaSố học và biểu diễn số có dấuCác phép toán LogicCác lệnh quay và hoán đổiVùng nhớ địa chỉ hoá Bit và các lệnh tác động đơn bit