Giáo trình Lập trình vi điều khiển

 Các kiểu cấu trúc bộ nhớ

2.2.1. Cấu trúc Von Neumann

Trong cấu trúc Von Neumann chỉ có một vùng địa chỉ tuyến tính bao gồm tất cả

dữ liệu và lệnh điều khiển, độ lớn của vùng địa chỉ phụ thuộc vào chiều dài của bộ

đếm chương trình, nếu không trang bị thêm linh kiện phụ thì việc định địa chỉ bộ nhớ

chương trình và bộ nhớ dữ liệu không độc lập với nhau. Trong cấu trúc này chỉ tồn tại

một bus dữ liệu và một bus địa chỉ để đọc-ghi dữ liệu và đọc lệnh điều khiển chương

trình và không có khả năng thực song song (truy xuất đồng thời bộ nhớ dữ liệu và bộ

nhớ chương trình).

2.2.2. Cấu trúc Harvard

Gồm hai vùng địa chỉ riêng biệt cho bộ nhớ dữ liệu và bộ nhớ chương trình nên

có thể truy xuất song song dữ liệu và lệnh điều khiển, cấu trúc này đặc biệt thích hợp

với các vi điều khiển 16 và 32 bít vì làm tăng tốc độ làm việc. Nếu chỉ có một hệ

thống bus như thường thấy ở vi điều khiển 8 bít thì việc truy xuất bộ nhớ dữ liệu hoặc

bộ nhớ chương trình sẽ được thực hiện thông qua các tín hiệu điều khiển, nếu không

có yêu cầu ghi vào bộ nhớ chương trình thì cấu trúc này còn cho phép tăng tính an

toàn của chương trình.

 

Giáo trình Lập trình vi điều khiển trang 1

Trang 1

Giáo trình Lập trình vi điều khiển trang 2

Trang 2

Giáo trình Lập trình vi điều khiển trang 3

Trang 3

Giáo trình Lập trình vi điều khiển trang 4

Trang 4

Giáo trình Lập trình vi điều khiển trang 5

Trang 5

Giáo trình Lập trình vi điều khiển trang 6

Trang 6

Giáo trình Lập trình vi điều khiển trang 7

Trang 7

Giáo trình Lập trình vi điều khiển trang 8

Trang 8

Giáo trình Lập trình vi điều khiển trang 9

Trang 9

Giáo trình Lập trình vi điều khiển trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 119 trang duykhanh 7360
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Lập trình vi điều khiển", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Lập trình vi điều khiển

Giáo trình Lập trình vi điều khiển
àn phím và thay đổi quá trình nấu tương ứng 
sau đó chấm dứt bằng cách chuyển điều khiển về cho chương trình chính, chương 
trình chính lại tiếp tục từ nơi bị ngắt. Một điểm quan trọng trong ví dụ này là việc 
nhập bằng tay xảy ra một cách không đồng bộ có nghĩa là không biết trước hoặc 
không được điều khiển bằng phần mềm đang chạy trong hệ thống. Đó chính là đặc 
điễm của ngắt. 
Hình 32-06-1 Thực hiện chương trình 
2. Tổ chức ngắt 
Cờ ngắt xảy ra Trình phục vụ ngắt 
vectơ ngắt 
Chương trình hiện hành 
Cách nhìn ngắn gọn của một chương trình thực thi không có ngắt 
Cách nhìn ngắn gọn của một chương trình thực thi có ngắt 
 Bắt đầu trình phục vụ ngắt Kết thúc trình phục vụ ngắt 
101 
Mục tiêu: 
- Hiểu được cấu tạo các thanh ghi của ngắt 
- Biết được chuỗi vòng hoạt động của các ngắt 
- Biết được địa chỉ các thanh ghi ngắt 
- Ứng dụng các thanh ghi để viết chương trình điều khiển 
2.1. Thanh ghi cho phép và không cho phép ngắt 
Mỗi nguồn ngắt được cho phép hoặc không cho phép thông qua thanh ghi chức năng 
đặc biệt có các bit được địa chỉ hóa IE (Interrupt Enable) tại địa chỉ 0A8H. 
Bit Symbol Address 
Mô tả 
(1: cho phép, 0: không cho phép) 
IE.7 EA AFH Cho phép, không cho phép toàn cục 
IE.6 - AEH Không xác định 
IE.5 ET2 ADH Cho phép ngắt do timer 2(có ở 8952) 
IE.4 ES ACH Cho phép ngắt nối tiếp 
IE.3 ET1 ABH Cho phép ngắt do timer1 
IE.2 EX1 AAH Cho phép ngắt do bên ngoài (INT 1) 
IE.1 ET0 A9H Cho phép ngắt do timer0 
IE.0 EX0 A8H Cho phép ngắt do bên ngoài (INT 0) 
2.2. Thanh ghi ưu tiên ngắt 
Khi có nhiều ngắt được cho phép, một trong số các ngắt được chọn ưu tiên cao 
hơn. Nếu một ngắt được chọn ưu tiên nó sẽ làm cho ngắt khác đang thực thi sẽ tạm 
dừng cho đến khi trình phục vụ ngắt ưu tiên kết thúc . Trong một tình huống khác, 
khi hai ngắt xảy ra cùng lúc, ngắt nào có mức ưu tiên cao hơn sẽ làm trước. Ở vi điều 
khiển 89xxx, một chương trình có sử dụng ngắt được chia làm 3 mức: mức nền 
(thường cho chương trình chính), mức ngắt và ưu tiên ngắt và chỉ có một ngắt được 
ưu tiên cao nhất nếu có nhiều ngắt được cho phép. Mỗi một nguyên nhân ngắt riêng 
102 
rẽ được lập trình để có một trong hai mức ưu tiên thông qua thanh ghi chức năng đặt 
biệt IP (interrupt priority). 
Bit 
Symbo
l 
Bit Address 
Description 
(1: ưu tiên, 0: không ưu tiên) 
IP.7 - - Không sử dụng 
IP.6 - - Không sử dụng 
IP.5 ET2 ADH Ưu tiên do ngắt do bộ định thời 2 
IP.4 ES ACH Ưu tiên do ngắt do port nối tiếp 
IP.3 ET1 ABH Ưu tiên do ngắt do bộ định thời 1 
IP.2 EX1 AAH 
Ưu tiên do ngắt do bên ngoài (INT 
1) 
IP.1 ET0 A9H Ưu tiên do ngắt do bộ định thời 0 
IP.0 EX0 A8H 
Ưu tiên do ngắt do bên ngoài (INT 
0) 
2.3. Chuỗi Pooling 
Nếu như có nhiều ngắt cùng xuất hiện đồng thời, chuỗi vòng sẽ xác định ngắt 
nào thực hiện trước. Chuỗi vòng này là: Ngắt ngoài 0, ngắt do bộ định thời 0, ngắt 
ngoài 1, ngắt do bộ định thời 1, ngắt do port nối tiếp, ngắt do bộ định thời 2. 
103 
Hình 32-06-2 Cấu trúc ngắt 8051 
2.4. Vector ngắt 
Khi có sự kiện ngắt (Cờ ngắt) xuất hiện, chương trình ngắt bắt đầu một địa chỉ 
cố định – gọi là vectơ ngắt. 
 Interrupt Flag Interrupt Vector 
System Reset RST 0000h 
External 0 IE0 0003H 
Timer 0 TF0 000BH 
External 1 IE1 0013H 
Timer 1 TF1 001BH 
Serial Port RI, TI 0023H 
Timer2 TF2 & EXF2 
(vđk 8952) 
002BH 
3. Thiết kế ngắt 
Mục tiêu:Viết chương trình sử dụng ngắt 
Dựa vào kích thước của chương trình, ta có 2 mẫu thiết kế như sau: 
104 
Mẫu thiết kế trình phục vụ ngắt có kích thước nhỏ 
Org 0000h 
Ljmp main ; Nhảy qua khỏi đoạn các vectơ ngắt 
Org 00xxh 
ISR_xx: ;Trình phục vụ ngắt 
Reti 
Org 0030h 
 Main: 
End 
Mẫu thiết kế trình phục vụ ngắt có kích thước lớn 
Org 0000h 
Ljmp main ; Nhảy qua khỏi đoạn các vectơ ngắt 
Org 00xxh 
Ljmp ISR_xx ;vùng khai báo các vecto ngắt và 
;dùng l ệnh nhảy đến trình phục vụ ngắt 
Org 0030h 
 Main: 
ISR_xx: ; Các trình phục vụ ngắt 
Reti 
End 
105 
4. Ngắt Timer 
Mục tiêu: 
- Hiểu được hoạt động của ngắt Timer 
- Viết chương trình điều khiển sử dụng các ngắt Timer 
Các ngắt do các bộ Timer xảy ra do sự kiện tràn ở các Timer, khi đó các cờ 
tràn TF0 hoăc TF1 sẽ được đặt bằng 1. Khi ISR được đáp ứng, các cờ TF0 hoăc TF1 
sẽ tự động được xóa bởi phần mềm. 
5. Ngắt ngoài 
Mục tiêu: 
- Hiểu được hoạt động của ngắt ngoài 
- Viết chương trình điều khiển sử dụng các ngắt ngoài 
Các ngắt ngoài xảy ra khi có một mức thấp hoặc cạnh xuống trên chân /INT0 
hoặc /INT1 của bộ vi điều khiển. Các cờ tạo ra các ngắt này là bít IE.0 và IE.1 trong 
thanh ghi TCON, cờ tạo ra ngắt bị xóa bởi phần cứng khi CPU trỏ đến ISR nếu ngắt 
là loại tác động cạnh, còn đối với ngắt tác động bằng mức thì nguồn tạo ngắt bên 
ngoài sẻ điều khiển mức của cờ ngắt. 
 Việc chọn lựa ngắt tác động mức thấp hoặc tác động cạnh âm được được lập 
trình thông qua bít IT0 và IT1 trong thanh ghi TCON. VD: Nếu IT1 = 0 thì ngắt 1 
ngoài được kích bởi mức thấp tại chân INT1 và nếu IT1 = 1 thì ngắt này được kích 
bằng cậnh âm. Trong chế độ này nếu các mẫu tại chân INT1 ở mức cao trong một chu 
kỳ và ở mức thấp trong các chu kỳ kế tiếp thì cờ IE1 trong TCON được set và sau đó 
cờ này sẻ yêu cầu một ngắt. Vì các chân ngắt ngoài được lấy mẫu mỗi chu kỳ máy 
một lần nên ngỏ vào này phải được duy trì ít nhất trong 12 chu kỳ dao động để bảo 
đãm việc lấy mẫu là thích hợp. Nếu là loại tác động cạnh thì nguồn ngoài phải giữ ở 
mức cao ít nhất một chu kỳ và ở mức thấp ít nhất một chu kỳ hoặc hơn để bảo đảm 
nhận ra được sự chuyển mức. IE0 và IE1 được xóa tự động khi CPU trỏ đến ngắt. 
Nếu ngắt ngoài là loại tác động mức thì nguồn ngoài phải duy trì mức tác động cho 
đến khi ngắt yêu cầu thực sự được tạo ra. Sau đó phải trở về mức không tác động 
trước khi ISR hoàn tất hoặc trước khi một ngắt khác được tạo ra. Thông thường một 
106 
thao tác trong ISR làm cho nguồn tạo ngắt trả tín hiệu ngắt trở về trạng thái không tác 
động. 
6. Ngắt cổng nối tiếp 
Mục tiêu: 
- Hiểu được hoạt động của ngắt do cổng nối tiếp 
- Viết chương trình điều khiển sử dụng ngắt do cổng nối tiếp 
Các ngắt của cổng nối tiếp xảy ra khi một trong hai cờ ngắt phát TI hoặc cờ 
ngắt thu RI được set. Ngắt phát xuất hiện khi quá trình phát của ký tự trước 
đó được viết vào SBUF hoàn tất, một ngắt thu xuất hiện khi một ký tự đã được 
nhận đầy đủ và đang chờ đọc trong SBUF. 
 Các ngắt cổng nối tiếp khác với các ngắt của timer, cờ tạo ra ngắt cổng nối 
tiếp không được xóa bằng phần cứng khi CPU trỏ đến véc tơ ngắt lý do là có hai 
nguồn tạo ra một ngắt cổng nối tiếp đó là TI hoặc RI. Nguồn tạo ra ngắt phải được 
xác định trong ISR và cờ ngắt được xóa bằng phần mềm. Trở lại với các ngắt timer, 
cờ ngắt được xóa bằng phần cứng khi CPU trỏ đến ISR 
THỰC HÀNH VỚI NGẮT 
I. MỤC TIÊU 
- Hiểu rõ hơn về tập lệnh của vi điều khiển MCS-51. 
- Hiểu được hoạt động của ngắt (Interrupt) ở các chế độ khác nhau. 
- Hiểu được phương pháp lập trình và điều khiển có sử dụng các ngắt. 
II. NỘI DUNG THÍ NGHIỆM 
1. Nối mạch thí nghiệm 
Ngắt do Timer 
Chương trình 1 : Viết chương trình tạo sóng vuông tần số f = 5 KHz tại P1.0 dùng 
ngắt timer 1 (giả sử tần số thạch anh là 12 MHz). 
107 
2. Viết chương trình điều khiển 
ORG 0000h 
LJMP main 
ORG 001Bh 
CPL P1.0 ; đảo bit 
RETI ; trở về chương trình chính từ ISR 
Main: 
MOV TMOD,#20h 
MOV IE,#88h ; Có thể thay thế bằng 2 lệnh sau: 
 ; SETB EA 
 ; SETB ET1 
MOV TH1,#(-100) 
MOV TL1,#(-100) 
SETB TR1 
SJMP $ 
END 
Chương trình 2 : Viết chương trình tạo xung vuông tần số f =10KHz tại P1.0 
dùng ngắt timer 0 và xung vuông tần số f = 1 KHz tại P1.1 dùng ngắt timer 1. 
108 
ORG 0000h 
LJMP main 
ORG 000Bh 
CPL P1.0 
RETI 
ORG 001Bh 
MOV TH1,#HIGH(-500) ; 2 byte 
MOV TL1,#LOW(-500) ; 2 byte 
CPL P1.1 ; 2 byte 
RETI ; 1 byte 
Main: 
MOV TMOD,#12h 
MOV IE,#8Ah 
SETB TR0 
SETB TR1 
MOV TH1,#HIGH(-500) 
MOV TL1,#LOW(-500) 
MOV TH0,#(-50) 
MOV TL0,#(-50) 
109 
SJMP $ 
END 
Ngắt ngoài 
Chương trình 3: Giả sử chân INT1 được nối đến công tắc bình thường ở mức cao. 
Mỗi khi nó xuống thấp phải bật một đèn LED. Đèn LED được nối đến chân P1.3 và 
bình thường ở chế độ tắt. Khi nó được bật lên nó phải sáng vài phần trăm giây. 
Chừng nào công tắc được ấn xuống thấp đèn LED phải sáng liên tục. 
 ORG 0000H 
 LJMP MAIN ; Nhảy đến bảng véc tơ ngắt 
 ; - - Chương trình con ISR cho ngắt cứng INT1 để bật đèn LED. 
 ORG 0013H ; Trình phục vụ ngắt ISR cho INT1 
 SETB P1.3 ; Bật đèn LED 
 MOV R3, # 255 ; 
 BACK: DJNZ R3, BACK ; Giữ đèn LED sáng một lúc 
 CLR P1.3 ; Tắt đèn LED 
 RETI ; Trở về từ ISR 
 ; - - Bắt đầu chương trình chính Main. 
 ORG 30H 
110 
 MAIN: MOV IE, #10000100B ; Cho phép ngắt dài 
 SJMP HERE ; Chờ ở đây cho đến khi được ngắt 
 END 
Chương trình 4 Viết chương trình sao cho mỗi khi có mức logic 0 xuất hiện 
tại P3.2 (ngắt ngoài 0) thì tạo xung 1 KHz tại P1.0. Quá trình tạo xung chỉ dừng khi 
có mức logic 0 xuất hiện tại P3.3 (ngắt ngoài 1). 
ORG 0000h 
LJMP main 
ORG 0003h ; Địa chỉ ISR ngắt ngoài 0 
SETB TR1 ; Timer 1 chạy 
RETI 
ORG 0013h ; Địa chỉ ISR của ngắt ngoài 1 
CLR TR1 ; Cấm timer 1 
RETI 
ORG 001Bh ; Địa chỉ ISR timer 1 
111 
MOV TH1,#HIGH(-500); Chế độ 16 bit nên mỗi lần tràn 
MOV TL1,#LOW(-500); phải nạp lại giá trị 
CPL P1.0 ; Đảo bit P1.0 để tạo xung 
RETI 
Main: 
MOV TMOD,#10h 
MOV TH1,#HIGH(-500) 
MOV TL1,#LOW(-500) 
MOV IE,#8Dh ; Cho phép ngắt tại ngắt ngoài 0, 1 và 
SJMP $ ; timer 1 
END 
Ngắt cổng nối tiếp 
Chương trình 6 Viết chương trình đếm sản phẩm bằng vi điều khiển 8051 và truyền 
dữ liệu qua cổng nối tiếp. 
Chương trình: 
org 0000h 
 mov tmod,#20h 
 mov scon,#50h 
 mov th1,#0fdh 
 setb tr1 
112 
 clr tf1 
 clr ti 
 clr ri 
 mov r7,#0 
lap: 
 call delay 
 cpl p1.0 
 jb p3.7,lap 
 jnb p3.7,$ 
 inc r7 
 call truyensanpham 
 sjmp lap 
truyensanpham: 
 mov a,r7 
 mov b,#10 
 div ab 
 mov 30h,b 
 mov b,#10 
 div ab 
 mov 31h,b 
 mov 32h,a 
 mov dptr,#ma 
 movc a,@a+dptr 
 clr ti 
 mov sbuf,a 
 jnb ti,$ 
 mov a,31h 
 movc a,@a+dptr 
 clr ti 
 mov sbuf,a 
113 
 jnb ti,$ 
 mov a,30h 
 movc a,@a+dptr 
 clr ti 
 mov sbuf,a 
 jnb ti,$ 
 clr ti 
 mov sbuf,#0dh 
 jnb ti,$ 
 ret 
delay: 
 mov 70h,#2 
dl1: mov 71h,#255 
dl2: mov 72h,#255 
 djnz 72h,$ 
 djnz 71h,dl2 
 djnz 70h,dl1 
ret 
ma: db '0123456789',00h 
end 
ĐIỀU KHIỂN LCD 
I. MỤC TIÊU 
- Hiểu hơn về tập lệnh của vi điều khiển MCS-51. 
- Biết cách viết các chương trình điều khiển LCD. 
- Hiểu được sơ đồ và nguyên lý hoạt động của khối LCD trên mô hình thí nghiệm. 
- Hiểu được nguyên lý và kỹ thuật điều khiển để hiển thị các thông tin trên LCD. 
- Biết cách viết các chương trình ứng dụng để hiển thị các dạng thông tin khác nhau 
trên LCD tùy theo nhu cầu sử dụng. 
II. NỘI DUNG THÍ NGHIỆM 
114 
1. Nối mạch thí nghiệm 
Sơ đồ của LCD1602A: 
 CONST (contrast): chỉnh độ tương phản (độ sáng của hình ảnh trên LCD). 
- EN (Enable): cho phép đọc/ghi dữ liệu. Trong chế độ đọc, EN tác động bằng xung 
dương (cạnh lên) và trong chế độ ghi, EN tác động bằng xung âm (cạnh xuống). 
- RS (register selection): chọn thanh ghi lệnh (RS = 0) hoặc thanh ghi dữ liệu (RS = 
1) 
- R/W: đọc (R/W = 1) hay ghi (R/W = 0) 
- D7 – D4: bus dữ liệu (chế độ 8 bit: 4 bit cao, chế độ 4 bit: dùng cho truyền 4 bit 
cao và 4 bit thấp). Ngoài ra, bit D7 còn dùng làm ngõ ra cho cờ Busy. 
- D3 – D0: 4 bit thấp trong chế độ 8 bit hay bỏ trống trong chế độ 4 bit. 
- A, K: anode và cathode đèn nền của LCD. 
 Các thành phần chức năng của LCD1602A: 
- Cờ Busy (BF – Busy flag): Nếu BF = 1, LCD đang trong quá trình thực thi một 
lệnh. Khi đó, các lệnh gởi tiếp theo sẽ bị bỏ qua. BF được đọc tại chân D7 khi RS = 0 
và R/W = 1. Do đó, trước khi thực hiện một lệnh, cần kiểm tra BF trước, nếu BF = 0 
thì mới gởi lệnh. 
- DDRAM (Display Data RAM): chứa các ký tự sẽ hiển thị trên LCD, tối đa là 
80x8 bit (80 ký tự). Khi hiển thị ở chế độ 1 dòng, địa chỉ của DDRAM có phạm vi từ 
00h ÷ 4Fh còn khi ở chế độ 2 dòng, địa chỉ DDRAM từ 00h ÷ 
27h cho dòng 1 và 40h ÷ 67h cho dòng 2. 
- Bộ đếm địa chỉ (AC - Address Counter): dùng để lưu địa chỉ hiện hành của 
DDRAM và CGRAM, có thể thực hiện đọc AC khi RS = 0 và R/W = 1. 
115 
- CGROM (Character Genaration ROM): chứa các mô hình ký tự sẽ hiển 
thị trên LCD, bao gồm 192 ký tự 5x7 theo bảng mã ASCII (nghĩa là khi 
DDRAM chứa giá trị 41h tương ứng với mã ASCII của ký tự ‘A’ thì trên 
LCD sẽ hiện ‘A’), trong đó chỉ có các mã từ 00h – 0Fh sẽ không lấy theo mã 
ASCII mà lấy theo các ký tự đã định nghĩa trong CGRAM. 
Chương trình 1 Cho sơ đồ kết nối LCD 1602A với AT89C51 như hình vẽ. 
Viết chương trình hiển thị chuỗi “TRUONG CAO DANG” trên dòng 1 hiển thị chuỗi 
“NGHE CONG NGHIEP” trên dòng 2. 
2. Viết chương trình điều khiển 
DATA_PORT EQU P0 
RS BIT P2.0 
RW_ BIT P2.1 
E BIT P2.2 
DB7 BIT P0.7 
ORG 00h 
 CALL KHOITAO 
LOOP: 
 MOV DPTR,#CHUOI1 
116 
 CALL WRITE_STRING 
 MOV A,#0C0H 
 CALL GHI_LENH 
 MOV DPTR,#CHUOI2 
 CALL WRITE_STRING 
 JMP $ 
KHOITAO: 
 MOV A,#038H 
 CALL GHI_LENH 
 MOV A,#0dH 
 CALL GHI_LENH 
 MOV A,#01 
 CALL GHI_LENH 
RET 
WRITE_STRING: 
 MOV R0,#0 
WR_LOOP: 
 MOV A,R0 
 MOVC A,@A+DPTR 
 CJNE A,#00H,NEXT 
 JMP EXIT 
NEXT: 
 CALL WRITE 
 INC R0 
 JMP WR_LOOP 
EXIT: 
RET 
WRITE: 
 CALL READY 
117 
 MOV DATA_PORT,A 
 SETB RS 
 CLR RW_ 
 CLR E 
 SETB E 
RET 
Ghi_lenh: 
 CALL READY 
 mov DATA_PORT,A 
 clr rw_ 
 clr rs 
 clr e 
 setb e 
ret 
READY: 
 MOV DATA_PORT,#0FFH 
 CLR RS 
 SETB RW_ 
recheck: 
 CLR E 
 SETB E 
 JB DB7,recheck 
RET 
CHUOI1: 
DB 'TRUONG CAO DANG',00H 
CHUOI2: 
DB 'NGHE CONG NGHIEP ',00H 
END 
Yêu cầu về đánh giá kết quả học tập 
118 
* Về kiến thức: 
- Hiểu cấu tạo vi điều khiển 8051. 
- Ứng dụng bộ định thời để tạo thời gian trễ. 
- Biết công dụng và cách sử dụng ngắt. 
- Truyền dữ liệu kiểu nối tiếp. 
- Giải thích sơ đồ mạch. 
- Viết chương trình ứng dụng theo yêu cầu. 
*Về kỹ năng: 
- Lắp ráp được mạch điều khiển theo sơ đồ có sẵn. 
- Phân tích được hiện tượng và phán đoán nguyên nhân gây hư hỏng trong mạch điều 
khiển bằng các thiết bị đo. 
- Sửa được chương trình điều khiển. 
* Về thái độ 
- Nghiêm túc, tích cực, chủ động trong học tập. 
- Chấp hành nghiêm chỉnh nội quy của xưởng và phòng thực hành vi điều khiển. 
TÀI LIỆU THAM KHẢO 
[1]- Tống Văn On, Hoàng Đức Hải, Họ vi điều khiển 8051, NXB Lao đông xã hội, 
Hà Nội 2005. 
[2]- Ngô Diên Tập, Lập trình bằng hợp ngữ, NXB Khoa học kỹ thuật, Hà Nội 
1998. 
[3]- Ngô Diên Tập, Vi xử lý trong đo lường và điều khiển, NXB Khoa học kỹ 
thuật, Hà Nội 1999. 
[4]- Đỗ Xuân Thụ, Hồ Khánh Lâm, Kỹ thuật vi xử lý và máy tính, NXB Giáo dục, 
Hà Nội 2000. 
[5]- Nguyễn Tăng Cường, Phan Quốc Thắng, Cấu trúc và lập trình vi điều khiển, 
NXB Khoa học kỹ thuật, Hà Nội 2004. 
[6]- Ngô Diên Tập, Vũ Trung Kiên, Phạm Xuân Khánh, Kiều Xuân Thực, Giáo 
trình vi xử lý và cấu trúc máy tính, NXB Giáo dục, Hà Nội 2007. 

File đính kèm:

  • pdfgiao_trinh_lap_trinh_vi_dieu_khien.pdf