pic單片機編程
『壹』 PIC單片機編程軟體
KEIL沒辦法編譯PIC的任何單片機的程序
用PIC單片機生產商MICROCHIP公司自己推出的MPLAB ide軟體開發程序,免費的。
但這個軟體默認安裝的沒有C編譯器(默認的只能編譯匯編文件)。你還得去Microchip那裡下載PICC for PIC18(HI-TECH公司做的,這公司被MICROCHIP收購了),或者是Microchip公司自己開發MPLAB C18編譯器。這些編譯器安裝後自動嵌入到MPLAB內部。
反正這兩個都是收費的(最便宜的PICC買800rmb)。但網上有很多關於他們的破解版
『貳』 microchip單片機pic怎麼編程
microchip 的PIC 單片機,使用 MPLAB 編譯器進行程序編譯。
比較cao蛋的是,MPLAB 具有多種編譯器,版本相互不兼容。
其中市場主打 的PIC16F 系列,多數採用 MPLAB IDE 編譯器(本人用V8.8版本(破解的,噓),新的應該是V8.9版本,不過本人沒多關注,也不知道正不正確)。
MPLAB 編譯器,在編程的時候,必須選擇單片機型號,而本人使用的IDE V8.8版,並不能支持所有的PIC16系列單片機型號(最起碼,最近使用的PIC16F1513就沒有支持,在MPLAB X IDE里有支持)
而microchip 的高級單片機 PIC18系列,則以 MPLAB X IDE 編譯器為主(行業稱「十」版本),不過用了IDE V8.8後,再下載使用 IDE 10(就是上面的十版本)。你會覺得畫風突變,完全找不著北,連配置字、用戶程序版本號都沒法兼容使用。前面熟悉的IDE,完全沒法發揮任何作用。你又得重新開始學習一個新的編程軟體(害得哥在新項目上浪費了N多時間)。
最可恨的是,IDE 10 把市場上銷售的PICKIT 3 的離線離線下載功能給搞死了(一插上KIT 3,IDE 10就自動升級KIT 3 的內部固件程序)。然後哥只能給它貼上「研發專用」標簽!
PIC 的單片機很多地方要注意的,不用的特殊功能(特別是AD)不是你不開就好的,而是你必須關閉才行。
PIC 單片機有自己的一套 匯編,如果你用匯編,你必須重新學習它的匯編語言。如果你使用C,那還好,多數是兼容的(除了 程序續行(就是單行程序太長,進行多行顯示))。不過哥沒整好它的混編(不知道是哥能力不夠,還是破解安裝少東西,都是編譯錯誤),沒法發揮它的高效。PIC 單片機的 除法運算1000個周期、左右移16位無法編譯、硬堆棧層限制(就是函數內 調用函數 調用函數 調用函數……,最明顯的就是遞歸調用被限死)…………一堆弱點!
『叄』 pic系列單片機用c語言編程時,讓他執行A/D轉換的指令是什麼
AD轉換不是一條指令就可以完成的,它要先經過埠設置,AD設置等過程後才能准備進入AD轉換,下例是從北航的<PIC16單片機C程序設計與PROTEUS模擬>一書中得到的啟發編制的程序,希望對你能有幫助.建議你看一下這本書,對初學和想進一步提高在PIC單片機應用編程等會有用的.
附圖是對應程序的,在模擬時調整電位器可以看到AD結果的變化,並通過計算器可以驗證程序的正確性.
//ADl轉換示例,可以改變輸入電壓、AD通道、結果對齊方式等,看其變化
#include<pic.h>
__CONFIG(0x3F39);//配置位設置
voidmain(void)
{ chari,X,Y;
TRISA=0xFF; //將所有的A口設置為輸入
TRISE=0x03; //將所有的E口設置為輸入
TRISD=0; //C口與D口全為輸出
TRISC=0;
ADCON1=0b10000000; //設置AD結果對齊方式、AD時鍾選擇(與ADCON0的位7,6一起),AD埠設置等
ADCON0=0b01011001; //AD時鍾選擇(與ADCON1的位6一起),通道選擇,AD模塊使能
while(1)
{ NOP();
for(i=0;i<3;i++) //延時時間大約20us
NOP();
ADGO=1; //開始AD
while(ADGO==1); //等待AD轉換完成
ADIF=0;
X=ADRESH; //讀取AD結果高位元組至C口
PORTC=X;
Y=ADRESL; //讀取AD結果低位元組至D口
PORTD=Y;
};
}
『肆』 一般8位PIC單片機使用C語言還是匯編語言編程,好像編譯器不是支持所有類型的單片機
PIC單片機的C語言編譯器是分類支持各類PIC單片機的。
一般做工業產品的公司大多用匯編來編寫程序,原因有:
1:pic的8位單片機一般ROM和RAM都相對較小,而現在的PIC的C編譯器在優化方面做的不是很好,簡單的一個C語句編譯器能編出很多行匯編代碼。所以有些開發人員認為用c還不如直接用匯編寫。
2:因為PIC的C編譯器不是免費的,破解版的又存在一些邏輯漏洞什麼的。而用pic單片機應用的大多是一些需要穩定性極高的控制場合,所以很多開發公司都乾脆直接使用匯編來寫。
『伍』 求PIC單片機匯編示常式序
想知道哪種,給你粘貼,下面是一些計運算元程序
;******************************************************************
;一、十六位二進制轉換為BCD數子程序
;******************************************************************
MOVLW 10H ;
MOVWF CNT ;
BCF STATUS,C ;
CLRF R2 ;
CLRF R1 ;
CLRF R0 ;
LOOP RLF AL ;
RLF AH ;
RLF R0 ;
RLF R1 ;
RLF R2 ;
DECFSZ CNT ;
GOTO ADJDEC ;
RETURN
ADJDEC MOVLW R0 ;
MOVWF FSR ;
CALL ADJBCD ;
MOVLW R1 ;
MOVWF FSR ;
CALL ADJBCD ;
MOVLW R2 ;
MOVWF FSR ;
CALL ADJBCD ;
GOTO LOOP ;
ADJBCD MOVLW 3H ;
ADDWF INDF,W ;
MOVWF TMP ;
BTFSC TMP,3 ;
MOVWF INDF ;
MOVLW 30H ;
ADDWF INDF,W ;
MOVWF TMP ;
BTFSC TMP,7 ;
MOVWF INDF ;
RETURN
;***************************************************************************
;乘法宏
;兩個八位無符號數乘法,乘積為十六位。部分積右移相加演算法:乘數帶進位右移一位,
;檢查進位是否為一,若是一,部分積寄存器加被乘數,否則不加;然後部分積寄存器
;帶進位右移一位;重復上述過程直至循環次數為八結束。
;***************************************************************************
;宏的引用格式:MUL A,B
;完成操作: (A)*(B)---(A,B)
;影響狀態位:C、Z和DC
;8*8位乘法宏MUL,結果的高位元組部分存入(A),低位元組存入(B)
;***************************************************************************
MUL MACRO A,B ;
LOCAL MLOOP ;
;****************************************************************************
;如只用乘法子程序,就下段。
;****************************************************************************
CLRF TMPA ;
CLRF TMPB ;
MOVLW 8 ;
MOVWF CNT ;
MOVF A,W ;
BCF STATUS,C ;
MLOOP RRF B ;
BTFSC STATUS,C ;
ADDWF TMPA ;
RRF TMPA ;
RRF TMPB ;
DECFSZ CNT ;
GOTO MLOOP ;
MOVF TMPA,W ;
MOVWF A ;
MOVF TMPB,W ;
MOVWF B ;
;*****************************************************************************
ENDM
;*****************************************************************************
;除法宏DIV
;除法是乘法的逆運算。與十進制長除法類似,從被除數的最高有效位開始,把被除數左移
;一位至余數上,如果余數不夠減去除數,則商寄存器左移,移入位為零,反之移入位為一
;余數減去被除數,把被除數的下一位移至除數上。重復上述過程直至處理完所有位。
;******************************************************************************
;宏的引用格式:DIV A,B
;完成操作: (A)為商部分,(B)為余數部分
;影響狀態位:C、Z和DC
;8/8位除法宏DIV,結果(A)為商部分,(B)為余數部分
;***************************************************************************
DIV MACRO A,B ;
LOCAL MLOOP ;
;****************************************************************************
;如只用除法子程序,就下段。
;****************************************************************************
MOVF A,W ;
MOVWF TMPA ;
MOVF B,W ;
MOVWF TMPB ;
MOVLW 8 ;
MVOWF CNT ;
CLRF A ;
CLRF B ;
DLOOP BCF STATUS,C ;
RLF TMPA ;
RLF B ;
MOVF TMPB,W ;
SUBWF B,W ;
BTFSC STATUS,C ;
MOVWF B ;
RLF A ;
DECFSZ CNT ;
GOTO DLOOP ;
;****************************************************************************
ENDM ;
;****************************************************************************
;間接定址
CLRF R0 ;清除R0寄存器里的內容
MOVLW R0 ;
MOVWF FSR ;將R0寄存器的地址送入間接定址指針FSR
MOVF INDF,0 ;
MOWF TEMP ;將間接定址指針FSR所指地址R0寄存器里的內容送入TEMP
MOVLW 88H ;
MOVWF INDF ;將88H送入間接定址指針FSR所指地址R0寄存器里
;*******************************************************************************
;將兩位BCD數送入顯示
;顯示十位BCD數
DISPLAY SWAPF TEMP,W ;將TEMP寄存器里的內容的高低位元組交換並送入W
ANDLW 0FH ;將0FH與W寄存器里的內容相與並送入W
CALL CODE_TAB ;查表取段碼
MOVWF PORTD ;送入PORTD埠
MOVLW 1H ;
MOVWF PORTC ;選通PORTC,1
CALL DELAY ;調用延時
;顯示個位BCD數
MOVF TEMP,W ;
ANDLW 0FH ;
CALL CODE_TAB ;
MOVWF PORTD ;
MOVLW 2H ;
MOVWF PORTC ;
CALL DELAY ;
;*********************************************************************************************
;16位二進制除以8位二進制
;*******************************************************************************************
DIV16
MOVF A,0
MOVWF DIV_H
MOVF BX,0
MOVWF DIV_L ;被除數高低位元組分別送進各寄存器
MOVLW 9H
MOVWF DIVB ;將除數送進寄存器
MOVLW 10H
MOVWF CNT ;按被除數位數設定移位次數
CLRF AL
CLRF AH
CLRF BX
DLOOP
BCF STATUS,C
RLF DIV_L
RLF DIV_H
RLF BX
MOVF DIVB,W
SUBWF BX,W
BTFSC STATUS,C
MOVWF BX
RLF AL
RLF AH
DECFSZ CNT
GOTO DLOOP
RETURN
;****************************************************************************************************
;8位乘以16位二進制乘法運算程序
;****************************************************************************************************
MUL8
CLRF TMPA ;清除積的高位寄存器
CLRF TMPB ;清除積的中位寄存器
CLRF TMPC ;清除積的低位寄存器
MOVLW 10H ;因為8位二進制乘以16位二進制,乘數為16位,移位乘數,所以移位次數為16次
MOVWF CNT ;
MOVF BX,W ;將8位被乘數送進W
BCF STATUS,C;
MLOOP RRF TEMP_H ;
RRF TEMP_L ;帶C循環右移16位乘數
BTFSC STATUS,C ;
ADDWF TMPA ;
RRF TMPA ;
RRF TMPB
RRF TMPC
DECFSZ CNT ;
GOTO MLOOP ;
MOVF TMPA,W ;
MOVWF AA ;
MOVF TMPB,W ;
MOVWF A
MOVF TMPC,W ;將乘積送進各寄存器。
MOVWF BX
RETURN
『陸』 PIC單片機C語言編程,二進制如何轉換成十六進制。
二進制到十六進制不需要轉換,C語言的十六進制在計算機中也是作二進制處理。
ADC的轉換值通過液屏顯示,你需要把ADC值轉換為字元的ASCII碼。
比如ADC=123,你要把123的二進制碼轉換為123字元對應的二進制碼。
方法1:
使用#include<stdio.h>中 的字元串轉換函數sprintf:
sprintf的一個功能:
int a = 12345;
char s[10] = "";
sprintf(s,"%d",a);
那麼此時有
s[0]=1; s[1]=2; s[2]=3; s[3]=4; s[4]=5;
char s[10] = "12345 ";
也就是把一個int型按逐個字元轉換成了char型,存在數組中的是字元型,ASC碼
這樣就能把字元的ASC碼直接寫入屏顯示了。
2.把ADC的每一位值摳出,再每位數加上'0':
如ADC=123,
a=ADC/100=123/100=1,A=a+'0',就得到ADC 的最高位字元,就是'1'.
b=ADC/10%10=123/10%10,就得到ADC 的第二位字元'2' .
『柒』 pic單片機可以用c編程嗎用什麼編譯軟體他是屬於51系列的嗎
PIC單片機可以用C,
編譯環境(也就是編程軟體)為MPLAB,他不屬於51系列.