Bài 4: Hướng dẫn sử dụng phần mềm Pinnacle 52 viết chương trình cho vi điều khiển họ 8051
1. Hướng dẫn sử dụng phần mềm Pinnacle 52
1.3. Các bước viết chương trình trên Pinnacle 52
Bước 1: Khởi động chương trình: Start --> Program --> Pinnacle --> Pinnacle 52 hoặc nháy kép vào biểu tượng của chương trình Pinnacle 52 trên màn hình.
Mở menu File, click “NEW” để tạo ra một cửa sổ soạn thảo trên đó có thể nhập mã chương trình. Nếu mã chương trình đã có trước trong một file, click “Open”
để mở file chương trình đó.
Hình 4.3 Cửa sổ soạn thảo chương trình Bước 2: Nhập mã chương trình vào cửa số soạn thảo
Giả thiết viết một chương trình điều khiển các led gắn với cổng P0 sáng dần từ phải qua trái, nhập vào cửa sổ soạn thảo mã chương trình sau:
org 0 ;chương trình ghi từ địa chỉ đầu tiên trong ROM start: ;nhãn của dòng lệnh
mov r0,#8 ;nhập giá trị 8 vào thanh ghi r0 mov p0,#0 ;xoá cổng p0
clr a ;xoá nối dung thanh ghi A call delay ;gọi chương trình con trễ loop:
setb c ;đặt bic C trong thanh ghi trạng thái chương trình lên mức cao rlc a ;quay trái thanh ghi A qua cờ C
mov p0,a ;chuyển nội dung của thanh ghi A ra cổng P0
call delay ;gọi chương trình con trễ để mắt có thể quan sát được sự thay
;đổi trạng thái của các led
djnz r0,loop ;giảm nội dung thanh ghi R0 một đơn vị và so sánh với 0, nếu
;R0=0 ;thì thực hiện lệnh tiếp theo, nếu R0 khác 0 thì nhảy
;đến địa chỉ “loop” để thực hiện jmp start ;lặp lại quá trình
;chương trình con trễ làm nhiệm vụ trễ một khoảng thời gian nhất định để mắt
;người có thể phân biệt đợc giữa các lần thay đổi trạng thái của cổng p0 delay:
push 0 ;cất nội dung thanh ghi R0 lên ngăn xếp push 1 ;cất nội dung thanh ghi R1 lên ngăn xếp mov r0,#250 ;nạp giá trị ban đầu cho R0=250
nhan1:
mov r1,#250 ;nạp giá trị ban đầu cho R1 =250
djnz r1,$ ;giảm R1 đi một đơn vị và so sánh với 0, nếu R1 khác
;không thì tiếp tục trừ R1, nếu R1 =0 thì thực hiện lệnh
;tiÕp theo djnz r0,nhan1
pop 1 ;lấy lại nội dung thanh ghi R1 pop 0 ;lấy lại nội dung thanh ghi R0 ret
end
Màn hình soạn thảo có dạng
Hình 4.4 Soạn thảo chương trình
Bước 3: Lưu mã chương trình vào bộ nhớ: trong menu File chọn Save As. Chọn ổ đĩa muốn lưu trong ô “Drivers”, nháy kép vào thư mục cần lưu trong Folders.
Trong mục “File name” nhập tên đặt cho chương trình (không cần thêm đuôi
Hình 4.5 Lưu chương trình soạn thảo
.asm, khi thực hiện chương trình sẽ tự động thêm vào). Sau đó nhấn nút “OK”
Lưu ý: nên lưu chương trình ngay sau bước 1 và lưu chương trình thường xuyên
để không bị mất dữ liệu do các sự cố về nguồn điện hoặc treo máy. Tên file
không dài quá 8 ký tự và không được có dấu cách hay ký tự đặc biệt giữa các ký tù.
Bước 4: Mở menu “Project” và click vào “Compile & Link FILENAME”, trong
đó “FILENAME” là tên chương trình vừa tạo ra (chương trình sẽ tự động chèn tên filename vào).
Cũng có thể dùng phím nóng Ctrl+F2 để thực hiện bước này. Sau đó, chương trình sẽ tiến hành dịch, thông báo các lỗi trong chương trình nếu có.
Bước 5: Nếu như quá trình “Compile & Link” thông báo chương trình còn lỗi,
đóng cửa sổ thông báo lỗi, quay lại cửa sổ soạn thảo để sửa chữa những lỗi vừa
được thông báo. Cửa sổ thông báo lỗi cũng cho biết vị trí phát hiện lỗi tại dòng bao nhiêu và gợi ý nguyên nhân lỗi.
Hình 4.6 Thông báo kết quả quá trình hợp dịch và liên kết
Sau khi đã sửa, làm lại thao tác của bước 4, quá trình lặp lại cho đến khi có thông báo: Build complete. 0 error(s), 0 warning(s)
Khi có thông báo này, chương trình đã hết lỗi về mặt cú pháp và có thể mô
phỏng hoạt động của chương trình. Chương trình tự động tạo ra các file cần thiết .lst, .map, .hex, obj. Trong đó file .hex là file mã máy sẽ được sử dụng để nạp vào bộ nhớ chương trình.
Trong cửa sổ thông báo này, Pinnacle 52sẽ cho biết thông tin về số byte dung lượng bộ nhớ mà chương trình sử dụng, ví dụ trong chương trình này là 39 byte.
Bước 6: Chương trình đã được dịch và liên kết tạo thành file mã máy. File mã
máy có đuôi .Hex được tạo ra trong cùng thư mục với file mã nguồn. Chương trình được lưu vào trong bộ nhớ ảo của bộ mô phỏng.
Chú ý: Nếu chương trình chưa được đưa vào bộ nhớ ảo của bộ mô phỏng, vào menu Simulator/Load Memory/Code Memory và chọn chương trình cần mô
phỏng. Bước này cũng được sử dụng nếu bạn đang tiến hành soạn thảo một chương trình mà muốn mô phỏng một chương trình khác.
Hình 4.7 Tải chương trình vào bộ nhớ để mô phỏng
Nháy chuột vào nút có dấu “...” bên cạnh “Filename to Load” để chọn chương trình cần tải vào bộ nhớ ảo, hoặc nhập trực tiếp tên và đường dẫn vào “Filename to Load”. Sau khi đã chọn xong, nhấn OK.
Chú ý: để mô phỏng được, chương trình phải có đuôi .hex hoặc .bin
Bước 7: Vào menu View để quan sát các thanh ghi, mã chương trình, bộ nhớ Ram trong, ngoài...
Ví dụ muốn quan sát mã chương trình ta vào View/Code Memory(
Disassembly). Cửa sổ Code xuất hiện cho phép ta quan sát địa chỉ trong Rom của từng lệnh ở cột thứ nhất, cột thứ hai biểu diễn mã Hexa của mã chương trình, cột thứ 3 biểu diễn mã ASCII của chương trình, cột thứ 4 biểu diễn các nhãn, cột thứ 5 là dòng mã, cột thứ 6 là các chú thích.
Hình 4.8 Cửa sổ Code phục vụ mô phỏng từng bước chương trình
Trong ví dụ này, ta muốn quan sát các cổng nên ta có thể vào View/Ports để quan sát hoạt động của các cổng.
Hình 4.9 Cửa sổ hiển thị trạng thái các cổng của 8051
Đến đây ta có thể quan sát hoạt động của chương trình. Có hai cách quan sát, thứ nhất cho chạy chương trình liên tục bằng cách ấn phím F5 (vào Simulator/Run), cách thứ hai là quan sát từng lệnh hoạt động bằng cách nhấn phím F8 (Simulator/
Single Step), mỗi lần nhấn tương ứng với một lệnh được thực hiện. Cách thứ hai là cách rất tốt để theo dõi các lệnh thực hiện và tìm lỗi. Đồng thời với việc cho chạy từng bước ta phải quan sát các thanh ghi, bộ nhớ xem chương trình có hoạt
động theo đúng ý định hay không. Để quan sát các thanh ghi ta vào View/Registers. Để quan sát bộ nhớ trong ta vào View/Internal Ram.
Chó ý:
- Menu View chứa hầu hết các vùng nhớ mà ta cần quan sát.
- Nên chọn cách thứ nhất để mô phỏng chương trình trong lần đầu mô
phỏng để sơ bộ quan sát hoạt động của cả chương trình, sau đó cho chạy từng bước để tìm lỗi.