Chương 1: Introduction to 89S52Chế độ địa chỉ giỏn tiếp thanh ghi Vớ dụ: Hãy viết chơng trình để sao chép một khối 10 byte dữ liệu từ vị trí ngăn nhớ RAM bắt đầu từ 35H vào các vị trí n
Trang 1KỸ THUẬT VI ĐIỀU KHIỂN
GV: LÊ TRỌNG LUÂN
0937351983 Khoa Điện – Điện Tử Trường Đại Học Kinh Tế Kỹ Thuật Công Nghiệp
Trang 2KỸ THUẬT VI ĐIỀU KHIỂN
NỘI DUNG CHƯƠNG TRÌNH
Chương 1: Introduction to 89S52
Chương 2: AT89S52 Assembly Programming
Chương 3:Data Structures and Subroutine Calls
Chương 4: Operation Modes and Memory Expansion
Chương 5: Interrupts and Resets
Chương 6: Parallel I/O Ports
Chương 7: Timer/Counter Functions
Chương 8: Serial Communication Interface
Chương 9: LCD,ADC and SENSOR Interface
Trang 3Chương 1:
Introduction to 89S52
Trang 4Arithmetic logic unit
common bus
memory
output input
Trang 5The processor (bộ xử lý)
- Registers: bộ nhớ trong của Processcor
- Arithmetic logic unit (ALU)
- Control unit (CU)
PC- thanh ghi bộ đếm chương trình sẽ luôn lưu giữ địa chỉ của lệnh tiếp theo sẽ được thực hiện
The Microprocessor (bộ vi xử lý)
A processor implemented on a very large scale integration (VLSI) chip.
Peripheral chips are needed to construct a product
The Microcontroller (bộ vi điều khiển)
The processor and peripheral functions implemented on one VLSI chip
Trang 6Chương 1: Introduction to 89S52
Features of the AT89S52 microcontroller
8K Bytes of In-System Programmable (ISP) Flash Memory
– Endurance: 1000 Write/Erase Cycles
4.0V to 5.5V Operating Range
Fully Static Operation: 0 Hz to 33 MHz
Three-level Program Memory Lock
256 x 8-bit Internal RAM
32 Programmable I/O Lines
Three 16-bit Timer/Counters
Eight Interrupt Sources
Full Duplex UART Serial Channel
Low-power Idle and Power-down Modes
Interrupt Recovery from Power-down Mode
Watchdog Timer
Dual Data Pointer
Microcontroller AT89S52
Trang 8Máy Fax
Lò vi sóng Máy sao chụp Máy in lazer Máy in màu Máy nhắn tin
Máy tính hành trìnhĐiều khiển động cơ
Túi đệm khíThiết bị ABS
Đo lờng
Hệ thống bảo mậtĐiều khiển truyền tinGiải trí
Điều hoà nhiệt độ
Mở cửa không cần chỡakhoá
Trang 9Semiconductor memory
Random-access memory (RAM)
Read-only memory (ROM):
Trang 12Chương 1: Introduction to 89S52
High-level language
Cần có chương trình dịch từ ngôn ngữ cấp cao về ngôn ngữ máy.
Trang 13The AT89S52 Registers
PC PSW Parity Non Over Lựa chọ băng thanh ghi RS1:RS0
Trang 14Chương 1: Introduction to 89S52
Khi RESET
Microcontroller AT89S52
Trang 15Memory Addressing
Bộ nhớ bao gồm các ô nhớ Mỗi ô nhớ có địa chỉ xác định
Trang 16#
@
B
D or nothingH
‘xxx’
Trực tiếpĐịa chỉ gián tiếp
Trang 17Chế độ địa chỉ thanh ghi
MOV A, RO ; Sao nội dung thanh ghi RO vào thanh ghi A
MOV R2, A ; Sao nội dung thanh ghi A vào thanh ghi R2
ADD A; R5 ; Cộng nội dung thanh ghi R5 vào
Chế độ địa chỉ trực tiếp
1 Các ngăn nhớ từ 00 đến 1FH đợc gán cho các băng thanh ghi và ngăn xếp
2 Các ngăn nhớ từ 20H đến 2FH đợc dành cho không gian đánh địa chỉ theo bit
để lu các dữ liệu 1 bit
3 Các ngăn nhớ từ 30H đến 7FH là không gian để lu dữ liệu có kích thớc 1byte.MOV R0, 40H ; Lu nội dung của ngăn nhớ 40H của RAM vào R0
MOV 56H, A ; Lu nội dung thanh ghi A vào ngăn nhớ 56H của RAM
MOV R4, 7FH ; Chuyển nôi dung ngănnhớ 7FH của RAM vào R4
Trang 18Chương 1: Introduction to 89S52
Chế độ địa chỉ giỏn tiếp thanh ghi
Vớ dụ: Hãy viết chơng trình để sao chép một khối 10 byte dữ liệu từ vị trí ngăn nhớ RAM bắt đầu
từ 35H vào các vị trí ngăn nhớ RAM bắt đầu từ 60H
DJNZ R3, BACK ; Lặp lại cho đến khi sao chép hết 10 byte
Lưu ý: Chỉ thanh ghi R0, R1, DPTR dựng được trong chế độ
Microcontroller AT89S52
Trang 19MOV P1, A ; §Æt cæng P1 lµ ®Çu vµo
BACK: MOV A, P1 ; LÊy gi¸ trÞ X tõ P1
MOVC A, @A + DPTR ; LÊy gi¸ trÞ X tõ b¶ng XSDQ-TABLE
Trang 20Chương 1: Introduction to 89S52
89S52 Instructions
Microcontroller AT89S52
Trang 2389S52 Instructions
Trang 26KỸ THUẬT VI ĐIỀU KHIỂN
Chương 2 AT89S52 Assembly
Programming
Trang 27trình (do các mạch điện riêng biệt thực hiện).
Bộ nhớ ROM được tích hợp trong chip Vi điều khiển với dung lượng tùy vào chủng loại cần dùng, chẳng hạn đối với 89S52 là 8KByte, với 89S53 là 12KByte
Bộ nhớ bên trong Vi điều khiển 89Sxx là bộ nhớ Flash ROM cho
phép xóa bộ nhớ ROM bằng điện và nạp vào chương trình mới cũng bằng điện và có thể nạp xóa nhiều lần
Bộ nhớ ROM được định địa chỉ theo từng Byte, bắt đầu từ địa chỉ
0000H, khi viết chương trình cần chú ý đến địa chỉ lớn nhất trên
ROM, chương trình được lưu sẽ bị mất khi địa chỉ lưu vượt qua vùng này Ví dụ: AT89S52 có 8KByte bộ nhớ ROM nội, địa chỉ lớn nhất là
1FFFH, nếu chương trình viết ra có dung lượng lớn hơn 8KByte các
byte trong các địa chỉ lớn hơn 1FFFH sẽ bị mất
Ngoài ra Vi điều khiển còn có khả năng mở rộng bộ nhớ ROM với việc giao tiếp với bộ nhớ ROM bên ngoài lên đến 64KByte(địa chỉ từ 0000H
Trang 28Chương 2: AT89S52 Assembly Programming
RAM
Microcontroller AT89S52
Trang 29RAM
Trang 31Bộ nhớ RAM dùng làm môi trường xử lý thông tin, lưu trữ các kết quả trung gian và kết quả cuối cùng của các phép toán, xử lí thông tin Nó cũng dùng để tổ chức các vùng đệm dữ liệu, trong các thao tác thu phát, chuyển đổi dữ liệu
RAM nội trong Vi điều khiển được tổ chức như sau: Các vị trí trên RAM được định địa chỉ theo từng Byte bằng các số thập lục phân (số Hex)
Các bank thanh ghi có địa chỉ 00H đến 1FH
210 vị trí được định địa chỉ bit các vị trí RAM bình thường Các thanh ghi có chức năng đặc biệt có địa chỉ từ 80H đến FFH
Các byte RAM 8 bit của vi điều khiển được gọi là "ô
nhớ", nếu các ô nhớ có chức năng đặc biệt thường
được gọi là "thanh ghi", nếu là bit thì được gọi là "bit nhớ".
Trang 32Chương 2: AT89S52 Assembly Programming
RAM
Các bank thanh ghi
Các bank thanh ghi có địa chỉ byte từ 00H đến 1FH, có 8 thanh ghi trong mỗi bank, các thanh ghi được đặt tên từ R0-R7, các thanh ghi này được đặt mặc định trong bank 1 Có 4 bank thanh ghi và tại mỗi thời
điểm chỉ có một bank thanh ghi được truy xuất với các thanh ghi từ R0 đến R7, để thay đổi việc truy xuất các thanh ghi trên các bank thanh ghi, người dùng phải thay đổi giá trị các bit chọn bank trong thanh ghi trạng thái PSW bằng các câu lệnh trong chương trình
Các lệnh dùng các thanh ghi từ R0 đến R7 mất khoảng không gian lưu trữ ít hơn và thời gian thực hiện nhanh hơn so với các lệnh dùng các ô nhớ RAM khác, ngoài ra các thanh ghi này còn có thêm một số chức năng đặc biệt khác, vì lí do này các dữ liệu sử dụng thường
thường được người viết chương trình đưa vào lưu trong các thanh ghi này
Ngoài ra, có thể truy xuất thanh ghi trên các bank thanh ghi như với các ô nhớ bình thường khác Ví dụ: nguời dùng có thể truy xuất đến
thanh ghi R7 bằng ô nhớ 07H
Microcontroller AT89S52
Trang 33Vùng RAM truy xuất từng bit
Trên RAM nội có 210 ô nhớ bit được định địa chỉ và có thể truy xuất đến từng bit, các bit nhớ này cũng được định địa chỉ bằng các số thập lục phân- số Hex Trong đó có 128 bit nằm trong các ô nhớ có địa chỉ byte từ 20H đến 2FH,
các bit nhớ còn lại chứa trong nhóm thanh ghi có chức năng đặc biệt
Mặc dù các bit nhớ và ô nhớ (byte) cùng được định bằng số Hex, tuy nhiên chúng sẽ được nhận dạng là địa chỉ bit hay địa chỉ byte thông qua các câu lệnh tương ứng dành cho các bit nhớ hoặc các ô nhớ này.
Ví dụ:
mov 05H,#10111111B ;>>> lệnh này thiết lập
giá trị cho ô nhớ có địa chỉ là 05H
JB 05H,nhan01 ;>>> lệnh này liên quan
Trang 34Chương 2: AT89S52 Assembly Programming
RAM
+ Vùng RAM bình thường
Vùng RAM này có địa chỉ byte từ 30H đến 7FH, dùng để lưu trữ dữ liệu, được truy xuất theo từng byte.
+ Các thanh ghi có chức năng đặc biệt
Các thanh ghi này được định địa chỉ byte, một số được định thêm địa chỉ bit, có
địa chỉ của các thanh ghi này nằm trong
khoảng 80H đến FFH Các thanh ghi đặc biệt
Microcontroller AT89S52
Trang 35Các thanh ghi có địa chỉ 80H, 90H, A0H, B0H:
Đây là các thanh ghi kiểm tra và điều khiển mức logic của các Port, có thể truy xuất và xác lập các thanh ghi này với địa chỉ byte hoặc tên riêng lần lượt là P0, P1, P2, P3 tương ứng với các Port xuất Chẳng hạn để tất cả các chân của Port 0 lên mức logic 1, cần làm cho các bit của thanh ghi có địa chỉ 80H lên mức 1.
Con trỏ ngăn xếp SP: địa chỉ 81H
Con trỏ ngăn xếp SP là một thanh ghi có địa chỉ 81H, giá trị của nó được tăng,giảm tự động khi thực hiện các lệnh PUSH, CALL,POP con trỏ SP dùng quản lí và xử lí các nhóm
dữ liệu liên tục.Giá trị mặc định của SP là 07H.
Con trỏ dữ liệu DPTR.
Con trỏ dữ liệu DPTR là thanh ghi 16 bit duy nhất của Vi điều khiển được tạo thành từ hai thanh ghi DPL (byte thấp-địa chỉ byte 82H) và DPH (byte cao-địa chỉ byte 83H) Hai thanh ghi DPL và DPH có thể truy xuất độc lập bởi người sử dụng Con trỏ dữ liệu DPTR
thường được sử dụng khi truy xuất dữ liệu từ bộ nhớ ROM hoặc bộ nhớ từ bên ngoài.
Trang 36Chương 2: AT89S52 Assembly Programming
Thanh ghi trạng thái chương trình PSW (địa chỉ
PSW.4 D4H RS1 Bit lựa chọn dãy thanh ghi
PSW.3 D3H RS0 Bit lựa chọn dãy thanh ghi
PSW.2 D2H 0V Cờ tràn với phép tính liên quan đến số nhị
phân có dấu
Trang 37Assembly Program Structure
/* The handler for External interrupt 0, which uses somefunction() */
void external0_int (void) interrupt 0
{
somefunction(0);
}
/* the main program function, which also calls somefunction() */
void main (void)
Trang 38Chương 2: AT89S52 Assembly Programming
; chuong trinh viet o day Jmp Start
;=================================
; Cac chuong trinh con viet o day
;=================================
end.
Trang 39;nhảy đến nhã loop khi R0<>0
Label operation operand ; comment
Trang 40Chương 2: AT89S52 Assembly Programming
Assembler Directives a sample
Trang 41Subroutine A
B
A yes
no On-page
connector
Off-page connector
Trang 42Chương 2: AT89S52 Assembly Programming
ASSEMBLER PRAGRAM
LINKER PRAGRAM
OH
myfile.asm
myfile.lst myfile.obj
other obj file
myfile.abs
Trang 43Ví dụ 1: Viết chương trình tính 1+2+…+20 kết quả cất vào 45H
Start
i = 0 sum = 0
i = i + 1 sum = sum + i
i = 20 ? no
yes
Giải:
Mov A,#0 Mov R0,#0 Again:
INC R0 ADD A,R0 CJNE R0,#20,Again Mov 45H,A
Trang 44Chương 2: AT89S52 Assembly Programming
array max < array [i] ?
i i + 1 array max array [i]
yes no
Trang 46Chương 2: AT89S52 Assembly Programming
Ví dụ 3: Viết chương trình tính tổng các số
lẻ 8bit nằm ở địa chỉ 45h đến 58h, sau đó lưu kết quả byte cao ở 61h và byte thấp ở 60h
Microcontroller AT89S52
Start
sum 0 ptr 45 bit 0 of mem[ptr] = 0?
sum sum + [mem[ptr]]
no
Trang 48KỸ THUẬT VI ĐIỀU KHIỂN
Trang 49SP low address
high address
top element
bottom
.
Sp là thanh ghi 8bit Truy cập các ô nhớ từ 08h-FFh
Nguyên tắc LIFO (Last In First Out)
Vào bằng lệnh PUSH => SP=SP+1
Ra bằng lệnh POP => SP=SP-1
Trang 50Chương 3: Data Structures and Subroutine Calls
Vớ dụ 3.1 Hãy biểu diễn ngăn xếp và con trỏ ngăn xếp đối với đoạn chơng trình sau đây Giả thiết vùng ngăn xếp là mặc định
MOV R6, #25HMOV R1, #12HMOV R4, #0F3HPUSH 6
PUSH 1PUSH 4
Trang 51Ví dụ 3.2: Kh¶o s¸t ng¨n xÕp vµ h·y tr×nh bµy néi dung cña c¸c thanh ghi vµ SP sau khi thùc hiÖn ®o¹n ch¬ng tr×nh sau ®©y:
POP 3 ; LÊy ng¨n xÕp trë l¹i R3 POP 5 ; LÊy ng¨n xÕp trë l¹i R5 POP 2 ; LÊy ng¨n xÕp trë l¹i R2
Trang 52Chương 3: Data Structures and Subroutine Calls
Giới hạn trên của ngăn xếp:
- Ngăn xếp giới hạn trong khoảng 08h-1Fh
Và từ 30H đến 7Fh
- Từ 20H-2FH dùng dự phòng cho bộ nhớ
đánh địa chỉ được theo bit
- Chuyển địa chỉ sang 30h – 7Fh bằng cách: MOV SP, #XX
Microcontroller AT89S52
Trang 5353 12/21/2012 kỹ thuật vi điều khiển
Phân bố không gian nhớ trong RAM
Trang 54Chương 3: Data Structures and Subroutine Calls
Xung đột ngăn xếp và băng thanh ghi 1
Xảy ra khi chương trình muốn sử dụng các băng thanh ghi số 1 lúc đó cả băng thanh ghi và ngăn xếp đều sử dụng chung một
không gian nhớ RAM
Lúc đó ta phải thay địa chỉ sử dụng của
RAM bằng cách “MOV SP,#xx”
Microcontroller AT89S52
Trang 55; Nội dung chương trình
; Trả lại trạng thái chương trình
ret
Trang 56Chương 3: Data Structures and Subroutine Calls
ACall gọi tuyệt đối 2 byte
LCall gọi 3 byte
Microcontroller AT89S52
Trang 57Vai trò của ngăn xếp trong lệnh Call
incoming parameters
return address saved registers local variables
SP
Với lệnh RET thao tac giống lệnh POP đối với các đối tượng
Trang 58Chương 3: Data Structures and Subroutine Calls
Vớ dụ 3.3 Phõn tớch đoạn chương trỡnh sau
ORG 0
MOV A, #55H ; Nạp Avới giá trị 55H
BACK:
MOV P1, A ; Xuất giá trị trong A ra cổng P1
ACALL DELAY ; Giữ chậm
CPL A ; Bù thành ghi A
SJMP BACK ; Tiếp tục thực hiện vô hạn
; - Đây là chơng trình con giữ chậm DELAY
DELAY:
MOV R5, #0FFH ; Nạp R5 = 255 (hay FFH) làm cho bộ đếm
AGAIN: DJNZ R5, AGAIN ; Dừng ở đây cho đến khi R5 = 0
RET ; Trở về
Microcontroller AT89S52
Trang 59Cấu trúc sử dụng lệnh gọi call
; MAIN program calling subroutines
MAIN: LCALL SUBR-1
LCALL SUBR-2 LCALL SUBR-3 HERE: SJMP MAIN
Trang 60Chương 3: Data Structures and Subroutine Calls
Ví dụ 3.4 H·y ph©n tÝch néi dung cña ng¨n xÕp sau khi thùc hiÖn lÖnh LCALL
®Çu tiªn díi ®©y
001 0000 ORG
002 0000 7455 BACK: MOV A, #55H ; N¹p A víi gi¸ trÞ 55H
003 0002 F590 MOV P1, A ; Göi 55H tíi cæng P1
004 0004 120300 LCALL DELAY ; T¹o trÔ thêi gian
005 0007 74AA MOV A, #0AAH ; N¹p A víi gi¸ trÞ AAH
006 0009 F590 MOV P1, A ; Göi AAH tíi cæng P1
007 000B 120300 LCALL DELAY ; T¹o trÔ thêi gian
008 000E 80F0 SJMP BACK ; TiÕp tôc thùc hiÖn
Trang 61Tạo và tính toán thời gian giữ chậm
Thời gian trễ chủ yếu ở vòng lặp
Trang 62Chương 3: Data Structures and Subroutine Calls
Vớ dụ 3.5: Hãy tìm kích thớc của thời gian giữ chậm
trong chơng trình sau, nếu tần số giao động thach anh
là 11.0592MHz.
MOV A, #55H AGAIN: MOV P1, A
ACALL DELAY CPL A
Trang 63hồ liên quan với các lệnh ở ngoài vòng lặp.
Trong ví dụ 3.5 giá trị lớn nhất mà R3 có thể chứa
là 255, do vậy một cách tăng độ trễ là sử dụng lệnh
NOP (không làm gì) trong vòng lặp để tiêu tốn thời
gian một cách đơn giản
Trang 64Chương 3: Data Structures and Subroutine Calls
Vớ dụ 3.6:Hãy tìm độ trễ thời gian cho chơng trình con sau Giả thiết tần số
Microcontroller AT89S52
Trang 65Vớ dụ 3.7: Đối với một chu kỳ máy 1.085s hãy tính thời gian giữ chậm trong chơng trình con sau:
Đối với vòng lặp HERE ta có (4 250) 1.085s = 1085s.
Vòng lặp AGAIN lặp vòng lặp HERE 200 lần, do vậy thời gian trễ là 200
1085s 217000s, nên ta không tính tổng phí Tuy nhiên, các lệnh “MOV
R3, #250” và “DJNZ R2, AGAIN” ở đầu và cuối vòng lặp AGAIN cộng (3
200 1.085s) = 651s vào thời gian trễ và kết quả ta có 217000 + 651 =
217651s = 217.651 miligiây cho tổng thời gian trễ liên quan đến chơng trình con giữ chậm DELAY nói trên
Trang 66KỸ THUẬT VI ĐIỀU KHIỂN
Trang 67Bộ nhớ bán dẫn:
RAM
SRAM DRAM ROM
ROM PROM EPROM EEPROM FLASH
Trang 68Chương 4: Operation Modes and Memory Expansion
A N-1
O 0
O 1
O 2 .
O m-1
Các đường tín hiệu địa chỉ
Các đường tín hiệu dữ liệu
WE
Trang 69Một số bộ nhớ EPROM thông dụng
A0-A10: Tín hiệu địa chỉ
OE: Cho phép đưa dữ liệu ra
Trang 70Chương 4: Operation Modes and Memory Expansion
Trang 71Ví dụ 4.1 Cần sử dụng bao nhiêu IC để xây dựng
bộ nhớ EPROM 512KB cho bộ VĐK có 16 chân địa chỉ 16 chân dữ liệu.
Trang 72Chương 4: Operation Modes and Memory Expansion
Trang 73Khả năng mở rộng bộ nhớ ROM của 89S52
4567
8000h-9FFFhA000h-BFFFhC000h-DFFFhE000h-FFFFh
Trang 74Chương 4: Operation Modes and Memory Expansion
O0 O1 O2 O3 O4 O5 O6
74138
1Y0 1Y1 1Y2 1Y3 2Y0 2Y1 2Y2
E1 A1 A0 E2 74139
Trang 75Ví dụ 4.2 Xây dựng mạch giải mã để chọn các bộ nhớ sau:
The highest three address bits
for each component are:
A2 A1
O0 O1 O2 O3 O4 O5 O6
SRAM1_CS ROM1_CS
E2PROM_CS
SRAM2_CS ROM2_CS
E
A15 A14
Trang 76Chương 4: Operation Modes and Memory Expansion
Giản đồ thời gian ghi đọc
Microcontroller AT89S52
Trang 77Giản đồ thời gian ghi đọc
Trang 78Chương 4: Operation Modes and Memory Expansion
Giản đồ thời gian ghi đọc
Microcontroller AT89S52