|
簡單一份PIC C語言的編程開發(fā)
初談如何從匯編轉(zhuǎn)向 PICC
因?yàn)?HIDE-TECH PICC 破解版很多,所以 HIDE PICC 有比其它 PICC 有更多的用戶,雖然
它的編譯效率不是最好。最好的是 CCS,但沒破戒版。 。 。 ,不過用 HIDE PICC 精心安排函數(shù)
一樣可以獲得很高的編譯效率,還是人腦是第一的。
當(dāng)然要求你要有 C 語言的基礎(chǔ)。PICC 不支持 C++,這對于習(xí)慣了 C++的朋友還得翻翻 C 語
言的書。
C 代碼的頭文件一定要有
#include<pic.h>
它是很多頭文件的集合,C 編譯器在 pic.h 中根據(jù)你的芯片自動栽入相應(yīng)的其它頭文件。
這點(diǎn)比匯編好用。
載入的頭文件中其實(shí)是聲明芯片的寄存器和一些函數(shù)。
順便摘抄一個(gè)片段:
static volatile unsigned char TMR0 @ 0x01;
static volatile unsigned char PCL @ 0x02;
static volatile unsigned char STATUS @ 0x03;
可以看出和匯編的頭文件中定義寄存器是差不多的。如下:
TMR0 EQU 0X01;
PCL EQU 0X02;
STATUS EQU 0X03;
都是把無聊的地址定義為大家公認(rèn)的名字。
一:怎么附值?
如對 TMR0 附值:
匯編中:MOVLW 200;
MOVWF TMR0;當(dāng)然得保證當(dāng)前頁面在 0,不然會出錯(cuò)。
C 語言:TMR0=200;//無論在任何頁面都不會出錯(cuò)。
可以看出來 C 是很直接了當(dāng)?shù)摹2⑶易畲蠛锰幨遣僮饕粋(gè)寄存器時(shí)候,不用考慮頁面的問
題。一切由 C 自動完成。
二:怎么位操作?
匯編中的位操作是很容易的。在 C中更簡單。
C 的頭文件中已經(jīng)對所有可能需要位操作的寄存器的每一位都有定義名稱:
如:PORTA 的每一個(gè) I/O口定義為:RA0、RA1、RA2。 。 。RA7。
OPTION 的每一位定義為:PS0、PS1、PS2 、PSA 、T0SE、T0CS、INTEDG 、RBPU。
可以對其直接進(jìn)行運(yùn)算和附值。
如:
RA0=0;
RA2=1;
在匯編中是:
BCF PORTA,0;
BSF PORTA,2;
可以看出 2者是大同小異的,只是 C 中不需要考慮頁面的問題。
三:內(nèi)存分配問題:
在匯編中定義一個(gè)內(nèi)存是一件很小心的問題,要考慮太多的問題,稍微不注意就會出錯(cuò)。比如 16 位的運(yùn)算等。用 C就不需要考慮太多。
下面給個(gè)例子:
16 位的除法(C 代碼) :
INT X=5000;
INT Y=1000;
INT Z=X/Y;
而在匯編中則需要花太多精力。
給一個(gè)小的 C 代碼,用 RA0 控制一個(gè)LED閃爍:
#include<pic.h>
void main(){
int x;
CMCON=0B111; file://關(guān)掉 A口比較器,要是有比較器功能的話。
ADCON1=0B110; file://關(guān)掉 A/D功能,要是有 A/D功能的話。
TRISA=0; file://A口全為輸出。
loop:RA0=!RA0;
for(x=60000;--x;){;} file://延時(shí)
goto loop;
}
說說 RA0=!RA0 的意思:PIC 對 PORT 寄存器操作都是先讀取----修改----寫入。
上句的含義是程序先讀 RA0,然后取反,最后把運(yùn)算后的值重新寫入 RA0,這就實(shí)現(xiàn)了閃
爍的功能。
完整的pdf格式文檔51黑下載地址(共29頁):
Pic單片機(jī)C語言編程.pdf
(200.52 KB, 下載次數(shù): 579)
2018-1-17 12:00 上傳
點(diǎn)擊文件名下載附件
|
評分
-
查看全部評分
|