Cấu trúc cơ bản gồm các phần như sau: ; DUA FILE LIET KE VAO
#include p16f877a.inc ; chỉ dẫn bao gồm file định nghĩa chip vi điều khiển
; KHAI BAO CAU HINH
__CONFIG _HS_OSC & _WDT_OFF &_LVP_OFF
; KHAI BAO BIEN O DAY
; DIA CHI BIEN O VUNG NHO BIEN BANK0
cblock 0x21
vong1, vong2, vong3
endc
variable giatricong=0x25
;CHUONG TRINH VI DIEU KHIEN CHAY TAI DAY
org 0x000; CHI DAN BIEN DICH
; NHAY TOI CHUONG TRINH CHINH goto main
; chi dan bien dich
; CHUONG TRINH CHINH BAT DAU TU DAY
org 0x005 main
; CHON BANK NHO CHUA THANH GHI TRISB banksel trisb
; XOA THANH GHI TRISB, CHO PHEP CAC CHAN PORTB LA DAU RA clrf trisb
; CHON BANK NHO CO THANH GHI PORTB banksel PORTB
; BAT DAU XU LY start:
; XOA BIT CO C bcf status,c
; DUA GIA TRI 1 VAO BIEN GIATRICONG: GIATRICONG=0000 0001 movlw d'1
movwf giatricong
; DUA DU LIEU GIATRICONG VAO THANH GHI TRUNG GIAN W loop1
movf giatricong,w
; CHUYEN GIA TRI CHO THANH GHI PORTB movwf portb
; GOI CHUONG TRINH TAO TRE 200MS call delay
; KIEM TRA BIT 7 CUA BIEN GIATRICONG: GIATRICONG=1000 0000? btfss giatricong,7
; NEU SAI NHAY TOI UPDATE DE DICH BIT SANG TRAI goto update
; NEU DUNG TRO LAI START BAT DAU LAI goto start
; DOAN DICH BIT: update: rlf giatricong,1 ; XU LY TIEP
goto loop1
abc1234567890123456789012345678111111: movlw d'2 ; CHUONG TRINH CON DELAY 200MS
DELAY: nop nop
movlw d'185 movwf vong1 movlw d'4 movwf vong2 movlw d'2 movwf vong3 decfsz vong1,f goto $-1 decfsz vong2,f goto $-3 decfsz vong3,f goto $-5
; THOAT KHOI CHUONG TRINH CON
return
; KET THUC MOI CHUONG TRINH
End
- Phần thứ nhất, bắt buộc phải có là phần khai báo bao hàm file định nghĩa
vi điều
khiển, đây là phần bắt buộc
#include p16f877a.inc
Thực ra chỉ dẫn này ra lệnh cho MPLAB copy toàn bộ nội dung của file
“C:\Program Files\Microchip\MPASM Suite\p16f877a.inc” vào phần đầu của chương trình vi điều khiển.
Nội dung của file này thực ra là định nghĩa các thanh ghi và các cài đặt trong chương trình.
Chúng ta xem lệnh trong vi điều khiển như sau: MOVLW B’00001111
Vi điều khiển không biết từ “PORTA” là gì cả, nó chỉ biết rằng thanh ghi đặc biệt có địa chỉ 0x05 trong bộ nhớ RAM là nơi lưu trữ trạng thái và điều khiển của các chân trên PORTA.
Như vậy để can thiệp đến các chân này người lập trình phải gửi lệnh MOVLW B’00001111
MOVWF 0x05,1
Tuy nhiên, có rất nhiều thanh ghi đặc biệt trong vi điều khiển, người sử dụng khơng thể nhớ được địa chỉ của nó để mà viết lệnh. Để tiện cho người lập trình, chương trình biên dịch MPLAB chuẩn bị sẵn file định nghĩa p16f877a.inc trong đó định nghĩa:
PORTA equ h’00005
Và người lập trình chỉ việc đưa dịng: #include p16f877a.inc
Toàn bộ nội dung của file trên sẽ được đưa vào chương trình và khi đó người dùng viết các dịng lệnh có PORTA thì trình dịch sẽ tự động hiểu là 0x05 (vì PORTA đã định nghĩa bằng 5)
Khi ta dùng vi điều khiển khác ví dụ như pic 18f4431 ta đơn giản thay đổi dòng bao hàm bằng: #include p18f4431inc
- Phần thứ hai, khai báo cấu hình cho vi điều khiển
__CONFIG _HS_OSC & _WDT_OFF &_LVP_OFF
Mục đích của khai báo cấu hình là cài đặt một số chế độ hoạt động của vi điều khiển như chọn nguồn xung dao động, tắt đồng hồ watchdog timer v.v
Các tham số cài đặt cho config xem ở file header
- Phần thứ ba, khai báo biến, sử dụng các phương pháp khai báo như đã giới
thiệu ở các mục trước
- Phần thứ tư, chương trình, kết thúc bởi nhãn END
- Các chương trình con phải đặt trước END, kết thúc chương trình con có lệnh return
- Trong chương trình có sử dụng các chỉ dẫn biên dịch ORG để phân bố bộ nhớ cho chương trình như đã đề cập trước đây