Trang 1
LỜI MỞ ĐẦU
Với việc phát triển của kĩ thuật vi xữ lý hiện nay thì việc áp dụng vào thực tiễn
đời sống là một nhu cầu cần thiết của con ngƣời. Với xu hƣớng hiện đại hóa nhƣ hiện
nay thì việc điều khiển thiết bị bởi một hệ thống sẽ giúp việc điều khiển thiết bị đơn
giản và dễ sử dụng cho ngƣời dùng.
Nắm bắt đƣợc tình hình nhóm sinh viên chúng em lựa chọn đề tài “Điều Khiển
Thiết Bị Qua PC” nhằm nghiên cứu để cung cấp cho ngƣời dùng một hệ thống điều
khiển đơn giản mà hiệu quả, đó là hệ thống điều khiển nhiều thiết bị tại chỗ qua việc
kết nối với cổng COM máy tính, chúng ta có thể điều khiển đƣợc các thiết bị dân dụng
nhƣ đèn dây tóc, đèn huỳnh quang, và các thiết bị đƣợc đƣợc điều khiển bằng chức
năng ON/OFF.
Thông qua việc nghiên cứu vi điều khiển AT89S8252, các cổng giao tiếp máy
tính và các linh kiện điện tử, đề tài sẽ mang lại một hệ thống ổn định, chính xác và an
toàn với ngƣời sử dụng.
Với sự hƣớng dẫn của cô Nguyễn Lan Anh đã giúp chúng em hoàn thành tốt đề
tài này.
Trong quá trình tìm hiểu không thể không có những điều thiếu sót, mong quý
Thầy Cô và ngƣời đọc góp ý, chình sửa để đề tài của chúng em đƣợc hoàn thiện tốt
hơn.
Nhóm Sinh Viên
Điều khiển thiết bị qua PC Mục lục
Trang 2
MỤC LỤC
LỜI MỞ ĐẦU .........................................................................................................................1
MỤC LỤC ................................................................................................................................2
CHƢƠNG 1: DẪN NHẬP ....................................................................................................6
1.1 LÝ DO CHỌN ĐỀ TÀI ............................................................................................6
1.3 ĐỐI TƢỢNG NGHIÊN CỨU VÀ PHẠM VI NGHIÊN CỨU ..........................6
1.3.1 Đối tƣợng nghiên cứu. .......................................................................................6
1.3.2 Phạm vi nghiên cứu............................................................................................6
CHƢƠNG 2: TÌM HIỂU VI ĐIỀU KHIỂN AT89S8252 ..............................................7
2.1 MÔ TẢ ........................................................................................................................7
2.2 CẤU TRÚC VDK AT89S8252, CHỨC NĂNG TỪNG CHÂN ........................7
2.3 TỔ CHỨC BỘ NHỚ .............................................................................................. 11
2.3.1 RAM mục đích chung..................................................................................... 12
2.3.2 RAM định vị. ................................................................................................... 12
2.3.3 Các băng thanh ghi (Register Banks). .......................................................... 12
2.3.4 Các thanh ghi chức năng đặc biệt (Special Function Register). ................ 13
2.3.4.1 Từ trạng thái chƣơng trình (PSW: Program Status Word):.................... 14
2.3.4.2 Thanh ghi B:................................................................................................. 16
2.3.4.3 Con trỏ Stack SP (Stack Pointer): ............................................................. 16
2.3.4.4 Hai con trỏ dữ liệu DPTR (Data Pointer) ................................................. 16
2.3.4.5 Các thanh ghi Port (Port Register): ........................................................... 16
2.3.4.6 Các thanh ghi Timer (Timer Register):..................................................... 16
2.3.4.7 Các thanh ghi Port nối tiếp (Serial Port Register): .................................. 17
2.3.4.8 Các thanh ghi ngắt (Interrupt Register): ................................................... 17
2.3.4.9 Thanh ghi điều khiển nguồn PCON (Power Control Register): ............ 18
2.3.4.10 Thanh ghi điều khiển bộ nhớ và kiểm soát giờ (WMCON) ............... 19
2.3.4.11 Thanh ghi giao tiếp nối tiếp bên ngoài SPI (Serial Peripheral
Interface) .................................................................................................................... 20
2.4 TÓM TẮT TẬP LỆNH CỦA AT89S8252 ......................................................... 21
2.4.1 Các chế độ định vị ( addressing mode ) ....................................................... 21
2.4.1.1 Sự định vị thanh ghi ( Register Addressing) ............................................ 21
2.4.1.2 Sự định địa chỉ trực tiếp ( Direct Addressing ) ........................................ 22
2.4.1.3 Sự định vị địa chỉ gián tiếp ( Indirect Addressing) ................................. 22
Điều khiển thiết bị qua PC Mục lục
Trang 3
2.4.1.4 Sự định vị địa chỉ tức thời (Immediate Addressing) ............................... 23
2.4.1.5 Sự định vị địa chỉ tƣơng đối ....................................................................... 23
2.4.1.6 Sự định địa chỉ tuyệt đối ( Absolute Addressing) ................................... 24
2.4.1.7 Sự định vị địa chỉ dài ( Long Addressing ) .............................................. 24
2.4.1.8 Sự định địa chỉ phụ lục (Index Addressing )............................................ 24
2.4.2 Các kiểu lệnh (instruction types) ................................................................... 25
2.4.2.1 Các lệnh số học (Arithmetic Instrustion): ................................................ 25
2.4.2.2 Các hoạt động logic (Logic Operation): ................................................... 26
2.4.2.3 Các lệnh rẽ nhánh ........................................................................................ 27
2.4.2.4 Các lệnh dịch chuyển dữ liệu. .................................................................... 29
2.4.2.5 Các lệnh luận lý (Boolean Instruction) ..................................................... 30
2.5 HOẠT ĐỘNG CỦA PORT NỐI TIẾP AT89S8252. ........................................ 31
2.5.1 Giới thiệu .......................................................................................................... 31
2.5.2 Thanh ghi điều khiển port nối tiếp SCON (Serial Port Control Register) 32
2.5.3 Các mode hoạt động (Mode Of Operation) ................................................. 33
2.5.4 Sự khởi động, truy xuất các thanh ghi port nối tiếp .................................... 34
2.5.4.1 Sự cho phép bộ thu (Recive Enable) ......................................................... 34
2.5.4.2 Bit data thứ 9 ( the 9
th
data bit) .................................................................. 34
2.5.4.3 Sự thêm vào bit kiểm tra chẳn lẻ Parity .................................................... 34
2.5.4.4 Cờ ngắt .......................................................................................................... 35
2.5.5 Sự truyền của bộ xử lý đa kênh ................................................................. 35
2.5.6 Tốc độ baud của port nối tiếp ........................................................................ 36
2.6 HOẠT ĐỘNG TIMER CỦA AT89S8252 .......................................................... 39
2.6.1 Giới thiệu .......................................................................................................... 39
2.6.2 Timer 0 và Timer 1 ......................................................................................... 39
2.6.2.1 Thanh ghi điều khiển Timer TCON (Timer Control Register).............. 41
2.6.2.2 Các Mode và cờ tràn (Timer Modes And Overflow).............................. 41
2.6.2.2.1 Mode Timer 13 bit (MODE 0) ............................................................. 41
2.6.2.2.2 Mode Timer 16 bit (MODE 1) ............................................................. 42
2.6.2.2.3 Mode tự động nạp 8 bit (MODE 2) ..................................................... 42
2.6.2.2.4 Mode Timer tách ra (MODE 3)............................................................ 43
2.6.2.3 Các nguồn xung clock (Clock Sources).................................................... 43
2.6.2.3.1 Sự bấm giờ bên trong (Interval Timing) ............................................. 43
2.6.2.3.2 Sự đếm các sự kiện (Event Counting) ................................................. 44
Điều khiển thiết bị qua PC Mục lục
Trang 4
2.6.2.4 Sự bắt đầu, kết thúc và sự điều khiển các Timer (Starting, Stoping And
Controlling The Timer) ............................................................................................. 44
2.6.2.5 Sự khởi động và truy suất các thanh ghi Timer. ...................................... 44
2.6.2.6 Sự đọc thanh ghi timer trên tuyến. ............................................................ 45
2.6.3 Timer 2.............................................................................................................. 45
2.6.3.1 Thanh ghi T2CON (Timer/Counter 2 Control Register) ........................ 46
2.6.3.2 Thanh ghi T2MOD – Timer 2 Mode Control Register........................... 47
2.6.3.3 Chế độ Capture ............................................................................................ 47
2.6.3.4 Chế độ Auto-Reload.................................................................................... 48
2.6.3.5 Chế độ Baud Rate Generator...................................................................... 49
CHƢƠNG 3: TÌM HIỂU CÁC CỔNG GIAO TIẾP................................................... 51
3.1 GIAO TIẾP CỔNG SONG SONG (CỔNG MÁY IN) ..................................... 51
3.1.1 Tên gọi .............................................................................................................. 51
3.1.2 Mức điện áp cổng ............................................................................................ 51
3.1.3 Khoảng cách ghép nối .................................................................................... 51
3.1.4 Tốc độ truyền dữ liệu ...................................................................................... 51
3.1.5 Cấu trúc cổng song song................................................................................. 51
3.1.6 Các thanh ghi ở cổng song song. ................................................................... 53
3.2 GIAO TIẾP CỔNG NỐI TIẾP (RS232) ............................................................. 53
3.2.1 Cấu trúc cổng nối tiếp. .................................................................................... 53
3.2.2 Truyền thông nối tiếp giữa 2 nút. .................................................................. 56
3.3 TÌM HIỂU VỀ USB ............................................................................................... 57
3.3.1 Khái niệm ......................................................................................................... 57
3.3.2 Kết nối qua USB.............................................................................................. 58
3.3.3 Mở rộng cổng USB ......................................................................................... 58
3.3.4 Các đặt tính của USB ...................................................................................... 59
3.3.5 USB 2.0 ............................................................................................................ 60
3.3.6 USB 3.0 ............................................................................................................ 60
CHƢƠNG 4: CHUẨN TRUYỀN THÔNG NỐI TIẾP RS232.................................. 62
4.1 ĐẶT VẤN ĐỀ. ....................................................................................................... 62
4.2 ƢU ĐIỂM CỦA GIAO DIỆN NỐI TIẾP RS232. ............................................. 62
4.3 NHỮNG ĐẶC ĐIỂM CẦN LƢU Ý TRONG CHUẨN RS232. ..................... 62
4.4 CÁC MỨC ĐIỆN ÁP ĐƢỜNG TRUYỀN......................................................... 62
4.5 CỔNG RS232 TRÊN PC....................................................................................... 63
4.6 QUÁ TRÌNH DỮ LIỆU. ....................................................................................... 64
Điều khiển thiết bị qua PC Mục lục
Trang 5
4.6.1 Tốc độ Baud. .................................................................................................... 65
4.6.2 Bit chẵn lẻ hay Parity bit. .............................................................................. 65
4.7 SƠ ĐỒ KẾT NỐI ................................................................................................... 66
CHƢƠNG 5. THIẾT KẾ MẠCH PHẦN CỨNG ĐIỀU KHIỂN ............................. 67
5.1 KHỐI NGUỒN NUÔI VI ĐIỀU KHIỂN, MẠCH. ........................................... 67
5.2 KHỐI CHUYỂN ĐỔI TÍN HIỆU RS232 THÀNH TTL DÙNG MAX232... 68
5.2.1 Giới thiệu về MAX232 ................................................................................... 68
5.2.2 Sơ đồ kết nối. ................................................................................................... 68
5.3 MẠCH ĐIỀU KHIỂN ĐÓNG NGẮT TẢI AC. ................................................ 69
CHƢƠNG 6: THIẾT KẾ CODE VÀ GIAO DIỆN ĐIỀU KHIỂN.......................... 71
6.1 THIẾT KẾ CODE ĐIỀU KHIỂN VI XỬ LÝ .................................................... 71
6.1.1 Ý tƣởng thiết kế ............................................................................................... 71
6.1.2 Lƣu đồ giải thuật ............................................................................................. 72
6.1.3 Code điều khiển ............................................................................................... 72
6.2 THIẾT KẾ GIAO DIỆN ĐIỀU KHIỂN .............................................................. 75
6.3 MẠCH NGUYÊN LÝ ........................................................................................... 83
6.4 MẠCH MÔ PHỎNG.............................................................................................. 84
CHƢƠNG 7: HƢỚNG PHÁT TRIỂN CỦA ĐỀ TÀI................................................. 85
TÀI LIỆU THAM KHẢO ................................................................................................. 86
PHỤ LỤC 1........................................................................................................................... 87
PHỤ LỤC 2........................................................................................................................... 88
Điều khiển thiết bị qua PC Chƣơng 1: Dẫn Nhập
Trang 6
CHƢƠNG 1: DẪN NHẬP
1.1 LÝ DO CHỌN ĐỀ TÀI
Với sự phát triển không ngừng của các ngành khoa học kỹ thuật nhằn đáp ứng
ngày càng đa dạng và phong phú cho đời sống con ngƣời, việc nghiên cứu và phát
triển các sản phẩm điều khiển tự động thay thế sức lao động cùa con ngƣời là một
nhiệm vụ rất cần thiết.
Viêc giám sát và điều khiển các thiết bị từ xa qua hệ thống gồm các phần tử nối
với nhau bằng dây dẫn thông qua chuẩn RS232 đã đem lại một lợi ích hết sức to lớn
cho nhu cầu phát triển của xã hội, tiết kiệm đƣợc rất nhiều thời gian, sức lực và mang
lại hiệu quả kinh tế lớn.
Nắm bắt đƣợc tình hình quan trọng, với quyết định lựa chon đề tài “Điều khiển
thiết bị qua PC” nhằm góp phần mang lại sự tiện nghi, tiện ích cho cuộc sống ngày
nay.
1.2 MỤC ĐÍCH NGHIÊN CỨU ĐỀ TÀI
Đề tài sử dụng điều khiển các thiết bị dân dụng trong gia đình nhƣ đèn, quạt,..
thông qua ngôn ngữ lập trình phổ biến hiện nay. Từ viêc tìm hiểu về các thiết bị giao
tiếp cho đến việc thiết kế mạch nhằm giúp ngƣời đọc dễ dàng tiếp nhận và muốn cung
cấp hệ thống điều khiển cho ngƣời sử dụng.
1.3 ĐỐI TƢỢNG NGHIÊN CỨU VÀ PHẠM VI NGHIÊN CỨU
1.3.1 Đối tƣợng nghiên cứu.
Tìm hiểu về các cổng giao tiếp: cổng nối tiếp, cổng song song, cổng USB,
chuẫn kết nối RS232, khảo sát vi điều khiển AT89S8252.
1.3.2 Phạm vi nghiên cứu.
Thực hiện viêc kết nối thiết bị điều khiển với PC thông qua RS232, điều khiển
các thiết bị dân dụng.
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 7
CHƢƠNG 2: TÌM HIỂU VI ĐIỀU KHIỂN AT89S8252
2.1 MÔ TẢ
AT89S8252 là một vi điều khiển do ATMEL sản xuất, chế tạo theo công nghệ
CMOS với 8KB Flash (Flash programmable and erasable read only memory) và 2KB
EEPROM. Thiết bị này đƣợc chế tạo bằng cách sử dụng kỹ thuật bộ nhớ không bốc
hơi mật độ cao của ATMEL và tƣơng thích với chuẩn công nghiệp MSC-52
TM
về lập
tập lệnh và các chân ra. AT89S8252 là một vi điều khiển mạnh có công suất lớn có
tính linh động cao và phù hợp về giá cả đối với các ứng dụng vi điều khiển.
Các đặc điểm của AT89S8252 đƣợc tóm tắt nhƣ sau:
Tƣơng thích hoàn toàn với họ MSC-52
TM
của Intel.
8 KB bộ nhớ có thể lập trình lại nhanh, có khả năng tới 1000 chu kỳ ghi
xóa.
Tần số hoạt động từ 0Hz đến 24 MHz.
3 mức khóa bộ nhớ lập trình.
3 bộ Timer/Counter 16 bit.
256 Byte RAM nội.
4 Port xuất nhập I/O 8 bít.
Giao tiếp nối tiếp.
2KB EEPROM bên trong dùng để lƣu trữ chƣơng trình.
Độ bền EEPROM: 100.000 lần ghi/xóa.
Chế độ hạ nguồn và chế độ lƣời tiêu tốn công suất thấp.
9 nguồn ngắt.
Điều khiển truyền dữ liệu trực tiếp qua các chân MISO, MOSI, SCK.
2.2 CẤU TRÚC VDK AT89S8252, CHỨC NĂNG TỪNG CHÂN
Chức năng hoạt động của từng chân (PIN) đƣợc tóm tắt nhƣ sau:
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 8
Hình 2.1: Sơ đồ chân AT89S8252
Từ chân 1†8 Port 1 (P1.0, P1.1, …, P1.7) dùng làm Port xuất nhập I/O để giao
tiếp bên ngoài với điện trở kéo lên bên trong. Các bộ đệm xuất của Port 1 có thể
cấp/hút dòng cho 4 ngõ vào TTL loại LS. Các chân Port 1 có các bit 1 đƣợc ghi để
đƣợc kéo lên mức cao bởi các điện trở kéo lên bên trong và trong trạng thái này chúng
đƣợc dùng làm các ngõ nhập. Khi là Port nhập các chân của Port 1 đang đƣợc kéo
xuống mức thấp do bên ngoài sẽ cấp dòng do các điện trở bên trong kéo lên. Các chân
P1.0 và P1.1 của Port 1 cũng đƣợc dùng cho các chức năng T2 và T2EX. Các chân
P1.5, P1.6, P1.7 là các chân đƣợc dùng cho các chức năng MOSI, MISO, SCK để điều
khiển truyền và xuất dữ liệu cho vi điều khiển. Công dụng chuyển đổi có liên hệ với
các đặt tính của AT89S8252 nhƣ sau:
Bảng 2.1: Chức năng chuyển đổi ở Port 1
Bit Tên Chức năng chuyển đổi
P1.0 T2 Ngõ vào của bộ định thời/đếm 2
P1.1 T2EX Nạp lại/thu nhận của bộ định thời 2
P1.4
Ngõ vào lựa chọn cổng Slave
P1.5 MOSI Chân xuất dữ liệu Master, nhập dữ liệu Slave
P1.6 MISO Chân nhập dữ liệu Master, xuất dữ liệu Slave
P1.7 SCK Ngõ ra xung clock của Master, ngõ vào xung clock Slave
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 9
Chân 9 (RST) là chân đề RESET cho AT89S8252. Bình thƣờng các chân này ờ
mức thấp. Khi ta đƣa tín hiệu lên mức cao (tối thiểu 2 chu kỳ máy), thì những thanh
ghi nội của AT89S8252 đƣợc LOAD những giá trị thích hợp để khởi động lại hệ
thống.
Từ chân 10†17 là Port 3 (P3.1, P3.1, …P3.7) dùng vào hai mục đích: dùng làm
Port xuất nhập I/O hoặc mỗi chân lại giữ một chức năng cá biệt đƣợc tóm tắt sơ bộ
nhƣ sau:
Bảng 2.2: Các chức năng chuyển đổi ở Port 3
Bit Tên Chức năng chuyển đổi
P3.0 RXD Dữ liệu nhận cho port nối tiếp
P3.1 TXD Dữ liệu phát cho port nối tiếp
P3.2
Ngắt 0 bên ngoài
P3.3
Ngắt 1 bên ngoài
P3.4 T0 Ngõ vào của timer/counter 0
P3.5 T1 Ngõ vào của timer/counter 1
P3.6
Xung ghi bộ nhớ dữ liệu ngoài
P3.7
Xung đọc bộ nhớ dữ liệu ngoài
Các chân 18, 19 (XTAL2 và XTAL1) đƣợc nối với bộ dao động thạch anh 12
MHz để tạo dao động trên Chíp. Hai tụ 30 pF đƣợc thêm vào để ổn định dao động.
Hình 2.2 Dao động trên chip với thạch anh
Chân 20 (Vss) nối đất (Vss = 0).
Từ chân 21†28 là Port 2 ( P2.0, P2.1, …, P2.7) dùng vào hai mục đính: dùng
làm Port xuất nhập I/O hoặc dùng làm byte cao của bus địa chỉ thì nó không còn tác
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 10
dụng I/O nữa. Bởi vì ta muốn EPROM và RAM ngoài nên phải sử dụng Port 2 làm
byte cao của bus địa chỉ.
Chân 29 (
) là tín hiệu điều khiển xuất ra của AT89S8252, nó cho phép
chọn bộ nhớ ngoài và đƣợc nối chung với chân của OE (Out Enable) của EPROM
ngoài để cho phép đọc các byte của chƣơng trình. Các xung tín hiệu
hạ thấp
trong suốt thời gian thi hành lệnh. Những mã nhị phân của chƣơng trình đƣợc đọc từ
EPROM đi qua bus dữ liệu và đƣợc chốt vào thanh ghi lệnh IR của AT89S8252 bởi
mã lệnh. Khi thi hành chƣơng trình trong ROM nội
sẽ ở mức thụ động (mức
cao). Khi AT89S8252 đang thực thi lệnh từ bộ nhớ chƣơng trình ngoài,
đƣợc
tích cực hai lần cho mỗi chu kỳ máy, ngoại trừ thời gian mỗi lần truy xuất bộ nhớ
dữ liệu ngoài, hai lần tích cực của
đƣợc bỏ qua.
Chân 30 (ALE/
: Adress Latch Enable) là tín hiệu điều khiển xuất ra của
AT89S8252, nó cho phép phân kênh bus địa chỉ và bus dữ liệu của Port 0. Các xung
tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có thể dùng làm
nguồn xung nhịp cho các phần khác của hệ thống. Nếu nhịp xung trên AT89S8252
là 12 MHz thì ALE có tần số là 2MHz. Tuy nhiên cần chú ý là một xung ALE sẽ bị
mất khi truy xuất bộ nhớ bên ngoài. Có thể hủy bỏ chức năng set của bit 0 của thanh
ghi SFR ở vị trí 8EH. Khi bit này đƣợc set, ALE chỉ tích cực khi có lệnh MOVX
hoặc MOVC, nếu không có lệnh này ALE ở mức cao. Việc set bit 0 của thanh ghi ở
vị trí 8EH không làm ảnh hƣởng đến vi điều khiển khi truy cập bộ nhớ ngoài.
Chân 31 (EA: Eternal Acess) đƣợc đƣa xuống thấp cho phép chọn bộ nhớ mã
ngoài đối với 8031.
Đối với AT89S8252 thì:
EA = 5V: Chọn ROM nội.
EA=0V: Chọn ROM ngoại.
EA=12V: Lập trình EPROM nội.
Các chân từ 32†39 là Port 0 (P0.0, P0.1, …, P0.7) dùng cho cả hai mục đích:
vừa làm byte thấp cho bus địa chỉ, vừa làm bus dữ liệu, nếu Port 0 không còn chức
năng xuất nhập I/O nữa.
Chân 40 (Vcc) đƣợc nối lên nguồn 5V.
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 11
2.3 TỔ CHỨC BỘ NHỚ
Bản đồ bộ nhớ data trên Chip nhƣ sau:
7F
30
RAM đa dụng
2F 7F 7E 7D 7C 7B 7A 79 78
2E 77 76 75 74 73 72 71 70
2D 6F 6E 6D 6C 6B 6A 69 68
2C 67 66 65 64 63 62 61 60
2B 5F 5E 5D 5C 5B 5A 59 58
2A 57 56 55 54 53 52 51 50
29 4F 4E 4D 4C 4B 4A 49 48
28 47 46 45 44 43 42 41 40
27 3F 3E 3D 3C 3B 3A 39 38
26 37 36 35 34 33 32 31 30
25 2F 2E 2D 2C 2B 2A 29 28
24 27 26 25 24 23 22 21 20
23 1F 1E 1D 1C 1B 1A 19 18
22 17 16 15 14 13 12 11 10
21 0F 0E 0D 0C 0B 0A 09 08
20 07 06 05 04 03 02 01 00
1F
18
Bank 3
17
10
Bank 2
0F
08
Bank 1
07
00
Bank thanh ghi 0
(mặc định cho R0-R7)
Hình 2.3: Cấu trúc bộ nhớ trên AT89S8252
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 12
2.3.1 RAM mục đích chung
Trong bản đồ nhớ trên, 80 byte từ địa chỉ 30H÷7FH là RAM mục đích chung.
Kể cả 32 byte phần dƣới từ 00H†1FH cũng có thể sử dụng giống nhƣ 80 byte ở trên,
tuy nhiên 32 byte còn có mục đích khác sẽ đề cập sau.
Bất kỳ vị trí nào trong RAM mục đích chung cũng có thể đƣợc truy xuất tùy ý
giống nhƣ việc sử dụng các mode để định địa chỉ trực tiếp hay gián tiếp. Ví dụ để đọc
nội dung RAM nội có địc chỉ 5FH vào thanh ghi tích lũy thì ta dùng lệnh
MOV A, 5FH.
Lệnh này chuyển 1 byte dữ liệu dùng cách định địa chỉ trực tiếp để xác định
địa chỉ nguồn (nghĩa là 5FH). Đích nhận dữ liệu đƣợc xác định ngầm trong mã lệnh
là thanh ghi tích lũy A.
RAM nội cũng đƣợc truy xuất bởi việc dùng địa chỉ gián tiếp qua R0 và R1.
Hai lệnh sau đây sẽ tƣơng đƣơng lệnh trên:
MOV R0, #5FH
MOV A, @R0
Lệnh thứ nhất dùng sự định vị tức thời để đƣa giá trị 5FH vào thanh ghi R0,
lệnh thứ 2 dùng sự định vị gián tiếp để đƣa dữ liệu “đã đƣợc trỏ đến bởi R0” vào thanh
ghi tích lũy A.
2.3.2 RAM định vị.
AT89S8252 chứa 210 vị trí có thể định vị bit, trong đó có 128 bit nằm ở các địa
chỉ từ 20H÷2FH và phần còn lại là các thanh ghi chức năng đặc biệt.
Ý tƣởng truy xuất từng bit riêng lẻ bằng phần mềm là một đặc tính tiện lợi
của hầu hết các vi điều khiển. Các bit có thể đặt, xoá, AND, OR, … với một lệnh
đơn. Trong khi đó đa số các vi xử lý đòi hỏi một chuỗi lệnh đọc-sửa-ghi để đạt
hiệu quả tƣơng tự. Hơn nữa các port I/O cũng đƣợc địa chỉ hóa theo bit địa chỉ làm
đơn giản hóa phần mềm để xuất nhập từng bit.
Có 128 bit đa dụng đƣợc địa chỉ hóa ở các byte 20H đến 2FH (8bit/byte x
16 bytes = 128 bits). Các địa chỉ này đƣợc truy cập nhƣ các byte hoặc nhƣ các bit tùy
theo lệnh sử dụng. Ví dụ, để đặt bit 67H lên giá trị 1, có thể dùng lệnh sau:
SETB 67H
Chú ý rằng, “địa chỉ bit 67H” là bit có trọng số lớn nhất (MSB) ở “ địa chỉ
byte 2CH”. Lệnh trên sẽ không tác động đến các bit khác ở địa chỉ này.
2.3.3 Các băng thanh ghi (Register Banks).
32 vị trí nhớ cuối cùng của bộ nhớ từ địa chỉ byte 00H÷1FH chứa các dãy thanh
ghi. Tập hợp các lệnh của AT89S8252 cung cấp 8 thanh ghi từ R0÷R7 ở địa chỉ
00H÷07H nếu máy tính mặc nhiên chọn để thực thi. Những lệnh tƣơng đƣơng dùng sự
định vị trực tiếp. Những giá trị dữ liệu dƣợc dùng thƣờng xuyên chắc chắn sẽ sử dụng
một trong các thanh ghi này.
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 13
Lệnh sau sẽ đọc địa chỉ 05H vào thanh ghi tích lũy:
MOV A, R5
Đây là lệnh 1 byte dùng cách định địa chỉ thanh ghi. Dĩ nhiên, cùng tác vụ
có thể thực hiện bằng lệnh hai byte dùng địa chỉ trực tiếp nằm trong byte thứ hai:
MOV A, 05H
Các lệnh dùng thanh ghi R0 đến R7 thì sẽ ngắn hơn và nhanh hơn các
lệnh tƣơng ứng
nhƣng
dùng
cách định địa chỉ trực tiếp. Các giá trị dữ liệu
đƣợc dùng thƣờng xuyên nên dùng một trong các thanh ghi này.
Băng thanh ghi tích cực có thể chuyển đổi bằng cách thay đổi các bit chọn
băng thanh ghi trong từ trạng thái chƣơng trình (PSW). Giả sử rằng thanh ghi
3 đƣợc tích cực, lệnh sau sẽ ghi nội dung của thanh ghi tích lũy vào địa chỉ 18H:
MOV R0, A
Ý tƣởng dùng “các băng thanh ghi” cho phép chuyển ngữ cảnh chƣơng trình
nhanh và hiệu quả mà ở đó từng phần riêng rẽ của phần mềm sẽ có một bộ thanh
ghi riêng độc lập với các phần khác.
2.3.4 Các thanh ghi chức năng đặc biệt (Special Function Register).
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 14
Hình 2.4: Bản đồ các thanh ghi đặc biệt
Các thanh ghi trong AT89S8252 đƣợc đặt cấu hình nhƣ một phần của RAM
trên chip. Vì vậy
mỗi
thanh
ghi sẽ có một địa chỉ (ngoại trừ thanh ghi đếm chƣơng
trình và thanh ghi lệnh vì các thanh ghi này hiếm khi bị xử lý trực tiếp, nên không có
lợi gì khi đặt chúng trong RAM trên chip). Đó là lý do mà AT89S8252 không có
nhiều thanh ghi. Có 33 thanh ghi chức năng đặc biệt SFR ở đỉnh của RAM nội từ địa
chỉ các thanh ghi chức năng đặc biệt đƣợc định rõ, còn phần còn lại không định rõ.
Mặc dù thanh ghi A có thể truy xuất trực tiếp nhƣng hầu hết các thanh ghi chức
năng đặc biệt đƣợc truy suất bằng cách sử dụng sự định vị địa chỉ trực tiếp. Chú ý rằng
vài thanh ghi SFR có cả bit định vị và cả byte định vị. Ngƣời thiết kế sẽ cẩn thận khi
truy xuất bit mà không truy xuất byte.
2.3.4.1 Từ trạng thái chƣơng trình (PSW: Program Status Word):
Từ trạng thái chƣơng trình ở địa chỉ D0H đƣợc tóm tắt nhƣ sau:
Bảng 2.3: Tóm tắt thanh ghi PSW
BIT SYMBOL ADDRESS DESRIPTION
PSW.7 CY D7H Carry Flag
PSW.6 AC D6H Auxiliary Carry Flag
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 15
PSW.5 F0 D5H Flag 0
PSW.4 RS1 D4H Register Bank Select 1
PSW.3 RS0 D3H Register Bank Select 0
00: Bank 0; Address 00H÷07H
01: Bank 1; Address 08H÷0FH
10: Bank 2; Address 10H÷17H
11: Bank 3; Address 18H÷1FH
PSW.2 OV D2H Overlow Flag
PSW.1 - D1H Reserved
PSW.0 P D0H Even Parity Flag
Chức năng từng bit trạng thái chƣơng trình.
Cờ Carry CY (Carry Flag):
Cờ Carry đƣợc set lên 1 nếu có sự tràn ở bit 7 trong phép cộng hoặc có sự
mƣợn vào bit 7 trong phép trừ.
Cờ Carry cũng là 1 “thanh ghi tích lũy luận lý”, nó đƣợc dùng nhƣ một thanh
ghi 1 bit thực thi trên các bit bởi nhựng lệnh luận lý. Ví dụ lệnh: ANL C,25H sẽ AND
bit 25H với cờ Carry và cấp kết quả vào cờ Carry.
Cờ Carry phụ AC (Auxiliary Carry Flag):
Khi cộng những giá trị BCD (Binary Code Decimal), cờ nhớ phụ AC đƣợc set
nếu có sự tràn từ bit 3 sang bit 4 hoặc 4 bit thấp nằm trong phạm vi 0AH÷0FH.
Cờ 0 (Flag 0):
Cờ 0 (F0) là cờ có mục đích tổng hợp cho phép ngƣời ứng dụng dùng nó.
d). Những bit chọn dãy thanh ghi RS1 và RS0:
RS1 và RS0 quyết định chọn dãy thanh ghi tích cực. Chúng đƣợc xóa sau khi
reset hệ thống và đƣợc thay đổi bởi phần mềm khi cẩn thiết.
Cờ tràn OV (Over Flag):
Cờ tràn đƣợc set sau một hoạt động cộng hoặc trừ nếu có sự tràn toán học. Bit
OV đƣợc bỏ qua đối với sự cộng trừ không dấu. Khi cộng trừ có dấu, kết quả lớn hơn
+127 hay nhỏ hơn -128 sẽ set bit OV.
Bit Parity (P):
Bit tự động đƣợc set hay Clear ở mỗi chu kỳ máy để lập Parity chẳn với thanh
ghi A. Sự đếm các bit 1 trong thanh ghi A cộng với bit Parity luôn luôn chẵn. Ví dụ A
chứa 10101101B thì bit P set lên một để tổng số bit 1 trong A và P tạp thành số chẵn.
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 16
Bit Parity thƣờng đƣợc dùng trong sự kết hợp với những thủ tục của Port nối
tiếp để tạo ra bit Parity trƣớc khi phát đi hoặc kiểm tra bit Parity sau khi thu.
2.3.4.2 Thanh ghi B:
Thanh ghi B ở địc chỉ F0H đƣợc dùng đi đôi với thanh ghi A cho các hoạt động
nhân chia.
Thanh ghi B có thể đƣợc dùng nhƣ một thanh ghi đệm trung gian đa mục đích.
Nó là những bit định vị thông qua những địa chỉ F0H÷F7H.
2.3.4.3 Con trỏ Stack SP (Stack Pointer):
Stack Pointer là một thanh ghi 8 bit ở địa chỉ 81H. Nó chứa địa chỉ của dữ liệu
đang hiện hành trên đỉnh Stack. Các hoạt động của Stack bao gồm việc đẩy dử liệu vào
Stack (PUSH) và lấy dữ liệu ra khỏi Stack (POP).
Việc PUSH vào Stack sẽ tăng SP lên 1 trƣớc khi dữ liệu vào.
Việc POP từ Stack ra sẽ lấy dữ liệu ra trƣớc rồi giảm SP đi 1.
2.3.4.4 Hai con trỏ dữ liệu DPTR (Data Pointer)
Data Pointer đƣợc để truy xuất bộ nhớ mà ngoài hoặc bộ nhớ dữ liệu ngoài, nó
là hai thanh ghi 16 bit mà byte thấp là DP0L ở địa chỉ 82H còn byte cao là DP0H ở địa
chỉ 83H, 84H (DP1L là byte thấp) và 85H (DP1H là byte cao). Để đƣa nội dung 55H
vào RAM ngoại có địc chỉ 1000H ta dùng 3 lệnh sau:
MOV A,#55H
MOV DPTR,#1000H
MOVX @ DPTR,A
Lệnh thứ nhất dùng sự định vị trực tiếp đƣa hằng số 55H vào A. Lệnh thứ hai
cũng tƣơng tự lệnh thứ nhất đƣa hằng số dữ liệu 1000H vào trong DPTR. Lệnh cuối
cùng dùng sự định vị gián tiếp để chuyển dịch giá trị 55H trong A vào vùng nhớ RAM
ngoại nằm trong DPTR.
2.3.4.5 Các thanh ghi Port (Port Register):
Các Port 0, Port 1, Port 2, Port 3 có các địa chỉ tƣơng ứng 80H, 90H, A0H,
B0H. Các Port 0, Port 1, Port 2, Port 3 không còn tác dụng xuất nhập nữa nếu bộ nhớ
ngoài đƣợc dùng hoặc một vài cá tính đặc biệt của AT89S8252 đƣợc dùng (nhƣ
Interrupt, Port nối tiếp,...). Do vậy chỉ còn có Port 1 có tác dụng xuất nhập I/O.
Tất cả các Port đều có bit địa chỉ, do đó nó có khả năng giao tiếp với bên ngoài
mạnh mẽ.
2.3.4.6 Các thanh ghi Timer (Timer Register):
AT89S8252 chứa 3 bộ định thời / đếm 16 bit đƣợc dùng cho việc định thời
hoặc đếm sự kiện. Timer 0 ở địa chỉ 8AH (TL0 là byte thấp) và 8CH (TH0 là byte
cao). Timer 1 ở địa chỉ 8BH (TL1 là byte thấp) và 8DH (TH1 là byte cao). Timer 2 ở
địa chỉ CCH (TL2 là byte thấp) và CDH (TH2 là byte cao).
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 17
Hoạt động của Timer 0 và Timer 1 của AT89S8252 thì giống nhƣ hoạt động
của Timer 0 và Timer 1 của AT89C51. Hoạt động của Timer 0 và Timer 1 đƣợc
đặt bởi thanh ghi Timer Mode (TMOD) ở địa
chỉ
89H
và thanh ghi điều khiển Timer
(TCON) ở địa chỉ 88H. Hoạt động của Timer 2 đƣợc đặt bởi các thanh ghi
T2MOD ở địa chỉ C9H và thanh ghi điều khiển T2CON ở địa chỉ C8H. Các Timer
đƣợc bàn chi tiết ở phần sau.
2.3.4.7 Các thanh ghi Port nối tiếp (Serial Port Register):
AT89S8252 chứa một Port nối tiếp trên Chip cho việc truyền thông tin với
những thiết bị nối tiếp nhƣ là những thiết bị đầu cuối, modem, hoặc để giao tiếp IC
khác với những bộ biếm đổi A/D, những thanh ghi di chuyển, RAM,... Thanh ghi đệm
dữ liệu nối tiếp SBUF ở địc chỉ 99H giữ cả dữ liệu phát lẫn dữ liệu thu. Việc ghi lên
SBUF để LOAD dữ liệu cho việc truyền và đọc SBUF để truy xuất dữ liệu cho việc
nhận những mode hoạt động khác nhau đƣợc lập trình thông qua thanh ghi diều khiển
Port nối tiếp SCON.
2.3.4.8 Các thanh ghi ngắt (Interrupt Register):
AT89S8252 có hai cấu trúc ngắt ƣu tiên, 6 bộ nguồn ngắt. Những Interrupt bị
mất tác dụng sau khi hệ thống reset (bị cấm) và sau đó đƣợc cho phép ghi lên thanh
ghi cho phép ngắt IE (Interrupt Enbale Register) ở địa chỉ A8H. Mức ƣu tiên đƣợc đặt
vào thanh ghi ƣu tiên ngắt IP (Interrupt Priority Level) tại địa chỉ B8H. Cả hai thanh
ghi trên đều có bit địa chỉ.
Vị trí các bit nhƣ sau:
EA - ET2 ES ET1 EX1 ET0 EX0
Bit = 1 cho phép.
Bit = 0, không cho phép.
Chức năng của từng bit nhu sau:
Bảng 2.4: Tóm tắt thanh ghi IE (Interrupt Register)
Bit Vị trí Mô tả
EA IE.7
Không cho phép tất cả các ngắt. Nếu EA=0, không
cho phép ngắt, nếu EA=1 mỗi nguồn ngắt sẽ đƣợc
kích hoạt hay tắt bởi việc thiết lập hay xóa các bit cho
phép của nó.
- IE.6 Reserved
ET2 IE.5 Bit cho phép Timer 2 ngắt
ES IE.4 Bit cho phép ngắt SPI và UART
ET1 IE.3 Bit cho phép Timer 1 ngắt.
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 18
EX1 IE.2 Bit cho phép ngắt ngoài 1
ET0 IE.1 Bit cho phép Timer 0 ngắt.
EX0 IE.0 Bit cho phép ngắt ngoài 0
2.3.4.9 Thanh ghi điều khiển nguồn PCON (Power Control Register):
Thanh ghi PCON không có bit định vị. Nó ở địa chỉ 87H bao gồm các bit tổng
hợp. Các bit PCON đƣợc tóm tắt nhƣ sau:
Bảng 2.5: Tóm tắt thanh ghi PCON
Bit Ký hiệu Mô tả bit
7 SMOD
Bit tăng gấp đôi tốc độ baud; khi đƣợc đặt lên 1 thì tốc độ
baud đƣợc tăng gấp đôi trong chế độ cổng nối tiếp 1, 2 hoặc
3.
6 - Không đƣợc định nghĩa.
5 - Không đƣợc định nghĩa.
4
POF
Cờ ngắt nguồn (Power Off Flag). POF = 1 khi nguồn tăng.
POF có thể set và reset bằng phần mềm điều khiển, không bị
ảnh hƣởng bởi reset.
3 GF1 Cờ đa dụng (General Purpose Flag), bit 1.
2 GF0 Cờ đa dụng, bit 0.
1 PD
Chế độ tắt nguồn (Power Down); đƣợc đặt lên 1 để kích
hoạt chế độ tắt nguồn, chỉ thoát khi bị xoá về 0.
0 IDL
Chế độ nghĩ; đƣợc đặt lên 1 để kích hoạt chế độ nghĩ, chỉ
thoát khi có ngắt hoặc reset hệ thống.
Các bit điều khiển Power Down và Idle có tác dụng chính trong tất cả các IC
MSC-51 nhƣng chỉ đƣợc thi hành trong sự biên dịch của CMOS.
Chế độ nghỉ Idel: Lệnh đặt bit IDL lên 1 sẽ là lệnh cuối cùng đƣợc thực thi
trƣớc khi
vào chế độ nghỉ. Trong chế độ nghỉ, tín hiệu xung nhịp bên trong không
cung cấp cho
CPU mà chỉ cung cấp cho các chức năng ngắt, định thì và cổng nối
tiếp. Trạng thái CPU và tất cả nội dung các thanh ghi đƣợc giữ nguyên. Các chân ở
các cổng cũng giữ nguyên mức logic của chúng. Tín hiệu ALE và
đƣợc giữ ở mức
cao. Chế độ nghỉ bị kết thúc bởi bất cứ ngắt nào đƣợc cho phép hoặc bởi reset hệ
thống. Cả hai điều kiện này xoá bit IDL về 0.
Chế độ tắt nguồn Power Down: Lệnh đặt bit PD lên 1 sẽ là lệnh cuối cùng
đƣợc thực thi trƣớc khi vào chế độ tắt nguồn.Trong chế độ tắt nguồn:
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 19
Dao động trên chip bị dừng.
Tất cả các chức năng bị dừng.
Tất
cả
các
nội dung của RAM trên chip đƣợc giữ nguyên.
Các chân ở cổng cũng giữ nguyên các mức logic của chúng.
Tín hiệu ALE và đƣợc giữ ở mức thấp.
Cách duy nhất thoát khỏi chế độ này là reset hệ thống.
Trong chế độ tắt nguồn, Vcc có thể thấp cỡ 2V. Chú ý là chỉ có thể hạ Vcc
sau khi đã vào chế độ tắt nguồn và phục hồi V
cc
về 5V ít nhất 10 chu kỳ dao động
trƣớc khi chân RST xuống thấp lần nữa (khi rời
khỏi
chế
độ tắt nguồn).
2.3.4.10 Thanh ghi điều khiển bộ nhớ và kiểm soát giờ (WMCON)
Thanh ghi WMCON (Watchdog And Memory Control Register) ở địa chỉ 96H
chứa các bit điều khiển cho Watchdog Timer đƣợc trình bày ở bảng sau. Các bit
EEMEN và EEMWE đƣợc sử dụng để lựa chọn 2 KB trên chip EEPROM và có thể
ghi byte. Bit DPS đƣợc sử dụng để lựa chọn 1 trong 2 thanh ghi con trỏ dữ liệu.
Bảng 2.6: Thanh ghi điều khiển bộ nhớ và Watchdog
Bit Ký hiệu Chức năng
7
6
5
PS2
PS1
PS0
Khi tất cả 3 bit này đƣợc đặt về “0”, định thời Watchdog có
chu kỳ là 16s, khi tất cả 3 bit này đặt lên “1”, định thời
Watchdog có chu kỳ 2048s
4 EEMWE
Bit ghi bộ nhớ dữ liệu EEPROM (EEPROM Data Memory
Enable). Bit này đƣợc đặt lên “1” trƣớc khi byte đầu tiên ghi
lên chip EEPROM bằng lệnh MOVX. Nên dùng phần mềm
sử dụng đặt bit này về “0” sau khi EEPROM ghi xong.
3 EEMEN
Bit Truy Nhập Eeprom Bên Trong (Internal Eeprom Asscess
Enable).Khi EEMEN = 1, lệnh MOVX với con trỏ dữ liệu
DPTR truy cập EEPROM thay vì là truy cập bộ nhớ dữ liệu
bên ngoài. Khi EEMEN = 0, lệnh MOVX với DPTR truy cập
dữ liệu bên ngoài.
2 DSP
Bit chọn thanh ghi con trỏ dữ liệu (Data Pointer Register
Select). Khi DPS = 0 chọn băng đầu tiên của thanh ghi con
trỏ dữ liệu DP0. Khi DSP = 1 chọn băng thứ hai PD1.
1
WDTRST
RDY/
Bit reset định thời watchdog và cờ báo Ready/
của
EEPROM (Watchdog Timer Reset and EEPROM
Ready/
Flag). Mỗi lần bit này đƣợc đặt lên 1 bằng phần
mềm thì sẽ có một xung phát ra để reset định thì watchdog.
Khi đó, bit WDTRST sẽ tự động reset về 0 trong chu kỳ lệnh
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 20
kế tiếp. Bit WDTRST là bit chỉ dùng để ghi. Bit này cũng là
cờ báo sẵn sàng/bận RDY/
dùng trong bộ nhớ chỉ đọc
trong suốt quá trình ghi EEPROM. RDY/
= 1, EEPROM
sẵn sàng để đƣợc lập trình. Trong khi hoạt động lập trình
đang đƣợc thực hiện, bit RDY/
sẽ bằng “0” và tự động
reset về “1” khi lập trình kết thúc.
0 WDTEN
Bit cho phép định thời watchdog (Watchdog Timer Enable
Bit). WDTEN = 1 cho phép định thời watchdog, WDTEN = 0
không cho phép định thời watchdog
2.3.4.11 Thanh ghi giao tiếp nối tiếp bên ngoài SPI (Serial Peripheral
Interface)
Bit trạng thái và điều khiển cho SPI đƣợc chứa trong thanh ghi SPCR ở địa
chỉ D5H trình bày ở bảng 2.6 và SPSR ở địa chỉ AAH trình bày ở bảng 2.7. Các bit dữ
liệu SPI chứa trong thanh ghi SPDR ở địa chỉ 86H. Thanh ghi dữ liệu SPI sẽ ghi dữ
liệu trong suốt quá trình truyền dữ liệu nối tiếp đặt vào bit WCOL (Write Collition)
trong thanh ghi SPSR. Thanh ghi SPDR là bộ đệm đôi để ghi và giá trị trong SPDR
không bị thay đổi khi reset.
Bảng 2.7: Thanh ghi điều khiển SPI
Bit Ký hiệu Chức năng
7 SPIE Bit cho phép ngắt SPI (SPI Interrupt Enable). Bit này cùng với bit
ES trong thanh ghi IE bằng “1” cho phép ngắt SPI. SPIE bằng “0”
không cho phép ngắt SPI.
6 SPE Bit cho phép SPI (SPI Enable). SPI = 1 cho phép kênh SPI và kết
nối
, MOSI, MISO và SCK đến các chân P1.4, P1.5, P1.6 và
P1.7. SPI = 0 không cho phép kênh SPI.
5 DORD DORD = 1 chọn truyền dữ liệu thứ nhất LSB. DORD = 0 chọn
truyền dữ liệu thứ nhất MSB.
4 MSTR MSTR = 1 chọn kiểu Master SPI. MSTR = 0 chọn kiểu Slave SPI.
3 CPOL Khi CPOL = 1, SCK ở mức cao khi ở chế độ nghỉ. Khi CPOL =
0, SCK ở mức thấp khi không đƣợc truyền thông tin.
2 CPHA Bit CPOL và bit CPHA điều khiển xung clock và dữ liệu lien
quan giữa Master và Slave.
1
0
SPR0
SPR1
Hai bit này điều khiển tốc độ SCK của thiết bị kết nối Master.
Mối quan hệ giữa SCK và tần số F
OSC
là:
SPR1 SPR0 SCK = F
OSC
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 21
0 0 4
0 1 16
1 0 64
1 1 128
Bảng 2.8: Thanh ghi trạng thái SPI
Bit Ký hiệu Chức năng
7 SPIF Cờ ngắt SPI (SPI Interrupt Flag). Khi sự truyền dữ liệu nối tiếp
hoàn tất, bit SPIF đƣợc đặt và một xung ngắt phát ra nếu SPIE = 1
và ES = 1.
6 WCOL Bit WCOL đƣợc đặt nếu thanh ghi dữ liệu SPI đƣợc ghi trong khi
dữ liệu đƣợc truyền. Trong khi truyền dữ liệu, kết quả đọc của
thanh ghi SPDR có thể không đúng và quá trình ghi không bị ảnh
hƣởng.
2.4 TÓM TẮT TẬP LỆNH CỦA AT89S8252
Các chƣơng trình đƣợc cấu tạo từ nhiều lệnh , chúng đƣợc xây dựng logic,sự
nối tiếp của các lệnh đƣợc nghĩ ra một cách hiệu quả và nhanh,kết quả của chƣơng
trình thì khả quan.
Tập lệnh họ MSC-51 đƣợc sự kiểm tra của các mode định vị và các lệnh của
chúng có các Opcode 8 bit.Điều này cung cấp khả năng 2
8
=256 lệnh đƣợc thi hành và
một lệnh không đƣợc định nghĩa. Vài lệnh có 1 hoặc 2 byte bởi dữ liệu hoặc địa chỉ
thêm vào Opcode. Trong toàn bộ các lệnh có 139 lệnh 1 byte,92 lệnh 2 byte và 24 lệnh
3 byte.
2.4.1 Các chế độ định vị ( addressing mode )
Các mode định vị là một bộ phận thống nhất của tập lệnh mỗi mày tính. Chúng
cho phép định rõ nguồn hoặc nơi gửi tới của dữ liệu ở các đƣờng khác nhau tùy thuộc
vào trạng thái của lập trình. AT89S8252 có 8 mode định vị đƣợc dùng nhƣ sau:
Thanh ghi.
Trực tiếp.
Gián tiếp.
Tức thời.
Tƣơng đối.
Tuyệt đối.
Dài.
Định vị.
2.4.1.1 Sự định vị thanh ghi ( Register Addressing)
Với cách định địa chỉ này ngƣời ta sử dụng các thanh ghi để chứa dữ liệu.
Ngƣời ta đặt toán hạng (dữ liệu) trong thanh ghi và xử lý nó bằng cách tham chiếu
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 22
thanh ghi (bằng tên) trong lệnh. Khi sử dụng các thanh ghi thông dụng đƣợc hiểu
ngầm theo ngữ cảnh của lệnh thì thanh ghi đó không cần các bit mã hóa, tuy nhiên
với các thanh ghi khác (R0 – R7) thì cần thêm các bit mã hóa trong lệnh.
Có 4 dãy thanh ghi 32 byte đầu tiên của RAM dữ liệu trên Chip địa chỉ
00H†1FH, nhƣng tại một thời điểm chỉ có một dãy hoạt động các bit PSW3, PSW4
của từ trạng thái chƣơng trình sẽ quyết định dãy nào hoạt động. Các lệnh để định vị
thanh ghi đƣợc ghi mật mã bằng cách dùng bit trọng số thấp nhất của Opcode lệnh để
chỉ một thanh ghi trong vùng địa chỉ theo logic này. Nhƣ vậy 1 mã chức năng và địa
chỉ hoạt động có thể đƣợc kết quả để tạo thành một lệnh ngắn 1 byte nhƣ sau:
n n n
2.4.1.2 Sự định địa chỉ trực tiếp ( Direct Addressing )
Sự định địa chỉ trực tiếp có thể truy xuất bất kỳ giá trị nào trên Chip hoặc thanh
ghi phần cứng trên Chip. Một byte địa chỉ trực tiếp đƣợc đƣa vào Opccode để định rõ
vị trí đƣợc dùng nhƣ sau:
Tùy thuộc các bit bậc cao của địa chỉ trực tiếp mà 1 trong 2 vùng nhớ đƣợc
chọn. Khi bit 7 = 0, thì địa chỉ trực tiếp ở trong khoảng 0÷127 (00H÷7FH) và 128 vị trí
nhớ thấp của RAM trên Chip đƣợc chọn. Tuy nhiên,
tất
cả
các I/O và các SFR, các
thanh ghi trạng thái, điều khiển có địa chỉ trong khoảng 80H – FFH. Khi MSB của địa
chỉ trực tiếp là 1 thì truy cập đến các SFR. Thí dụ cổng P0 và P1 có địa chỉ trực tiếp
tƣơng ứng là 80H và 90H. Không nhất thiết nhớ các địa chỉ này vì trình hợp ngữ
cho phép và hiểu các viết tắt gợi nhớ cho chúng (ví dụ P0 chỉ Port 0, TMOD chỉ
thanh ghi chế độ timer, …).
2.4.1.3 Sự định vị địa chỉ gián tiếp ( Indirect Addressing)
Sự định vị địa chỉ gián tiếp đƣợc tƣợng trƣng bởi ký hiệu @ đƣợc đặt trƣớc R0,
R1 hay DPTR. R0 và R1 có thể hoạt động nhƣ một thanh ghi con trỏ mà nội dung của
nó cho biết một địa chỉ trong RAM nội ở nơi mà dữ liệu đƣợc ghi hoặc đƣợc đọc. Bit
có trọng số nhỏ nhất của Opcode lệnh sẽ xác định R0 hay R1 đƣợc dùng con trỏ
Pointer.
Opcode
Opcode
Direct Addressing
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 23
i
Ví dụ để đƣa nội dung 60 H vào RAM nội tại địa chỉ 50 H ta làm nhƣ sau:
MOV R1, #50H
MOV @R1, 60H
2.4.1.4 Sự định vị địa chỉ tức thời (Immediate Addressing)
Khi toán hạng nguồn là hằng số chứ không phải là biến thì có thể đƣa hằng
số vào lệnh nhƣ byte dữ liệu “tức thời”. Sự định địa chỉ tức thời đƣợc tƣợng trƣng bởi
ký hiệu # đƣợc đứng trƣớc 1 hằng số,1 biến ký hiệu hoặc 1 biểu thức số học đƣợc sử
dụng bởi các hằng , các ký hiệu, các hoạt động do ngƣời điều khiển. Trình biên dịch
tính toán giá trị hay thay thế dữ liệu tức thời. Byte lệnh thêm vào chứa trị số dữ liệu
tức thời nhƣ sau:
Ví dụ:
MOV A, #12 <= Đƣa trực tiếp số thập phân 12 vào A
MOV A, #10 <= Đƣa trực tiếp số Hex 10H (16D) vào A
MOV A, #000100110B <= Đƣa trực tiếp số nhị phân này vào A
2.4.1.5 Sự định vị địa chỉ tƣơng đối
Sự định địa chỉ tƣơng đối chỉ sử dụng với những lệnh nhảy nào đó. Một địa chỉ
tƣơng đối ( hoặc Offset ) là 1 giá trị 8 bit mà nó đƣợc cộng vào bộ đếm chƣơng trình
PC để tạo thành địa chỉ 1 lệnh tiếp theo đƣợc thực thi. Phạm vi của sự nhảy nằm trong
khoảng -128 † 127. Offset tƣơng đối đƣợc gắn vào lệnh nhƣ 1 byte thêm vào nhƣ sau:
Opcode
Opcode
Immediate Data
Opcode
Relative Offset
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 24
Sự định vị tƣơng đối đem lại thuận lợi cho việc cung cấp mã vị trí độc lập,
nhƣng bất lợi là chỉ nhảy ngắn trong phạm vi -128 ÷ 127 byte.
2.4.1.6 Sự định địa chỉ tuyệt đối ( Absolute Addressing)
Sự định địa chỉ tuyệt đối đƣợc dùng với các lệnh ACALL và AJMP. Các lệnh 2
byte cho phép phân chia trong trang 2K đang lƣu hành của bộ nhớ mã của việc cung
cấp 11 bit thấp nhất để xác định địa chỉ trong trang 2K (A0÷A10 gồm A10÷A8 trong
Opcode và A7†A0 trong byte ) và 5 bit cao để chọn trang 2K (5 bit cao đang lƣu hành
trong bộ đếm chƣơng trình là 5 bit Opcode).
Sự định vị tuyệt đối đem lại thuận lợi cho các lệnh ngắn ( 2 byte ), nhƣng bất
lợi trong việc giới hạn phạm vi nơi gởi đến và cung cấp mã có vị trí độc lập.
2.4.1.7 Sự định vị địa chỉ dài ( Long Addressing )
Sự định vị dài đƣợc dùng với lệnh LCALL và LJMP. Các lệnh 3 byte này bao
gồm 1 địa chỉ nơi gửi tới 16 bit đầy đủ là 2 byte và 3 byte của lệnh.
Ƣu điểm của sự định dài là vùng nhớ mã 64K có thể đƣợc dùng hết, nhƣợc
điểm là các lệnh đó dài 3 byte và vị trí lệ thuộc. Sự phụ thuộc vào vị trí sẽ bất lợi bởi
chƣơng trình không thể thực thi tại địa chỉ khác.
2.4.1.8 Sự định địa chỉ phụ lục (Index Addressing )
Sự định địa chỉ phụ lục dùng 1 thanh ghi cơ bản ( cũng nhƣ bộ đếm chƣơng
trình hoặc bộ đếm dữ liệu ) và Offset ( thanh ghi A) trong sự hình thành 1 địa chỉ lien
quan bởi lệnh JMP hoặc MOVC.
Base Register Offset Effective Address
Addr 10 ÷ Addr 8
Opcode
Addr 7 ÷ Addr 0
Opcode
Addr 15 ÷ Addr 8
Addr 7 ÷ Addr 0
PC (or DPTR)
ACC
Điều khiển thiết bị qua PC Chƣơng 2: Tìm hiểu VDK AT89S8252
Trang 25
Index Addressing
2.4.2 Các kiểu lệnh (instruction types)
AT89S8252 chia ra 5 nhóm lệnh chính:
Các lệnh số học.
Lệnh logic.
Dịch chuyển dữ liệu.
Lý luận.
Rẽ nhánh chƣơng trình.
Từng kiểu lệnh đƣợc mô tả nhƣ sau:
2.4.2.1 Các lệnh số học (Arithmetic Instrustion):
ADD A, <src, byte>
ADD A, Rn : (A) ← (A) + (Rn)
ADD A, direct : (A) ← (A) + (direct)
ADD A, @ Ri : (A) ← (A) + ((Ri))
ADD A, # data : (A) ← (A) + # data
ADDC A, Rn : (A) ← (A) + (C) + (Rn)
ADDC A, direct : (A) ← (A) + (C) + (direct)
ADDC A, @ Ri : (A) ← (A) + (C) + ((Ri))
ADDC A, # data : (A) ← (A) + (C) + # data
SUBB A, <src, byte>
SUBB A, Rn : (A) ← (A) – (C) – (Rn)
SUBB A, direct : (A) ← (A) – (C) – (direct)
SUBB A, @ Ri : (A) ← (A) – (C) – ((Ri))
SUBB A, # data : (A) ← (A) – (C) – # data
INC <byte>
INC A : (A) ← (A) + 1
INC direct : (direct) ← (direct) + 1
INC Ri : ((Ri)) ← ((Ri)) + 1
INC Rn : (Rn) ← (Rn) + 1
INC DPTR : (DPTR) ← (DPTR) + 1
DEC <byte>
DEC A : (A) ← (A) – 1
DEC direct : (direct) ← (direct) – 1
DEC @ Ri : ((Ri)) ← ((Ri)) – 1