Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin
Trang 1BÀI 1:
PH ẦN MỀM MÔ PHỎNG KEIL VÀ LẬP TRÌNH FASHMAGIC
I M ục đích bài thí nghiệm
Bài thực hành nhắm giúp học viên:
- Nắm khả năng của board thí nghiệm ET-LAB3A
- Sơ đồ nguyên lý của hệ thống
- Phương thức kết nối các PORT ra của Vi điều khiển với ngoại vi trên Board ET-LAB3A
- Soạn thảo, biên dịch, mô phỏng chương trình MSC-51 trên Keil
- Lập trình cho vi điều khiển bằng FlashMagic
II T ổng quan về MSC-51
1 S ơ lượt về MSC-51
Họ vi điều khiển MCS-51 do Intel sản xuất đầu tiên vào năm 1980 là các IC thiết
kế cho các ứng dụng hướng điều khiển Các IC này chính là một hệ thống vi xử lý hoàn chỉnh bao gồm các các thành phần của hệ vi xử lý: CPU, bộ nhớ, các mạch giao
tiếp, điều khiển ngắt
MCS-51 là họ vi điều khiển sử dụng cơ chế CISC (Complex Instruction Set Computer), có độ dài và thời gian thực thi của các lệnh khác nhau Tập lệnh cung cấp cho MCS-51 có các lệnh dùng cho điều khiển xuất / nhập tác động đến từng bit
MCS-51 bao gồm nhiều vi điều khiển khác nhau, bộ vi điều khiển đầu tiên là 8051 có 4KB ROM, 128 byte RAM và 8031, không có ROM nội, phải sử dụng bộ nhớ ngoài Sau này, các nhà sản xuất khác như Siemens, Fujitsu, … cũng được cấp phép làm nhà cung cấp thứ hai
MCS-51 bao gồm nhiều phiên bản khác nhau, mỗi phiên bản sau tăng thêm một sốthanh ghi điều khiển hoạt động của MCS-51
Trang 2Trang I-2
- 128 Byte RAM nội
- 4 Port xuất /nhập I/O 8 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
2 S ơ đồ khối của AT89C51
Bảng 1
Trang 33 M ột số thanh ghi quan trọng trong AT89C51
- Thanh ghi tích luỹ A
- Thanh ghi B
- Thanh ghi R0->R7 (có 4 bank thanh ghi Ri)
- Thanh ghi SP, DTPR, PWS
- Thanh ghi PORT I/O: P0, P1, P2, P3
- Thanh ghi PORT nối tiếp SBUF
- Thanh ghi định thời THx và TLx
- Thanh ghi điều khiển: IP Interrupt Priority, TMOD Timer Mode, TCON
Timer Control, SCON Serial Control, IE Interrupt Enable, PCON Power Control
Các bạn sinh viên hãy tự ôn lại các đặc tính và cách thức sử dụng các thanh ghi của AT89C51
4 C ấu trúc của một chương trình hợp ngữ cho MSC-51
KHAI BÁO CÁC BIẾN, HẰNG NẾU CÓ
ĐỊNH NGHĨA CÁC BIT VÀ CÁC PORT VÀO RA NẾU CÓ
ORG 0000h ; RESET CPU 98C51
Trang 45 M ột số lệnh cần khảo sát trong bài thí nghiệm:
Yêu cầu: sinh viên tự ôn tập lại một số lệnh MSC-51 sau:
- Lệnh di chuyển dữ liệu: MOV, MOVC, MOVX, PUSH, POP
- Nhóm lệnh về số học: ADD, SUBB, INC, DEC, DIV, MUL…
- Nhóm lệnh về logic: ANL, ORL, XRL, CLR, CPL, RL, RLC, RR, RRC
- Nhóm lệnh thao tác trên bit: SETB, CLR, CPL
- Nhóm lệnh rẽ nhánh không điều kiện: CALL, JMP
- Nhóm lệnh rẽ nhánh có điều kiện: CJNE, DJNZ, JZ, JNZ, JC, JNC
III Gi ới thiệu board thí nghiệm ET-LAB3A
1 T ổng quan về ET-LAB3A
ET-LAB3A có các module tính năng sau:
- Module hiển thị 8 LED đơn
- Module hiển thị 4 LED 7 đoạn
- Module hiển thị 3 Ma trận LED 5 cột x 7 dòng
- Module hiển thị LCD
Trang 5- Module ma trận phím và switch đơn
- Module biến đổi ADC có ngõ vào là Quang trở và Nhiệt trở
- Module điều khiển Relay, Speaker và động cơ bước
- Module điều khiển động cơ DC có bộ cảm biến tốc độ quay
- Module biến đổi DAC 8 bit
- Module giao tiếp chuẩn I2C BUS
- Module điều khiển công suất AC vừa dùng TRIAC
- Module ngõ vào nhận tín hiệu DC
- Module giao tiếp với máy tính qua RS323
- Module mở rộng PORT dùng 8255
2 S ơ đồ và hình dạng các khối chức năng của ET-LAB3A
Trang 6Trang I-6
a Kh ối nguồn và sơ đồ nguyên lý
b Kh ối CPU , giao tiếp RS232 và sơ đồ nguyên lý
Kh ối CPU – P89V51RD2 Kh ối giao tiếp RS232
Trang 7c Module hi ển thị LED đơn và 4 LED 7 đoạn và sơ đồ nguyên lý
Trang 8Trang I-8
d Module Ma tr ận LED và sơ đồ nguyên lý
e Module hi ển thị LCD và sơ đồ nguyên lý
Trang 9f Module ma tr ận phím, switch đơn và sơ đồ nguyên lý
Switch và ma tr ận bàn phím
Trang 10Trang I-10
g Module điều khiển Relay, Speaker, động cơ bước và và sơ đồ nguyên lý
Trang 11h Module điều khiển động cơ DC có bộ cảm biến tốc độ quay và sơ đồ nguyên lý
i Module giao ti ếp chuẩn I2C BUS và sơ đồ nguyên lý
Trang 12Trang I-12
j Module điều khiển công suất AC vừa dùng TRIAC và sơ đồ nguyên lý
Trang 13
k Module ngõ vào nh ận tín hiệu DC và sơ đồ nguyên lý
l Module m ở rộng PORT dùng 8255 và sơ đồ nguyên lý
Trang 14Trang I-14
m Module bi ến đổi DAC 8 bit
Trang 15
n Module bi ến đổi ADC có ngõ vào là Quang trở - Nhiệt trở và sơ đồ nguyên
lý
Trang 16
Trang I-16
IV Ph ần mềm mô phỏng và biên dịch Keil cho MSC-51
Có khá nhiều phần mềm mô phỏng cho vi điều khiển MSC-51 Đối với việc mô
phỏng mềm để xem trạng thái các thanh ghi trong MSC-51 thì chúng ta nên dùng phần
mềm mô phỏng Keil Còn nếu mô phỏng Vi điều khiển thông qua phần cứng thiết kếthì chúng ta nên dùng phần mềm Proteus
Trong phần thí nghiệm Vi điều khiển này chúng ta dùng phần mềm Keil để biên
dịch, debug chương trình cho MSC-51 Keil là phần mềm mô phỏng có nhiều công cụ
tiện ích như có thể soạn thảo, biên dịch và debug chương trình cho Vi điều khiển bằng ngôn ngữ C, ngôn ngữ ASM của MSC-51 Bên cạnh đó nó còn có cho phép tạo ra file.HEX để nạp cho Vi điều khiển sau mô phỏng đạt yêu cầu Điểm yếu của Keil so
với Proteus là Keil không cho phép mô phỏng theo phần cứng thiết kế
Khởi động μVision 3, chúng ta thấy giao diện như hình H1
Mặc định sẽ soạn thảo và biên dịch chương trình duwois dạng ngôn ngữ C Do chúng ta mới làm quen với lập trình Vi điều khiển nên việc lập trình bằng ngôn ngữ C
tương đối khó khăn Chúng ta nên chuyển qua chế độ soạn thảo và biên dịch chương trình bằng hợp ngữ ASM của MSC-51 Để soạn thảo, biên dịch và debug chúng ta làm theo các bước sau:
Hình H1
Trang 17- Bước 1: Từ menu Project chọn New Project và click chuột vào đây - như hình H2
- Bước 2: Một hộp thoại hiện ra và thực hiện hướng dẫn như hình H3, sau đó click chuột vào Save
- Bước 3: Một hộp thoại hiện ra như hình H4 cho chúng ta chọn loại CPU đang thiết kế để viết chương trình mô phỏng Chú ý do Vi điều khiển loại 8951 không chỉ có hãng Atmel sản xuaart mà có có thể có nhiều hãng sản xuất khác nhau, do đó để kết quả mô phỏng được gần đúng chúng ta nên chọn đúng loại CPU cần mô phỏng
Tên Project
Chọn đường dẫn để
lưu Project
Hình H3 Hình H2
Trang 18- Bước 6: Tạo tập tin chứa Code cho vi điều khiển
Tập tin chứa code là chương trình hợp ngữ cần viết cho 8051 Tập tin này được lưu
với phần mở rộng là a51 Để tiến hành tạo tập tin nguồn ta chọn File\ New, một giao
diện như hình H5, sau khi soạn thảo xong và lưu với filename.A51
Giả sử chọn AT89C51 của hãng Atmel Sao đó click chuột vào OK
Hình H4
Trang 19- Bước 7: Add một filename.A51 vào Project, chúng ta làm như sau: Chọn
Source Group1 trong Project Workspace, sau đó click chuột phải và chọn Add Files to Group “Source group 1” Cách thực hiện như hình H6
Lưu với phần
mở rộng A51
Vùng soạn thảo đoạn code cho vi điều khiển
Hình H5
Chọn
Chọn đường dẫn
Hình H6
Trang 20Trang I-20
Sau khi Add xong chúng ta thấy bên dưới Source Group 1 sẽ chứa file chúng ta
vừa Add như hình bên dưới
- Bước 8: Thiết lập các thông số cho Project Từ menu Project chọn Option for Target “Target 1” hay từ Target 1 trong Project WorkSpace ta click chuột phải
và chọn Option for Target “Target 1 Một hộp thoại hiện ra như hình H7 cho chúng ta thiết lập các thông số cho Project
Ở lớp Target cho chúng ta chọn tần số dao động thạch anh, còn ở lớp Output cho chúng ta chọn file.HEX xuất ra để nạp chương trình cho vi điều khiển
Trang 21- Bước 9: Biên dịch và Debug chương trình
Check vào đây để tạo
ra file.HEX
Click vào đây để chọn đường dẫn
Trang 22ET-Chọn loại CPU
cần nạp
Chọn file.HEX
cần nạp Các Option tuỳ
chọn khi nạp CT
Trang 23QUY TRÌNH N ẠP CHƯƠNG TRÌNH CHO IC 89V51RD2
Khi nạp chương trình cho IC 89V51RD2, sinh viên cần tuân thủ theo các nguyên tắc sau:
1 Thiết kế xong chương trình trên máy tính (Chú ý: hạn chế sử dụng Port3 nhất là các chân truyền nhận dữ liệu P3.0 và P3.1 - để truy xuất dữ liệu – các chân của Port này thường để sử dụng cho những chức năng đặc biệt: Ngắt, định thời, ghi đọc Port,…)
2 Biên dịch thành File.HEX
3 Khởi động Flash Magic
• Cửa sổ Flash Magic mở ra như sau
• Nhấp nút Cancel trên thông báo Reset Device để đóng thông báo lại
Trang 24Trang I-24
• Lúc đó cửa sổ Flash Magic như sau
Để tiến hành nạp chương trình cho IC ta thực hiện theo các bước 1 6 như sau:
1 Chọn đúng IC 89V51RD2
2 Chọn tùy chọn Erase all Flash
3 Nhấp vào Browse …để chọn file Hex cần nạp cho IC
4 Chọn các tùy chọn như trong hình
5 B ấm và giữ nút Reset trên mạch
6 Nhấp nút Start để nạp
Trang 25Sau khi nhấp nút Start
• Thông báo xuất hiện nhấp Yes
• Một thông báo khác lại mở ra chọn Yes
1 Chọn đúng
IC
2 Chọn tùy chọn này
Trang 26• Mà phải đợi đến khi thông báo chương trình đã được nạp xong thì được
nhấn nút Reset trên mạch Hình sau
Chương
trình chưa
nạp xong
Trang 27• Không được bấm nút Reset trên mạch liên tục khi không có yêu cầu nạp
chương trình cho IC hay cho chạy chương trình có trong IC
VI N ội dung thực hành
(M ột số chương trình mẫu làm quen với hệ thống)
1 Bài 1: Ch ương trình cho 1 LED đơn nhấp nháy (on/off) 1giây Sinh viên hãy th ực hiện các yêu cầu sau:
Chương trình đã được nạp xong
Trang 28L2: MOV R3, #255
L3: DJNZ R3, L3
DJNZ R2, L2 DJNZ R1, L1 RET
c Kết nối PORT0 của vi điều khiển với Module Led đơn và LED 7 đoạn
bằng dây bus Kích hoạt FlashMagic để nạp file test1.HEX xuống vi điều khiển Ấn nút Reset để cho chạy chương trình và quan sát ngõ ra và cho
nhận xét
d Hãy thử thay đổi lần lượt các giá trị trên các thanh ghi R0, R1, R2, sau
đó biên dịch và nạp lại chương trình cho Vi điều khiển và làm lại như ở
câu c Có nhận xét gì về sự thau đổi này không ? Nếu thay giá trị thanh ghi R0 bằng 00H có nhận xét gì về thời gian trì hoãn Giải thích ?
e Hãy thử thay lệnh SETB P0.0 thành lệnh MOV P0, #0FFH và thay lệnh CLR P0.0 thành lệnh MOV P0, #00H Biên dịch và làm lại bước câu c
Quan sát kết quả và có nhận xét gì ?
f Hãy cho vẽ lưu đồ chương trình chình và chương trình con của đoạn
chương trình trên
2 Bài 2: Ch ương trình cho 1 LED đơn cháy từ trái sang phải và sau đó cháy
ng ược lại từ phải sang trái Sinh viên hãy thực hiện các yêu cầu sau:
a Dùng Keil soạn thảo đoạn chương trình bên dưới và lưu với tên test1.A51 Sau đó thiết lập các thông số, kiểm tra lỗi, biên dịch chương trình
ORG 0000H
LJMP MAIN
MAIN:
MOV P1,#0FFH CLR P1.7
Trang 29CLR P1.3 CALL DELAY_XS SETB P1.3
CLR P1.4 CALL DELAY_XS SETB P1.4
CLR P1.5 CALL DELAY_XS SETB P1.5
CLR P1.6 CALL DELAY_XS SETB P1.6
CLR P1.7 CALL DELAY_XS SETB P1.7
LJMP MAIN
; DELAY X GIAY DELAY_XS:
MOV R1, #20 L1: MOV R2, #200 L2: MOV R3, #255 L3: DJNZ R3, L3
DJNZ R2, L2 DJNZ R1, L1 RET END
Trang 30Trang I-26
d Hãy thử thay đổi giá trị trên thanh ghi R0 để cho LED hiển thị quan sát được, sau đó biên dịch và nạp lại chương trình cho Vi điều khiển và làm
lại như ở câu c Có nhận xét gì về sự thau đổi này không ? Khi đó hãy
tính ước lượng thời gian trì hoãn này là bao nhiêu ?
e Hãy thử thay các nhóm lệnh SETB và CLR thành lệnh MOV P0, #xxH (với xx là giá trị cần thay thế) sao cho có kết quả không đổi với chương trình ban đầu Biên dịch và làm lại câu c Quan sát kết quả và có nhận
xét gì ?
f Hãy thử nêu ý tưởng và giải thuật cải tiến đoạn chương trình Gợi ý có
thể dùng các lệnh khác sao cho chương trình ngắn gọn hơn Thử kiểm
chứng bằng cách viết lại chương trình và kiểm tra kết quả
Bài 3: Sửa lại chương trình trên cho LED đơn cháy xen kẻ và đổi chỗ cho nhau với
thời gian hợp lý để tạo hiệu ứng nhấp nháy
Bài 4: Sửa lại chương trình cho 8 LED ON/OFF 4 lần Sau đó 4 bit thấp ON/OFF 8
lần, 4 bit cao OFF/ON 8 lần rồi dùng lại
-Hết -