Các chủ đê Phép tính số học có dau và không dâu Số nhị phân và mã BCD Lệnh cộng Lệnh trừ... Lệnh da chỉ thực hiện với lệnh cộng ADD.. Với các lệnh khác Inc, sub vv..., thì việc làm chí
Trang 1Lập trình cho 8051: S6 hoc va
logic
Bai 4
Bo mon TD Khoa KTDK
Trang 2Các chủ đê
Phép tính số học có dau và không dâu
Số nhị phân và mã BCD
Lệnh cộng Lệnh trừ
Trang 3Phép cộng không dâu
Add A, source ; A=A+source
Có nhớ thì bit nhớ được lưu vào cờ CY mov A, #0F5H
Phép cộng số 16 bít
— Addc A, source ; A=A+source+CY
— Cộng các byte thấp sử dụng lệnh add
— Ghi kêt quả
— cộng các byte cao hơn sử dụng addc
Trang 4
Phép cộng không dâu
°- Ví dụ về phép cộng l6 Bít
¢ Cong UUVV va PPQQ
clr C mov A, QQ add A, VV mov r6, A mov A, PP addc A, UU movr/,A
° _ Kết quả 16 bít cuỗi cụng trong r7:r6 và cờ CY
Trang 5
Phep cong BCD BCD - sé thap phân được mã hoá bởi số nhị phân
—_ 4 bIt được sử dụng đê biêu diên sô thập phân từ 0-9
Hai sô trong mã BCD được biểu diễn trong 1 byte
— 17PBCD=17D=11H
Phép cộng sô BCD có thê không tạo ra sỐ BCD hợp lệ Do vậy
phải dùng lệnh chuân hoá sô BC) (da A) đê làm chính xác nó
Sau khi cộng 2 số BCD gọi lệnh da để chuẩn hoá số PBCD
mov A, #47H : số BCD đâu tiên = 47d mov B, #25H : số BCD thứ hai = 25d add A, B : A=óCh (kết quả cộng nhị phân của 47H
và 25H)
Trang 6
- Nếu phân cao lớn hơn 9 hoặc CY=I] thì cộng 6 vào phân cao
°Ò Lệnh da chỉ thực hiện với lệnh cộng ADD Với các lệnh khác (Inc, sub vv ), thì việc làm chính xác nó
được thực hiện thủ công (băng tay)
Trang 7
— Nếu cờ CY được thiết lập sau khi thực hiện phép trừ, thì kết
quả là một sô âm và đưa ra kêt quả là sô bù hai
‹_ lệnh subb thực hiện trừ có mượn nêu CY được thiết lập trước lệnh call Được sử dụng đề thực hiện phép
trừ sô 16 bit
— Đề thực hiện phép trừ đơn giản, xoá CY trước khi gọi lệnh
subb
ii)
Trang 8inc A ; by complementing A and adding 1 to it
done: mov R1,A ‘ final result in R14
¢ Tru 16 bit 2762H-1296H
clr C ; clear Cy mov A, #62H subb A, #96H ; 62H — 96H — CCH and CY-1 mov R7,A ; store the lower byte of the result in R7 mov A, #27H ; now subtract the upper bytes
subb A, #12H 2/H—12H—- 1= 14H mov R6, A ; store upper byte of result in R6
‘ Final 16bit result is in R6:R7
Trang 9
Phép nhân và phép chia
© MUL AB; AxB, dat két qua vao BA
mov A, #25H ; operand1: 25H mov B, #65H ; operand2: 65H mul AB ; 20H * 65H = E99H
;B =0EH, A = 99H
© DIV AB; A/B, Thương số đặt vào A và số dư chứa trong B
mov A, #95H mov B, #10
div AB ; A =9 (quotient), B=5 remance am
Trang 10
Phép tính SỐ học có dâu - Nội dung
°® GIỚI thiệu vê sô có dâu
- Sử dụng một bit làm bit dâu
— Bit cao nhất MSB được gán cho bit dau
— Cac bit con lai biéu dién gia tri
¢ 8051 chi co cac thanh ghi 8 bit
—~Cac s6 có dâu có thể chỉ có 7 bít giá trị
- Các sô dương trong 8051 = 0 tới +127 (7 bit)
—- Các sô âm từ -12§ đến -I
Trang 11
¢ Cac vi du
Phép tính sô học có dâu — Các s
°Ò Biêu diện sô âm với sô có dâu
— Bit dau (bit cao nhat) là 1
— Gia tri biéu dién dudi dang số bù 2
y IAN
Represent —5
5 =00000101 Cpl = 1111 1010
Cpl = 1100 1011 +1 =11001100
Hex = CCH Hence -34H = CCH
Represent -128
128 = 1000 0000 Cpl=0111 1111 +1 =1000 0000
Hex = 80H Hence -128 = 80H
Range
-128 = 80H -127 =81H
-1 =FFH
0 = 00H
1 = 01H +127 =7FH
Trang 12Các sô có dâu — Cách dùng
° Dữ liệu đựoc tạp trung và lưu lại như một
mang của các sô có dâu
— Một sô phân tử trong mang co thể là âm, còn các phân tử khác có thể la duong
— Việc xác định các SỐ dương thông qua MSB Nếu MSB = 1, số đó là số âm
« Giống như các phép toán số học (ađ, sub, mul, div .) có thể cân phải thực hiện trên các phan tir mang, va kết quả có thể là âm hoặc dương
Trang 13
Phép tính sô học có dâu
8051 biểu diễn sô âm trong lệnh sub Nhưng
không đủ Khi cân sử dụng các số CO dau, người lập trình phải sử dụng phép tính sô học có dâu
Hiện tượng tràn phải được xử lý Cờ nhớlà | khong du boi vi chi co 7 bit mang giá trỊ của so
co dau
8051 dua ra mot co khac — OV (co tran) cho
muc dich nay
Trang 14
¢ Phép cộng
A+B A=0]1H B=FFH A=~+iB=-l
A= 0000 0001 B= 11111111 += 10000 0000 A+B =0H
~=11i1111101 A-B =FDH =-3
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 = 00000001 A = 11111110 2's)= 00000001 2's(B)= 11111111 + =000000010 + =111111101 A-B=02H A-B =FDH = -3
—— ———————— 8u
Trang 15
Hiện tượng tràn
¢ Cờ tràn có thêxuât * Ví dụ
hiện từ các gia trị AB A=6/0E ĐeUVAGB
của các sô CO dau,
A=0110 0000
co nay co thé thay đôi bit dâu B=0100 0110
N trà + +=1010 0110 = AGH =-90
¢ Co tran dugc kiém (wrong)
tra dé phat hién 161 | OY"
Trang 16Co OV
¢ Sau khi thuc hién cac phép tinh s6 hoc, OV duoc thiét
lap néu:
— Có nhớ từ Dó sang D7 nhưng không nhớ từ D7
— Nhớ từ Dó nhưng không nhớ từ D6 sang D7
— Trong các trường hợp trên chỉ thị một kết quả sai trong phép
tính
° _ Sau khi thực hiện phép tính số học với các số có dâu,
kiểm tra cờ OV đề xác định lỗi
— Sử dụng lệnh Jb PSW.2 hoặc Jnb PSW.2
— PSW.2=OV
Trang 17
AND Cac lénh logic
— Anl dest, source; dest=dest AND source
— Thường được sử dụng để che đi (đặt =0) một số bit trong toán hạng
OR
— Orl dest, source ; dest=dest OR source
— Thuong duoc st dung dé thiét lap mot sé bit trong toan hang
XOR
— Xrl dest, source ; dest=dest XOR source
— Thường được sử dụng để xoá một thanh ghi, kiểm tra nếu hai thanh ghi có giá trị giông nhau và đảo một số bit
Bu
— CplA > A=A’
Các lệnh trên không ảnh hưởng đến bất cứ cờ nào
Trang 18
— Cjle dest, source, dia chi
— So sanh dich va nguon và nhây tới địa chỉ chi ra nêu không
mà không thay dồi các toán hạng |“° ¬ lia nhung anh hưởng đến cờ CY NEQ: mcGREAIT
— dest < source => CY=1 GREATS RO > #80
Vi du
— Giam sát P] liên tp | Loop: mov A, Pl
va thoat néu P1=63 cjne A #63 loop
Trang 19
— RrA ; quay A sang phai rA ‘now A = 55H
— RIA ; quay A sang trai
Quay sang phai/trai với cờ nhớ ; Example for RL
— Dung CY trong so quay (quay 9 bit)
Trang 20Các lệnh đơn bit
Thiết lập một bít
— Set bit name ; bit=1
Xoa mot bit
— Clr bit name ; bit=0
Lay bu mot bit
— Cpl bit name ; bit=bit’
Nhay có điêu kiện dựa trên giá trị của một bit
= Jb (nhảy nêu bit =1), jnb (nhảy nêu bit = 0), jbc
(nhảy nêu bit =1 va xoa bit do)
Trang 21
Các thanh ghi và bộ nhớ có thể địa
chỉ hoá bít (BAR)
Các công I/O (P0-P3), B, PSW, IP, IE, ACC, SCON và TCON
là các thanh ghi có thể địa chỉ hoá bit Các bit của các BAR có thể xem như số thứ tự bit của thanh ghi
(P0.1, PSW.2, IE.4 ) hoặc bởi chính địa chỉ bit cua chung
Đại chỉ bít là địa chỉ cơ sở của thanh ghi + số thứ tự bit
— Đại chỉ cơ sở của ACC là E0H, do đó AŒC.I = E1H, ACC.7=E7H
—_ P0 có địa chỉ cơ sở là 80H, do đó P0.0=80H, P0.5=§4H và sứ tiếp tục
xác định như vậy
16 byte của Ram trong là bit có thể địa chỉ hoá
— 20H tới 2FH có địa chỉ bit từ 00H tới 7FH
— Clró7h ; xoá bit 7ở vị trí 2CH trên RAM
— Setb 05H ; thiết lập bit 5 ở vị trí 20H trên RAM
Trang 22
Cac thao tac don bit vo1 co CY
© 8051 có các lệnh đặc biệt để can thiệp trực tiếp tỚI CỜ
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’
¢ Vi du Bat quat (P2.2) va tat dén (P2.3)
Fan_on: setb C
oriC.P22 :;CY =CY OR P2.2
mov P2.2 C :turm on fan if not already ON
Light off clrC
anlC P23 -CY =CY AND P23
mov P2.3.C :turm off light if not already OFF