Tải bản đầy đủ (.pdf) (8 trang)

Tài liệu Ứng dụng KIT 8051 dùng để chuyển đổi A/D-D/A, chương 7 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (88.4 KB, 8 trang )

Chương 7:
CÁC THANH GHI CÓ CHỨC NĂNG ĐẶC BIỆT
Hầu hết các thanh ghi nội của các vi điều khiển đều
có thể được truy xuất thông qua tên đã được đònh nghóa. Ví dụ
INC A.
Các thanh ghi nội của 8051 chiếm một phần của vùng
nhớ nội, vì vậy mỗi thanh ghi đều có một đòa chỉ. Các thanh ghi
chức năng (FSRs) nằm trong vùng nhớ cao từ 80H đến FFH. Lưu
ý có một số bytes trong vùng này không được đònh nghóa. Chỉ có
21 đòa chỉ thanh ghi chức năng được đònh nghóa (26 đòa chỉ đối
với 8052/8032).
Mặc dù có thể truy xuất các thanh ghi chức năng
thông qua tên của nó, hầu hết các thanh ghi này được truy xuất
bằng đòa chỉ trực tiếp. Một số thanh ghi có thể truy xuất bằng
byte hoặc bit. Trong lập trình phải cẩn thận khi truy xuất bit
thông qua byte. Ví dụ lệnh sau:
SETB 0E0H ;
Set bit 0 trong thanh ghi ACC, các bit khác vẫn không
thay đổi. Lưu ý đòa chỉ của một bit trong một thanh ghi chức
năng luôn được xác đònh bởi 5 bit cao của đòa chỉ thanh ghi đó.
Ví dụ một bit trong thanh ghi P1 (90H hay 10010000B) hay có
đòa chỉ 9xH hay 10010xxxB.
Thanh ghi trạng thái chương trình (PSW) sẽ được mô
tả chi tiết trong phần sau, các thanh ghi chức năng còn lại được
mô tả ngắn gọn và sẽ được mô tả chi tiết trong những chương
sau.
Thanh ghi trạng thái chương trình:
Thanh ghi trạng thái chương trình có đòa chỉ 0Dh,
chứa các bit trạng thái chương trình.
Các bit trạng thái được mô tả như sau:
* Cờ Carry:


Cờ carry có hai chức năng:
+ Được dùng trong các phép toán số học thông
thường. Nó là cờ nhớ của phép tính cộng và cờ mượn của phép
tính trừ. Ví dụ các thanh ghi ACC có nội dugn FFH thì lệnh
“ADD A, #1” làm cho ACC bằng 00H và cờ nhớ được set.
+ Cờ carry còn được dùng như “thanh ghi tích luỹ 1
bit” cho các phép toán luận lý trên bit. Ví dụ lệnh sau AND bit
25H với cờ carry và đặc kết quả vào cờ carry: “ANL C,25H
;”.
* Cờ nhớ phụ (auxiliary carry – AC) :
Khi cộng các giá trò BCD, cờ AC được set nếu bit thứ
ba tràn hay 4 bit thấp có giá trò từ 0AH đến 0FH. Khi cộng số
BCD, sau phép cộng phải dùng lệnh DA A (decimal adjust
accumulator) để chỉnh kết quả cộng về dạng BCD.
* Cờ 0:
Cờ này dành cho người sử dụng trong các ứng dụng
lập trình.
* Bit chọn ngăn thanh ghi:
Hai bit RS0 và RS1 dùng để cho ngăn thanh ghi,
chúng được xóa khi reset hệ thống và có thể thay đổi bằng phần
mềm. Ví dụ các lệnh sau sẽ chọn nhăn thanh ghi thứ ba và ghi
nội dung R7 (đòa chỉ 1FH) vào ACC.
SETB RS0 ;
SETB RS1 ;
MOV A, R7 ;
* Cờ tràn (Overflow – OV):
Cờ tràn được set kết quả bò tràn (số học) sau phép
tính cộng hoặc trừ. Đối với phép toán cộng và trừ số có dấu,
phần mềm có thể xét bit này để kiểm tra kết quả có vượt quá
giới hạn hay không. Khi cộng số không dấu ta không quan tâm

đến bit này. Như vậy kết quả của phép tính cộng hay trừ lớn hơn
127 hoặc nhỏ hơn –128 sẽ set cờ tràn. Ví dụ OV sẽ set sau phép
tính cộng sau:
Hex: 0F Decimal : 15
+7F +127
8E 142
8E tương đương với –116. Rõ ràng kết quả 142 không
chính xác. Vì vậy bit OV được set.
B
it
K
ý hiệu
Đ
òa chỉ
Chức năng
P
SW .7
P
SW .6
P
SW .5
P
SW .4
P
SW .3
P
SW .2
P
SW .1
P

C
Y
A
C
F
0
R
S1
R
S0
O
V
P
D
7h
D
6h
D
5h
D
4h
D
3h
D
2h
D
1h
D
Cờ nhớ
Cờ nhớ phụ

Cờ Zero
Chọn thanh ghi dự trữ 1
Chọn thanh ghi dự trữ 2
00=bank0, đòa chỉ 00h-07h
01=bank1, đòa chỉ 08h-0Fh
10=bank2, đòa chỉ 10h-17h
11=bank3, đòa chỉ 18h-1Fh
Cờ tràn
Dự trữ
Cờ chẵn lẽ
SW .0 0h
Bảng 4.3 Thanh ghi PSW
* Bit parity:
Bit Parity được tự động set hoặc xóa trong mỗi chu kỳ
máy để tạo nên parity chẵn đối với thanh ghi tích luỹ. Số bit 1
trong thanh ghi ACC cộng với P luôn luôn là một chẵn. Ví dụ
nếu ACC chứa 10101101B, P sẽ là 1. Bit Parity thường được liên
kết với chương trình truyền nối tiếp có sử dụng parity.
 Thanh ghi B
Thanh ghi B có đòa chỉ F0h, chủ yếu dùng với thanh ghi
ACC trong các phép toán nhân và chia. Lệnh MUL AB nhân các
số 8 bit không dấu trong thanh ghi A và B. Kết quả là một số 16
bit chứa trong thanh ghi ACC (byte thấp) và B (byte cao). Lệnh
DIV B chia thanh ghi ACC cho B. Kết quả thương số được lưu
trong thanh ghi ACC số dư được lưu trong thanh ghi B. Thanh
ghi B cũng được dùng như những thanh ghi khác và có thể truy
xuất bit (đòa chỉ F0h đến F7h)
 Con trỏ ngăn chồng (stack pointer – SP)
Stack – pointer là một thanh ghi 8 bit có đòa chỉ 81H. Nó
chứa đòa chỉ hiện thời của đỉnh stack. Khi đẩy dữ liệu vào stack,

SP tăng lên một giá trò, tiếp theo dữ liệu được ghi vào stack. Khi
lấy dữ liệu ra khỏi stack, dữ liệu được đọc ra trước sau đó SP
được giảm. Stack của 8051 nằm trong vùng RAM nội và có thể
truy xuất bằng đòa chỉ trực tiếp. 128 bytes đầu tiên đối với
8051/8031 và 256 bytes đối với 8052/8032 trong vùng RAM nội
có thể dùng làm stack. Để tạo ra stack bắt đầu tại 60H, ta khởi
động thanh ghi SP:
MOV SP, #5FH ;
Như vậy stack được giới hạn trong 32 bytes. Ta dùng giá trò
5FH vì SP sẽ tăng lên 60H trước khi đẩy dữ liệu đầu tiên vào
stack.
Khi lập trình ta không cần phải khởi động lại thanh ghi SP
vì nó đã được khởi động với giá trò khi reset. Thanh ghi SP chứa
giá trò mặc đònh là 07H. Do đó stack mặc đònh bắt đầu tại 08H.
Nếu trình không khởi động lại stack thì các thanh ghi 1, 2, 3
không thể sử dụng vì nó được dùng làm stack.
Stack được truy xuất một cách rõ ràng bằng các lệnh
PUSH, POP để lưu trữ tạm thời hay truy xuất dữ liệu. Nó cũng
có thể được truy xuất ngầm khi có các lệnh gọi đến chương trình
con. Các lệnh ACALL, LCALL hay ngắt sẽ đẩy thanh ghi đếm
chương trình (PC) vào stack. Lệnh RET, RETI trả giá trò trong
stack lại cho PC.
 Con trỏ dữ liệu (DPTR)
Con trỏ dữ liệu dùng để truy xuất mã hay dữ liệu từ bộ nhớ
ngoài và thanh ghi 16 bit. Thanh ghi này gồm hai thanh ghi DPL
(byte thấp, đòa chỉ 82H) và DPH (byte cao, đòa chỉ 83H). Ba lệnh
sau đây sẽ ghi giá trò 55H vào RAM ngoài tại đòa chỉ 1000H.
MOV A, #55H;
MOV DPTR, #1000H;
MOV @DPTR, A;

 Các thanh ghi Port:
Các port của 8051 gồm có port 0 đòa chỉ 80H, port 1 đòa chỉ
90H, port 2 đòa chỉ A0H, port 3 đòa chỉ B0H. Các port 0, 2 và 3
không được dùng để xuất nhập nếu đang sử dụng bộ nhớ ngoài.
Còn lại port 1 có thể dùng để xuất nhập (I/O).
Tất cả các port đều có thể dùng truy xuất bit. Điều này
cung cấp cho vi điều khiển khả năng giao tiếp rất mạnh. Ta có
thể dùng chân P1.7 để đóng mở động cơ. Chân P1.7 nối với

×