pic系列單片機c語言
『壹』 pic系列單片機用c語言編程時,讓他執行A/D轉換的指令是什麼
在C語言里沒有指令,只有語句,用C語言執行A/D轉換如下:
//A/D轉換初始化子程序
void
adinitial()
{
ADCON0=0x41;
//選擇A/D通道為RA0,且打開A/D轉換器
//在工作狀態,使A/D轉換時鍾為8Tosc
ADCON1=0X8E;
//轉換結果右移,及ADRESH寄存器的高6位為"0"
//把RA0口設置為模擬量輸入方式
ADIE=1;
//A/D轉換中斷允許
PEIE=1;
//外圍中斷允許
TRISA0=1;
//設置RA0為輸入方式
}
//讀ADRESH寄存器就能得到AD轉換值了,
匯編的如下:
ADINT
MOVLW
0X51
MOVWF
ADCON0
;選擇A/D轉換通道為RA2,且打開A/D在工
;作狀態,並使A/D轉換時鍾為8tosc
BANKSEL
ADCON1
;選BANK1體
MOVLW
0X80
MOVWF
ADCON1
;轉換結果右移,即ADRESH寄存器的高6位;為「0」,且把RA2口設置成模擬量輸入口
CLRF
PIE1
;禁止其它中斷
BSF
PIE1,ADIE
;A/D轉化中斷允許
BSF
TRISA,2
;設置RA2口為輸入方式
BSF
INTCON,PEIE
;外圍中斷允許
BSF
INTCON,GIE
;總中斷允許
BCF
STATUS,RP0
;返回BANK0
RETURN
『貳』 PIC單片機c語言中如何嵌套匯編
3樓的方法是用keil開發51單片機時候潛入匯編的
方法,對於pic單片機來說,不能這楊編譯。因為KEIL不能編譯pic單片機的C語言和匯編語言,必須用MPLAB+PICC或者MPLAB+
mc編譯器
。
一般pic12、16系列的8位中低端單片機的編譯器潛入匯編是用
_asm("
匯編單句語句
");
如果要輸入一大段匯編語句,則用:
#asm
N條匯編語句
#endasm
『叄』 PIC單片機C語言編譯器的問題
不能,mplab要和picc連接起來才能編譯C,對於你准備用PIC18F433,那你也可以下載picc18 來用
『肆』 PIC系列單片機中c語言頭文件中的一個定義是什麼意思
注意是PROTO,而不是PORTO。
宏定義
表示外部變數extern
『伍』 關於PIC單片機C語言編程
1:第一個問號:是; 第二個問號:不一定;
2:一些C30有多種類型版本,你說的30C和36可能不是指同一種類型。
3:沒破解的編譯器過期就不能編譯程序了。想用就需要重裝(貌似它會在系統內記錄的,所以應該是重裝操作系統才行)。
4:肯定不可靠。我有過編譯經歷,破解的編譯出來的在邏輯上就會有問題。但這不影響普通學生入門者做設計。如果你是做工業、航天領域設計的,你的領導也不會讓你用破解版或者未注冊版。所以現在很多單位寧願用匯編來編譯程序。
PICC有支持 PIC10/12/16/18/24/32系列單片機 的C編譯器。同時也支持dsPIC30/33 系列DSC晶元的C編譯器
『陸』 一般8位PIC單片機使用C語言還是匯編語言編程,好像編譯器不是支持所有類型的單片機
PIC單片機的C語言編譯器是分類支持各類PIC單片機的。
一般做工業產品的公司大多用匯編來編寫程序,原因有:
1:pic的8位單片機一般ROM和RAM都相對較小,而現在的PIC的C編譯器在優化方面做的不是很好,簡單的一個C語句編譯器能編出很多行匯編代碼。所以有些開發人員認為用c還不如直接用匯編寫。
2:因為PIC的C編譯器不是免費的,破解版的又存在一些邏輯漏洞什麼的。而用pic單片機應用的大多是一些需要穩定性極高的控制場合,所以很多開發公司都乾脆直接使用匯編來寫。
『柒』 單片機 pic c語言
PORTG是單片機裡面的寄存器,而lcd_wz8是你在內存裡面開出來的一個位元組空間。
所以對lcd_wz8空間操作,當然不會對PORTG操作了。
你可以試一下這個結構
union {
struct
{
unsigned b0: 1 _at_ RG0;
unsigned b1: 1 _at_ RG1;
unsigned b2: 1 _at_ RG2;
unsigned b3: 1 _at_ RG3;//bit_wz8的低四位
unsigned b4: 1 _at_ RA0;
unsigned b5: 1 _at_ RA1;
unsigned b6: 1 _at_ RA2;
unsigned b7: 1 _at_ RA3; //bit_wz8的高四位
} bit_wz8;
unsigned char xs_wz8;
} lcd_wz8;
這個聯合我也沒試過,你可以試下下。
也就是分配變數時候,指定存儲地址。把存儲地址跟寄存器地址匹配成一樣,應該就可以了。
『捌』 PIC單片機 c語言編程
以DIP-40的PIC16F877A來舉例 燈閃動頻率為1秒
void Delay_Ms(unsigned char n);
void main(void)
{
while(1)
{
RA0 = 1;//2腳輸出
//11腳是供電
RD2 = 1;//21腳輸出
trisA = 0x04; //4腳RA2作為輸入
if(RA2 == 0) //如果4腳為低電平
{
//執行代碼
}
else //如果4腳為高電平
{
//執行代碼
}
Delay_Ms(1000); //延時1秒
RA0 = 0;//2腳輸出
//11腳是供電
RD2 = 0;//21腳輸出
Delay_Ms(1000); //延時1秒
}
}
void Delay_Ms(unsigned char n) //延時程序
{
unsigned int i;
unsigned char j;
for(j=0;j<n;j++)
{
for(i=0;i<Fosc/44000;i++)
{
}
}
}
『玖』 有幾行PIC單片機的c語言程序代碼看不懂,請教一下。
1 static volatile unsigned TMR1 @ 0x0E;
0x0E 是寄存器地址。 表示這個TMR1是寄存器0x0E的值。 具體這個寄存器是做什麼用的,需要看你晶元的datasheet,比如 16F874A 16F877A 這個都是計數寄存器的地址。
2 PopQueue應該是一個彈出隊列的函數。
將隊列首彈出到msg中,返回值為PopSuccess表示取數據成功,取到的數據會存在msg中。
一般用於中斷傳數據給主線程。這個在主線程中接收。
3 __CONFIG(x) 一般是配置寄存器的。