Hoạt động của một vi điều khiển:1. Khi không có nguồn điện cung cấp, vi điều khiển chỉ là một con chip có chương trình nạpsẵn vào trong đó và không có hoạt động gì xảy ra.2. Khi có nguồn điện, mọi hoạt động bắt đầu được xảy ra với tốc độ cao. Đơn vị điều khiểnlogic có nhiệm vụ điều khiển tất cả mọi hoạt động. Nó khóa tất cả các mạch khác, trừ mạch dao độngthạch anh. Sau mini giây đầu tiên tất cả đã sẵn sàng hoạt động.3. Điện áp nguồn nuôi đạt đến giá trị tối đa của nó và tần số dao động trở nên ổn định. Các bitcủa các thanh ghi SFR cho biết trạng thái của tất cả các mạch trong vi điều khiển. Toàn bộ vi điềukhiển hoạt động theo chu kỳ của chuỗi xung chính.4. Thanh ghi bộ đếm chương trình được xóa về 0. Câu lệnh từ địa chỉ này được gửi tới bộ giảimã lệnh sau đó được thực thi ngay lập tức
Trang 1Câu 1: Trình bày hoạt động của vi điều khiển (2.5)
Hoạt động của một vi điều khiển:
1 Khi không có nguồn điện cung cấp, vi điều khiển chỉ là một con chip có chương trình nạp sẵn vào trong đó và không có hoạt động gì xảy ra
2 Khi có nguồn điện, mọi hoạt động bắt đầu được xảy ra với tốc độ cao Đơn vị điều khiển logic có nhiệm vụ điều khiển tất cả mọi hoạt động Nó khóa tất cả các mạch khác, trừ mạch dao động thạch anh Sau mini giây đầu tiên tất cả đã sẵn sàng hoạt động
3 Điện áp nguồn nuôi đạt đến giá trị tối đa của nó và tần số dao động trở nên ổn định Các bit của các thanh ghi SFR cho biết trạng thái của tất cả các mạch trong vi điều khiển Toàn bộ vi điều khiển hoạt động theo chu kỳ của chuỗi xung chính
4 Thanh ghi bộ đếm chương trình được xóa về 0 Câu lệnh từ địa chỉ này được gửi tới bộ giải
mã lệnh sau đó được thực thi ngay lập tức
5 Giá trị trong thanh ghi PC được tăng lên 1 và toàn bộ quá trình được lặp lại vài triệu lần trong một giây
Câu 2: Nêu cấu trúc chung của vi điều khiển Trình bày về ROM, RAM của vi điều khiển (2.5)
Bộ nhớ (Memory)
- Read Only Memory (ROM)
Read Only Memory (ROM) là một loại bộ nhớ được sử dụng để lưu vĩnh viễn các chương trình được thực thi
trường ngoại vi Kích thước của dãy ROM từ 512B đến 64KB
- Random Access Memory (RAM)
Random Access Memory (RAM) là một loại bộ nhớ sử dụng cho các dữ liệu lưu trữ tạm thời
và kết quả trung gian được tạo ra và được sử dụng trong quá trình hoạt động của bộ vi điều khiển Nội dung của bộ nhớ này bị xóa một khi nguồn cung cấp bị tắt
- Electrically Erasable Programmable ROM (EEPROM)
EEPROM là một kiểu đặc biệt của bộ nhớ chỉ có ở một số loại vi điều khiển Nội dung của nó
có thể được thay đổi trong quá trình thực hiện chương trình (tương tự như RAM), nhưng vẫn còn lưu giữ vĩnh viễn, ngay cả sau khi mất điện (tương tự như ROM)
Các thanh ghi chức năng đặc biệt (SFR)
Thanh ghi chức năng đặc biệt (Special Function Registers) là một phần của bộ nhớ RAM Mục đích của chúng được định trước bởi nhà sản xuất và không thể thay đổi được
Bộ đếm chương trình (PC: Program Counter)
Bộ đếm chương trình chứa địa chỉ chỉ đến ô nhớ chứa câu lệnh tiếp theo sẽ được kích hoạt
Central Processor Unit (CPU)
Đây là một đơn vị có nhiệm vụ điều khiển và giám sát tất cả các hoạt động bên trong vi điều khiển và người sử dụng không thể tác động vào hoạt động của nó
Các cổng vào/ra (I/O Ports)
Để vi điều khiển có thể hoạt động hữu ích, nó cần có sự kết nối với các thiết bị ngoại vi Mỗi
vi điều khiển sẽ có một hoặc một số thanh ghi (được gọi là cổng) được kết nối với các chân của vi điều khiển
Bộ dao động (Oscillator)
Bộ dao động làm nhiệm vụ đồng bộ hóa hoạt động của tất cả các mạch bên trong vi điều khiển
Bộ định thời/đếm (Timers/Counters)
Truyền thông nối tiếp
Truyền thông giữa các thiết bị ở khoảng cách xa
Chương trình
Câu 3: Chuyển từ hệ cơ số 10 các số: 34, 225, 143 sang hệ cơ số 2 và cơ số 16 (2.5)
Bài làm:
Chuyển sang nhị phân
34 : 100010
225: 11100001
143: 10001111
Chuyển sang hệ 16:
34: 22H
225: 0E1H
143: 8FH
Câu 4 : Chuyển các số sau sang hệ 10 : 23H, 110101B, 101011B, 4AH (2.5)
23H: 2x16 + 3 = 35
11010B = 2x2x2x2 + 2x2x2 + 2x1 = 26
101011B = 2x2x2x2x2 + 2x2x2 + 2x1 + 1 = 43
Trang 24AH = 4x16 + 10 = 74
Bài tập chương 4
Bài làm:
47 sang nhị phân là: 00101111
30 sang nhị phân là: 00011110
Thực hiện phép cộng:
00101111
+ 00011110
01001101
Vậy S1 = 00101111 + 00011110 = 01001101
Câu 6: Trình bày chuẩn 8051 (2.5)
Bài làm:
AT89C51 là vi điều khiển do Atmel sản xuất, chế tạo theo công nghệ CMOS có các đặc tính như sau:
+ 4 KB PEROM (Flash Programmable and Erasable Read Only Memory), có khả năng tới
1000 chu kỳ ghi xoá
+ Tần số hoạt động từ: 0Hz đến 24 MHz
+ 3 mức khóa bộ nhớ lập trình
+ 128 Byte RAM nội
+ 4 Port xuất /nhập I/O 8 bit
+ 2 bộ Timer/counter 16 Bit
+ 6 nguồn ngắt
+ Giao tiếp nối tiếp điều khiển bằng phần cứng
+ 64 KB vùng nhớ mã ngoài
+ 64 KB vùng nhớ dữ liệu ngoài
+ Cho phép xử lý bit
+ 210 vị trí nhớ có thể định vị bit
+ 4 chu kỳ máy (4 µs đối với thạch anh 12MHz) cho hoạt động nhân hoặc chia
+ Có các chế độ nghỉ (Low-power Idle) và chế độ nguồn giảm (Power-down)
+ Ngoài ra, một số IC khác của họ MCS-51 có thêm bộ định thời thứ 3 và 256
byte RAM nội
Câu 7: Vẽ sơ đồ chân của vi điều khiển 8051 Nêu ý nghĩa các chân.(3.0)
Bài làm:
Sơ đồ chân AT89C51:
Ý nghĩa các chân:
- Tín hiệu vào /EA trên chân 31 thường đặt lên mức cao ( +5V) hoặc mức thấp (GND) Nếu ở
mức cao, 8951 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp (4K hoặc tối đa 8k đối với 89C52) Nếu ở mức thấp, chương trình được thi hành từ bộ nhớ mở rộng (tối đa đến 64Kbyte)
- Các chân nguồn:
AT89C51 hoạt động ở nguồn đơn +5V Vcc được nối vào chân 40, và Vss (GND) được nối
Câu 5 : Thực hiện phép toán sau bằng thanh ghi 8 bít (2.5)
S1 = 47 + 30 ; S2 = 64 – 37 ; S3 = 28H + 33H ; S4 = 49H – 2CH ;
Trang 3vào chân 20.
+ Chân 40: VCC = 5V± 20%
+ Chân 20: GND
/PSEN (chân 29) cho phép đọc bộ nhớ chương trình mở rộng đối với các ứng dụng sử dụng ROM ngoài
- ALE/ PROG (chân 30) cho phép tách các đường địa chỉ và dữ liệu tại Port 0 khi truy xuất
bộ nhớ ngoài
- EA (chân 31) dùng để cho phép thực thi chương trình từ ROM ngoài Khi nối chân 31 với
Vcc, AT89C51 sẽ thực thi chương trình từ ROM nội (tối đa 8KB), ngược lại thì thực thi từ ROM ngoài (tối đa 64KB)
- RST (chân 9) cho phép reset AT89C51 khi ngõ vào tín hiệu đưa lên mức 1 trong ít nhất là
2 chu kỳ máy
- X1, X2: Ngõ vào và ngõ ra bộ dao động, khi sử dụng có thể chỉ cần kết nối thêm thạch anh
và các tụ như hình vẽ trong sơ đồ Tần số thạch anh thường sử dụng cho AT89C51 là
12Mhz.
Port 0 : có 2 chức năng ở các chân 32 – 39 của AT89C51:
- Chức năng I/O (xuất/nhập): dùng cho các thiết kế nhỏ
- Chức năng địa chỉ / dữ liệu đa hợp: khi dùng các thiết kế lớn, đòi hỏi phải sử dụng bộ nhớ ngoài thì Port 0 vừa là bus dữ liệu (8 bit) vừa là bus địa chỉ (8 bit thấp)
Port 1: Port1 (chân 1 – 8) chỉ có một chức năng là I/O,
Port 2: Port 2 (chân 21 – 28) là port có 2 chức năng:
- Chức năng I/O (xuất / nhập)
- Chức năng địa chỉ: dùng làm 8 bit địa chỉ cao khi cần bộ nhớ ngoài có địa chỉ 16 bit Khi
đó, Port 2 không được dùng cho mục đích I/O
Port 3: Port 3 (chân 10 – 17) là port có 2 chức năng:
- Chức năng I/O Khi dùng làm ngõ vào, Port 3 phải được set mức logic 1 trước đó
- Chức năng khác mô tả như sau:
Câu 8: Trình bày các chế độ dịa chỉ của 8051 Lấy ví dụ minh họa (2.5)
1 Địa chỉ tức thời
Trong chế độ đánh địa chỉ này toán hạng nguồn là một hằng số, toán hạng đích là một thanh ghi
Ví dụ: MOV A, #20;
2 Địa chỉ thanh ghi: cả toán hạng đích và toán hạng nguồn là các thanh ghi
Ví dụ: MOV A, R1
3 Địa chỉ trực tiếp: Một toán hạng là thanh ghi, toán hạng còn lại là địa chỉ của ô nhớ
Ví dụ: MOV R1, 30H;
4 Địa chỉ gián tiếp: Một toán hạng là thanh ghi, toán hạng còn lại là thanh ghi R0 hoặc R1 chứa địa chỉ của ô nhớ
Ví dụ: MOV A, @R1
5 Địa chỉ theo chỉ số: Một toán hạng là thanh ghi tích lũy A, toán hạng còn lại là ô nhớ của bộ nhớ ROM
Ví dụ: MOVC A, @A + DPTR
Câu 9: Trình bày cấu trúc chung của một lệnh hợp ngữ Cho ví dụ.(2.5)
Bài làm:
Câu trúc chung của một lệnh hợp ngữ:
nhãn: từ gợi nhớ các toán hạng ; chú giải
Ví dụ:
- Nhãn: là tên chương trình con Kết thúc bằng dấu hai chấm (:)
- Từ gợi nhớ: là các câu lệnh của hợp ngữ.
- Các toán hạng: là các thanh ghi, giá trị, địa chỉ, …
- Chú giải: là phần giải thích ý nghĩa của câu lệnh Bắt đầu bằng dấu chấm
phẩy (;)
Câu 10: Viết chương trình ghi 40H vào ô nhớ 30H của RAM nội sử dụng 2 chế độ đánh địa chỉ trực tiếp và gián tiếp (3.0)
Trang 4Bài làm:
1 Chế độ đánh địa chỉ trực tiếp
MOV A, #40H ; chuyển 40H vào thanh ghi A
MOV 30H, A ; chuyển nội dung thanh ghi A vào ô nhớ có địa chỉ 30H
2 Chế độ địa chỉ gián tiếp
MOV R0, #30H ; Dùng thanh ghi R0 chứa địa chỉ của ô nhớ RAM là 30H
MOV A, #40H ; Chuyển 40H vào thanh ghi A
MOV @R, A ; chuyển nội dung thanh ghi A vào ô nhớ có địa chỉ chứa trong thanh ghi R0
Câu 11: Viết chương trình chuyển một chuỗi dữ liệu gồm 10 byte trong RAM nội có địa chỉ đầu là 30H đến vùng RAM nội có địa chỉ đầu là 40H (3.0)
Bài làm:
MOV R0, #30H ; dùng thanh ghi R0 chứa địa chỉ đầu 30H
MOV R1, #40H ; dùng thanh ghi R1 chứa địa chỉ đầu 40H
MOV R2, #10 ; dùng thanh ghi R2 làm bộ đếm 10 lần
Lap:
MOV A, @R0 ; chuyển nội dung ô nhớ có địa chỉ trong R0 vào thanh ghi A
MOV @R1, A ; chuyển nội dung thanh ghi A vào ô nhớ có địa chỉ ô nhớ chứa trong R1 INC R0
INC R1
DJNZ R2, Lap ; vừa giảm R2 vừa kiểm tra xem R2 về 0 chưa nếu chưa về 0 thì lặp lại đoạn
; chương trình đánh dấu bởi từ Lap, nếu R2 về 0 thì kết thúc
Câu 12: Viết chương trình tính tổng sau: (3.0)
S = 1 + 2 + 3 + … + 10;
Bài làm:
MOV A, #0 ; ban đầu tổng trong thanh ghi A là 0
MOV R1, #1 ;
MOV R2, 10 ; chứa số đếm là 10 lần
Lap:
ADD A, R1 ;
INC R1 ;
DJNZ R2, Lap
Bài 13: Chương trình con tạo trễ 0.5ms dùng timer (Xtal = 11.0592MHZ)
MOV TMOD, #01H ; sử dụng Timer 0 chế độ 16 bít
Delay1:
MOV TH0, #0FDH ; TIMER TRỄ 0.5ms
MOV TL0, #0BH ; số đếm 0FFFFH – 0FD0BH = 2F4H = 500
SETB TR0 ;
LAP:
JNB TF0, LAP ;
CLR TF0 ;
CLR TR0 ;
Bài 14: Viết chương trình con tạo sóng vuông 1k HZ trên chân p1.0 (Xtal = 11.0592MHZ)
T = 1/f = 1ms
ORG 000H
MOV TMOD, #01H ; sử dụng timer0 chế độ 16 bít
ANSWER_BACK:
MOV TL0, # 08H ; số đếm 0FFFFH – 0FB08H = 3E7H = 999 (hệ 10)
MOV TH0, #FBH ;
CPL P1.0
ACALL PENDING
SJMP ANSWER_BACK
; chương trình tạo trễ sử dụng Timer 0
PENDING:
Trang 5SETB TR0 ;
STANDBY:
JNB TF0, STANDBY ;
CLR TR0 ;
CLR TF0 ;
RET
END
Bài 15 Chương trình hiển thị led 7 thanh số từ 00 đến 99
Dùng Led 7 thanh Cathode chung
MOV 30H,#0
SJMP Hienthi
Main:
INC 30H ; Tăng ô nhớ 30h
MOV A,30H
CJNE A,#100,Hienthi ; Nếu giá trị ô nhớ 30h = 10
MOV 30H,#0 ; thì gán 30h = 0
SJMP Hienthi ; Hiển thị ma Led 7 đoạn
ACALL Delay
SJMP Main
; -
Hienthi:
MOV A,30H
MOV B,#10
DIV AB
MOV DPTR,#Maled7
MOVC A,@A+DPTR
MOV P2,A
CLR P1.1
SETB P1.1
MOV A,B
MOV DPTR,#Maled7
MOVC A,@A+DPTR
MOV P2,A
CLR P1.0
SETB P1.0
CALL Delay
SJMP Main
Maled7: DB
0C0H,0F9H,0A4H,0B0H,
99H,92H,82H,0F8H,80H,90H
; -Delay:
MOV R7,#255
DJNZ R7,$
RET
END
Câu 21: Thiết kế mạch, Viết chương trình hiển thị trên Led 7 thanh từ 0 đến 9 khi ấn nút tăng INC hay nút giảm DEC
Thiết kế mạch:
Trang 6Chương trình:
MOV 30H,#0
SJMP Hienthi
Main:
JNB P1.0,Sw1 ; Nếu P3.0 = 0 thì nhấn SW1
JNB P1.1,Sw2 ; Nếu P3.1 = 0 thì nhấn SW2
SJMP Main
SW1:
INC 30H ; Tăng ô nhớ 30h
MOV A,30H
CJNE A,#10,Hienthi ; Nếu giá trị ô nhớ 30h = 10 MOV 30H,#0 ; thì gán 30h = 0
SJMP Hienthi ; Hiển thị ra Led 7 đoạn
; -
Sw2:
DEC 30H ; Giảm ô nhớ 30h
MOV A,30H
CJNE A,#255,Hienthi ; Nếu giá trị giảm = -1 (255) MOV 30H,#9
SJMP Hienthi ; thì gán 30h = 9
Hienthi:
MOV A,30H
MOV DPTR,#Maled7
MOVC A,@A+DPTR
MOV P2,A
CALL Delay
SJMP Main
Maled7: DB
0C0H, 0F9H, 0A4H, 0B0H,
99H, 92H,82H, 0F8H, 80H, 90H
; -Delay:
MOV R7,#255
DJNZ R7,$
RET
END
Câu 16: Chương trình khởi động động cơ qua 3 cấp điện trở phụ Main:
SETB P1.0 ; khởi động từ chính
ACALL Delay ; trễ 10s
SETB P1.1 ; khởi động từ loại Rf1
ACALL Delay ; trễ 10s
SETB P1.2 ; khởi động từ loại Rf2
ACALL Delay ; trễ 10s
SETB P1.3 ; khởi động từ loại Rf3
ACALL Delay
Delay:
PUSH 07h
PUSH 06h
PUSH 05H
MOV R6,#200
Delay1:
MOV R7,#250
Delay2:
MOV R5, # 200
DJNZ R5, $
DJNZ R7, Delay1
DJNZ R6, Delay1
POP 05h
POP 06h
POP 07h
RET
Trang 7END
Bài 17: Viết chương trình điều khiển động cơ 1 chiều quay thuận, quay nghịch
- Vẽ sơ đồ
- Viết chương trình
MAIN:
MOV P0, #00h;
STAY:
JNB P1.0, THUAN
;JNB P1.1, NGUOC
;JNB P1.2, STOP ;
SJMP STAY
; -chương trình quay thuận
THUAN:
SETB P0.0
RET
; -chương trình quay ngược
NGUOC:
SETB P0.1
RET
; -chương trình dừng
STOP: ;
CLR P0.0
CLR P0.1
RET
;
END
Câu 18: Thiết kế mạch, viết chương trình điều khiển động cơ bước quay thuận nghịh Giải thích ý nghĩa các câu lệnh.
Thiết kế mạch:
Chương trình:
// Chuong trinh dieu khien dong co buoc don gian
ORG 0H
MAIN:
JNB P2.0, THUAN
JNB P2.1, NGUOC
JNB P2.2, STOP
SJMP MAIN
THUAN:
MOV P1, #00000001B
ACALL DELAY
MOV P1, #00000010B
ACALL DELAY
MOV P1, #00000100B
ACALL DELAY
MOV P1, #00001000B
Trang 8ACALL DELAY
RET
NGUOC:
MOV P1, #00000001B
ACALL DELAY
MOV P1, #00000010B
ACALL DELAY
MOV P1, #00000100B
ACALL DELAY
MOV P1, #00001000B
ACALL DELAY
RET
DELAY:
MOV R1, #20 H1: MOV R2,#255
H2: MOV R3,#255
H3: DJNZ R3,H3
DJNZ R2,H2 DJNZ R1,H1 RET
END
Câu20 Viết chương trình điều khiển mạch đếm sản phẩm sử dụng Timer 1 chế độ 2 hiển thị trên một Led 7 thanh Giải thích ý nghĩa các câu lệnh (5.0)
MOV TMOD, #01100000B; Chọn bộ đếm 1, chế độ 2, bít C/T = 1 xung ngoài MOV TH1, #0 ; Xoá TH1
SETB P3.5 ; Lấy đầu vào T1
AGAIN: SETB TR1 ; Khởi động bộ đếm
BACK: MOV A, TL1 ; Lấy bản sao số đếm TL1
CALL Hienthi
JNB TF1, Back ; Duy trì nó nếu TF = 0
SJMP AGAIN ; Tiếp tục thực hiện
Hienthi:
MOV DPTR,#Maled7
MOVC A,@A+DPTR
MOV P2,A
CLR P1.2
SETB P1.2
CALL Delay
Maled7: DB
0C0H,0F9H,0A4H,0B0H,
99H,92H,82H,0F8H,80H,90H ; MÃ SỐ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
RET
; -Delay:
MOV R7,#255
DJNZ R7,$
RET
END
Câu 19 Thiết kế mạch, viết chương trình điều khiển dãy 8 led đơn sáng dần từ trái qua phải, nhấp nháy, sau đó sáng lần lượt từ phải qua trái Giải thích ý nghĩa các câu lệnh.
Bài làm:
Thiết kế mạch:
Trang 9
Chương trình:
Main:
MOV P0,#01h CALL Delay MOV P0,#03h CALL Delay MOV P0,#07h CALL Delay MOV P0,#0fh CALL Delay MOV P0,#1fh CALL Delay MOV P0,#3fh CALL Delay MOV P0,#7fh CALL Delay MOV P0,#0ffh CALL Delay
; nhấp nháy MOV P0, #00H;
CALL Delay
; sáng dần từ phải sang trái MOV P0,#80h
CALL Delay MOV P0,#40h CALL Delay MOV P0,#20h CALL Delay MOV P0,#10h CALL Delay MOV P0,#08h CALL Delay MOV P0,#04h CALL Delay MOV P0,#02h CALL Delay MOV P0,#01h SJMP main