2.2.3.1. Lập trình dùng ngôn ngữ cơ sở Assembly
Tr−ớc tiên dùng một hệ soạn thảo văn bản bất kỳ để soạn thảo một tệp tin lệnh điều khiển PIC rồi l−u tập tin đó d−ới dạng file.asm. Mặc dù có thể soạn thảo trên bất kỳ hệ soạn thảo nào, nh−ng chúng ta nên soạn thảo trong môi tr−ờng có thể nhận dạng các câu lệnh và chú dẫn, ví dụ nh− MPLAB.
Để có thể nạp những câu lệnh vừa soạn thảo vào vi điều khiển, chúng ta cần một ch−ơng trình dịch từ mã lệnh sang mã máy, tạo thành tệp tin định dạng file.hex. Có thể tải phần mềm MPLAB miễn phí tại htp:/www.mirochip.com. Sau khi dùng phần mềm này biên dich tệp tin vừa soạn thảo ta sẽ nhận đ−ợc tệp tin file.hex, đó chính là tệp tin ta cần để nạp vào vi điều khiển.
Các câu lệnh dùng trong vi điều khiển PIC:
ADDLW: cộng một giá trị 8 bít vào thanh ghi W.
Cấu trúc: ADDLW L (L là hằng số). Vòng lệnh: 1 chu kỳ lệnh.
Giá trị cờ: cờ C trong thanh ghi trạng thái STATUS sẽ đ−ợc thiết lập là 1 nếu thanh ghi W tràn.
ADDWF: cộng hai thanh ghi W và f. Cấu trúc: ADDWF f,d.
Vòng lệnh: 1 chu kỳ lệnh.
Giá trị cờ: khi giá trị thanh ghi tràn, cờ C đ−ợc thiết lập là 1.
ANDLW: thực hiện phép toán AND giữa thanh ghi W với hàng số.
Cấu trúc: ANDLW L. Vòng lệnh: 1 chu kỳ lệnh.
Giá trị cờ: Khi kết quả là 0 thì cờ Z đ−ợc thiết lập 1, ng−ợc lại cờ Z thiết
lập là 0.
ANDWF: thực hiện phép toán AND giữa thanh ghi W và f.
Cấu trúc: ANDWF f,d. Vòng lệnh: 1 chu kỳ lệnh.
Giá trị cờ: cờ Z đ−ợc thiết lập là 1 nếu kết quả là 0, ng−ợc lại cờ Z đ−ợc thiết lập là 0.
BCF: xoá một bit trên thanh ghi f. Cấu trúc: BCF f,b.
Giá trị cờ: không thay đổi.
BSF: thiết lập giá trị 1 một bít trên thanh ghi f. Cấu trúc: BSF f,b.
Vòng lệnh: 1 chu kỳ lệnh.
Giá trị cờ: không thay đổi.
BTFSC: kiểm tra bit trên thanh ghi, nếu bằng
0 thì bỏ qua câu lệnh sau câu lệnh này. Cấu trúc: BTFSC f,b.
Vòng lệnh: 1 chu kỳ lệnh. Giá trị cờ: không thay đổi.
BTFSS: kiểm tra bit trên thanh ghi, nếu bằng
1 thì bỏ qua câu lênh sau câu lệnh này. Cấu trúc: BTFSS f,b
Vòng lệnh: 1 chu kỳ lệnh. Giá trị cờ: không thay đổi.
CALL: lời gọi hàm. Cấu trúc: CALL k. Vòng lệnh: 2 chu kỳ lệnh. Giá trị cờ: không thay đổi.
CLRF: xoá toàn bộ thanh ghi f. Cấu trúc: CLRF f.
Vòng lệnh: 1 chu kỳ lệnh.
Giá trị cờ: thiết lập cờ Z giá trị 1.
CLRW: xoá thanh ghi W.
Cấu trúc: CLRW
Vòng lệnh: 1 chu kỳ vòng lệnh. Giá trị cờ: cờ Z thiết lập 1.
CLRWDT: khởi tạo giá trị bộ đếm watchdog.
Cấu trúc: CLRWDT
Vòng lệnh: một chu kỳ vòng lệnh. Giá trị cờ: cờ TO, và PD thiết lập 1.
COMF: hàm lấy phần bù của thanh ghi f. Cấu trúc: COMF f,d
Vòn lệnh: 1 chu kỳ lệnh.
Giá trị cờ: cờ Z thiết lập 1 nếu kết quả bằng 0.
DECF: giảm giá trị thanh ghi f một đơn vị. Cấu trúc: DECF f,d.
Vòng lệnh: 1 chu kỳ lệnh
DCFSZ: giảm giá trị f một đơn vị, bỏ qua lệnh tiếp theo nếu kết quả là 0.
Cấu trúc: DCFSZ f,d
Vòng lệnh: 1 chu kỳ vòng lệnh, nếu có nhảy lệnh thì là 2 chu kỳ lệnh.
Giá trị cờ: không thay đổi.
GOTO: nhảy tới một vị trí trong bộ nhớ ch−ơng trình.
Cấu trúc: GOTO k
Vòng lệnh: 2 chu kỳ lệnh. Giá trị cờ: không đổi.
INCF: tăng giá trị thanh ghi f một đơn vị. Cấu trúc: INCF f,d
Vòng lệnh: 1 chu kỳ lệnh
Giá trị cờ: cờ Z thiết lập 1 nếu kết quả bằng 0
INCFSZ: tăng giá trị cờ f lên một đơn vị, bỏ
qua lệnh tiếp theo nếu kết quả bằng 0. Cấu trúc: INCFSZ f,d
Vòng lệnh: 1 chu kỳ lệnh, nếu xảy ra nhảy lệnh thì là 2 chu kỳ.
IORLW: thực hiện phép toán OR giữa thanh ghi W và hằng số L.
Cấu trúc: IORLW L Vòng lệnh: 1 chu kỳ lệnh.
Giá trị cờ: cờ Z thiết lập 1 nếu kết quả là 0
IORWF: thực hiện phép toán OR giữa W và
thanh ghi f.
Cấu trúc: IORWF f,d Vòng lệnh: 1chu kỳ lệnh
Giá trị cờ: cờ Z thiết lập 1 nếu kết quả là 0.
MOVF: chuyển giá trị thanh ghi f. Cấu trúc: MOVF f,d
Vòng lệnh: 1chu kỳ lệnh
Giá trị cờ: cờ Z thiết lập 1 nếu kết quả là 0.
MOVLW: truyền giá trị L vào thanh ghi W.
Cấu trúc: MOVLW L Vòng lệnh: 1chu kỳ lệnh. Giá trị cờ: không thay đổi.
MOVWF: truyền giá trị thanh ghi W sang
thanh ghi f.
Cấu trúc: MOVWF f Vòng lệnh: 1 chu kỳ lệnh. Giá trị cờ: không thay đổi.
NOP: lệnh không thực hiện chức năng gì.
Cấu trúc: NON
Vòng lệnh: 1 chu kỳ. Giá trị cờ: không thay đổi.
RETFIE: trả về từ thủ tục ngắt
Cấu trúc: RETFIE
Vòng lệnh: 2 chu kỳ lệnh Giá trị cờ: không thay đổi
RETLW: trả về giá trị k vào thanh ghi W từ
ch−ơng trình con
Cấu trúc: RETLW k Vòng lệnh: 2 chu kỳ Giá trị cờ: không thay đổi
RETURN: trả về từ ch−ơng trình con.
Cấu trúc: RETURN
Vòng lệnh: 2 chu kỳ. Giá trị cờ: không thay đổi.
RLF: dịch trái một bít. Cấu trúc: RLF f,d Vòng lệnh: 1 chu kỳ.
Giá trị cờ: bít dịch chuyển sẽ đ−ợc chuyển tới cờ C.
RRF: dịc phải một bít. Cấu trúc: RRF f,d Vòng lệnh: 1 chu kỳ.
Giá trị cờ: bit dịch chuyển sẽ chuyển tới
cờ Z.
SLEEP: trở về trạng thái chờ.
Cấu trúc: SLEEP
Vòng lệnh: 1 chu kỳ.
Giá trị cờ: thiết lập 1 cờ TO, thiết lập 0
cờ PD.
SUBLW: trừ thanh ghi W cho hằng số L.
Cấu trúc: SUBLW L Vòng lệnh: 1 chu kỳ.
Giá trị cờ: (C=1,Z=0) nếu kết quả là
d−ơng, (C=1, Z=1) nếu kết quả bằng 0, (C=0,Z=0) nếu kết quả là âm
SUBWF: trừ thanh ghi f cho thanh ghi W
Cấu trúc: SUBWF f,d Vòng lệnh: 1 chu kỳ
Giá trị cờ: (C=1, Z=0) nếu kết quả là d−ơng, (C=1, Z=1) nếu kết quả bằng 0, (C=0, Z=0) nếu kết quả là âm.
SWAPF: quay vòng bộ 4 bit trên thanh ghi f Cấu trúc: SWAPF f,d
Vòng lệnh: 1 chu kỳ Giá trị cờ: không thay đổi
XORLW: thực hiện phép toán XOR giữa thanh ghi W và hằng số L
Cấu trúc: XORLW L
Vòng lệnh: 1 chu kỳ lệnh Giá trị cờ: cờ Z thiết lập 1 nếu kết quả là 0
XORWF: thực hiện phép toán XOR giữa thanh ghi W và thanh ghi f.
Cấu trúc: XORWF f,d Vòng lệnh: 1 chu kỳ lệnh. Giá trị cờ: cờ Z thiết lập 1 nếu kết quả là 0.
2.2.3.2. Lập trình dùng ngôn ngữ bậc cao C
Cũng t−ơng tự nh− trên, chúng ta phải soạn thảo tệp tin dùng ngôn ngữ C, sau đó l−u tập tin d−ới dạng file.c. Tải thêm hai tệp tin pcwhupd.exe và mplab_css_plugin_install.exe sau đó chạy hai tệp tin này, nh− vậy ta đã có thể biên dịch tệp tin ngôn ngữ C vừa soạn thảo sang tệp tin định dạng file.hex.
Các cấu trúc và câu lệnh dùng soạn thảo cho vi điều khiển hoàn toàn giống nh− cấu trúc lập trình C thông th−ờng. ở phần thiết kế sẽ có những ví dụ cụ thể.
Để nạp tệp tin mã máy vào vi điều khiển cần có công cụ nạp vi điều khiển và phần mềm nạp ứng với công cụ này. Với những vi điều khiển PIC th−ờng dùng chúng ta có thể nạp dễ dàng nhờ phần mềm Winpic8000, ICPro.., trên mạch nạp PG2C rất rễ tìm kiếm và sử dụng, hoặc mạch nạp IDC2.