Phần 4: Chương trình biên dịch CCS cho vi điều khiển PIC

0
1186

Các chỉ thị tiền xữ lý mô tả thông tin kỹ thuật thiết bị báo cho chương trình biên dịch thông tin quan trọng về phần cứng chỉ định của thiết bị. Những chỉ thị tiền xử lý đó là #device, #fuses, và #id

1. #DEVICE

Chỉ thị tiền xử lý #device chỉ định loại vi xữ lý sử dụng trong chương trình.

#device chip options

chip là tên của vi điều khiển chỉ định, chẳng hạn như PIC16C74

options : Là tùy chọn để tác động đến quản lý bộ nhớ, điều khiển A/D, hoặc khả năng debugging (gỡ rối). Tùy chọn quản lý bộ nhớ cho phép người lập trình chỉ định số bit sử dụng để lưu con trỏ trỏ đến bộ nhớ

*=5 sử dụng con trỏ 5-bit (Tất cả các dòng)

*=8 sử dụng con trỏ 8 bit (dòng 14 và 16 bit)

*=16 sử dụng con trỏ 16 bit (dòng 14 bit)

con trỏ 5 bit chỉ có thể địa chỉ lên đến 32 byte RAM nhưng nó yêu cầu rất ít bộ nhớ để lưu trữ con trỏ. Một con trỏ 16-bit thì ngược lại , yều cầu đến 2 byte của bộ nhớ để lưu trữ con trỏ nhưng có thể địa chỉ lên đến 65536 bytes của RAM.

Tùy chọn A/D kiểm soát số bit đọc từ bộ chuyển đổi tương tự sang số bởi hàm read_adc(). Tùy chọn này được định dạng theo cách:

ADC=x    với x là số bít mà hàm read_adc() trả về

Cuối cùng là tùy chọn điều khiển debug. Nếu chỉ định, đoạn code tạo ra được tương thích với phần mềm Microchips ICD debugging

Cả hai cờ chip và options là tùy chọn, vì vậy nhiều dòng #device có thể sử dụng để định nghĩa đầy đủ thiết bị, cần lưu ý rằng #DEVICE đi kèm với một chíp chỉ định sẽ xóa tất cả các thiết lập #DEVICE và #FUSE trước đó  và lưu ý rằng mỗi chương trình nên có chính xác một #device với một chíp chỉ định

Ví dụ:

#device PIC16C74

#device PIC16C67 *=16

#device *=16  ICD=TRUE

#device PIC16F877 *=16 ADC=10

#device %f=.

printf(“%f”,.5); //will print .5, without the directive it will print 0.5

2. #FUSE

Cú pháp:

#FUSE options

options là khác nhau phụ thuộc vào loại PIC . Danh sách các tùy chọn được liệt kê ở phần đầu file thiết bị .h (ví dụ 16f877a.h) .

Khi lập trình Pic, bạn phải thiết lập cầu chì (Fuse). Ví dụ với Pic 16f877a nếu bạn dùng thạch anh 20Mhz , cầu chì phải set là HS, Bảo vệ code không cho đọc ngược :Protect,…

Một vài thiết lập cầu chì thông dụng:

·   LP, XT, HS, RC

·   WDT, NOWDT

·   PROTECT, NOPROTECT

·   PUT, NOPUT   (Power Up Timer)

·   BROWNOUT, NOBROWNOUT

Ví dụ: thiết lập cầu chì để sử dụng dao động tốc độ cao, phát hiện brownout và không sử dụng watchdog

#fuse HS, BROWNOUT, NOWDT

3. #ID

Vi điều khiển PIC chứa đựng vùng nhớ được thiết kế như là vùng nhớ ID (User ID). Kích cỡ và khả năng truy cập bộ nhớ ID phụ thuộc vào thiết bị đang được sử dụng. Ví dụ, PIC16f877 có 4 byte để dành cho ID, và ID chỉ có thể truy cập trong khi chương trình và kiểm tra (verify operation) sau khi nạp. Pic 18f458 có 8 byte để dành cho ID, và bộ nhớ ID có thể truy xuất khi chương trình, kiểm tra sau khi nạp và trong quá trình chạy( thông qua lệnh TBLRD và TBLWT trong assembler).

Ví dụ:

#byte   TABLAT = 0x0FF5
#byte   TBLPTRL = 0x0FF6
#byte   TBLPTRH = 0x0FF7
#byte   TBLPTRU = 0x0FF8int8 table_read(int8 page, int16 addr)  {
int8 ret;TBLPTRU = page;
TBLPTRH = addr >> 8;
TBLPTRL = addr & 0xff;#asm
TBLRD
#endasm

ret = TABLAT;

return(ret);
}

myID = ((int16)table_read(0x20,0) << 12) + ((int16)table_read(0x20,2) << 8) + ((int16)table_read(0x20,4) << 4) + (int16)table_read(0x20,6) ;

 

Leave a Reply