| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
picc中不支持位變量定義么? | 
  
| 作者:formulaone 欄目:單片機 | 
我在程序中 定義的 bit flag; 編譯后說句法錯誤。 不知道怎么回事? 那位大蝦幫忙解釋一下。  | 
  
| 2樓: | >>參與討論 | 
| 作者: systemchip 于 2005/12/19 19:49:00 發(fā)布:
         可以這樣定義 也可以定義一個結(jié)構(gòu)體。把你的程序貼出來看看  | 
  |
| 3樓: | >>參與討論 | 
| 作者: formulaone 于 2005/12/19 20:56:00 發(fā)布:
         程序片斷 #include<p30f2012.h> . . . bit flag; . . . int main(void) { . . . if (flag) { ... } . . . }  | 
  |
| 4樓: | >>參與討論 | 
| 作者: systemchip 于 2005/12/19 22:38:00 發(fā)布:
         你用的是HI TECH的dsPICC嗎?  | 
  |
| 5樓: | >>參與討論 | 
| 作者: child_hood 于 2005/12/20 16:23:00 發(fā)布:
         沒定義bank bank1 bit flag  | 
  |
| 6樓: | >>參與討論 | 
| 作者: afanti 于 2005/12/20 16:38:00 發(fā)布:
         re 你用的是picc還是dspicc? 在picc中是允許這樣定義的,只是bit變量只能定義為全局變量或者是靜態(tài)變量,不能是局部變量。  | 
  |
| 7樓: | >>參與討論 | 
| 作者: picexpert 于 2005/12/20 17:22:00 發(fā)布:
         static bit 就可以了 static bit 就可以了  | 
  |
| 8樓: | >>參與討論 | 
| 作者: formulaone 于 2005/12/20 21:51:00 發(fā)布:
         可能是編譯器版本的問題。 static bit 我試了,不行。 bank bit flag 我沒使,不知道行不行。 今天我看到資料說dspicC不支持位定義。只好用結(jié)構(gòu)體了。謝了各位。 我再問個問題。我的mplab中的watch窗口看不了變量。不知道為什么?  | 
  |
| 9樓: | >>參與討論 | 
| 作者: formulaone 于 2005/12/20 21:53:00 發(fā)布:
         程序清單 /********************************************************************** * Filename: main.c * * Date: 11/14/2005 * * File Version: 1.00 * * Tools used: MPLAB -> 7.22 * * Compiler -> C30* * Assembler -> * * Linker -> * * Linker File: p30f2012.gld * *由 c51 的程序 開始 修改。 *調(diào)試筆記: *20051216 在調(diào)試AD模塊時,發(fā)現(xiàn)不能在watch窗口觀察 advalue, times, tem, mea 的值,說是Restricted MEMORY.不知道是 什么原因。因此將此段程序上傳。請求幫助解決。查找原因。 ***********************************************************************/ /********************************************************************** *頭文件 */ #include <p30f2012.h> //DSPIC30F2012的配置頭文件; #include <math.h> //數(shù)學(xué)函數(shù)頭文件,本程序應(yīng)用asin函數(shù); /********************************************************************** *定義CONFIG字 */ _FOSC(CSW_FSCM_OFF & FRC & FRC_PLL4); //配置時鐘為 內(nèi)部 振蕩器; _FWDT(WDT_OFF); //關(guān)閉看門狗; _FBORPOR(MCLR_EN & PWRT_OFF); //外部MCLR上電復(fù)位 ; _FGS(CODE_PROT_OFF); //關(guān)閉代碼保護; /********************************************************************* *定義常量 */ #define pi 3.1415926535897932384626433832795 //定義 pi #define con_ch 1 //定義ad的通道1 #define tem_ch 0 //定義ad的通道2 /********************************************************************* *端口定義 */ /********************************************************************* *變量定義 */ unsigned LONG times; //系統(tǒng)時間變量,單位為10ms volatile unsigned int tem; //溫度變量 , ************************************原函數(shù)為float型 ***************** volatile unsigned int mea; //光敏傳感器變量,************************************原函數(shù)為float型 ***************** volatile unsigned CHAR ledbuf[4]={0x80,0x80,0x80,0x80}; //顯示緩存數(shù)組 unsigned int advalue[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //16個ad連續(xù)采樣值的緩存變量 volatile unsigned int *ptr; /******************************************************************** *定義函數(shù) */ int main(void); void ADC_Init(void); //ad轉(zhuǎn)換子程序 void __attribute__((__interrupt__)) _ADCInterrupt(void); //中斷服務(wù)程序 ISR /******************************************************************** *主函數(shù) */ int main(void) { ADPCFG = 0xffff; //設(shè)置AN腳為數(shù)字端口模式. ADC_Init(); ADCON1bits.ADON=1; while(1) { Sleep(); } return 0; } /********************************************************************* *子函數(shù)區(qū) */ //設(shè)置ad模塊初始化參數(shù)子函數(shù) //設(shè)置ad工作在自動采樣自動轉(zhuǎn)換模式 //設(shè)置ad模塊每采樣轉(zhuǎn)換16次以后中斷 //ad轉(zhuǎn)換結(jié)果格式為無符號整數(shù) //ad的參考電壓為Vdd和AGND //ad的時鐘為內(nèi)部RC時鐘1.5us //采樣時間為7個Tad //模擬輸入引腳AN1,AN0分別作為濃度、溫度模擬信號的輸入端口。首先將AN1作為ad的默認(rèn)輸入端口 void ADC_Init() { //adcon1 控制字的設(shè)置 //設(shè)置ad轉(zhuǎn)換結(jié)果的格式 (DOUT = 0000 dddd dddd dddd) //設(shè)置ad的轉(zhuǎn)換觸發(fā)源為 內(nèi)部計數(shù)器結(jié)束采樣并開始轉(zhuǎn)換(自動轉(zhuǎn)換) //設(shè)置ad的采樣觸發(fā)源為 采樣在上一個轉(zhuǎn)換結(jié)束后立即開始。SAMP 位自動置位。 ADCON1bits.FORM = 0; ADCON1bits.SSRC = 7; ADCON1bits.ASAM = 1; //adcon2 控制字的設(shè)置 //VCFG=0; AD模擬電源設(shè)置為Vdd和AGND 參見dspicref的18-6頁 //SMPI=15; 設(shè)置ad產(chǎn)生中斷的采樣轉(zhuǎn)換次數(shù) ADCON2bits.SMPI = 15; //adcon3 控制字的設(shè)置 //ADRC=1; 設(shè)置 ad時鐘由ad內(nèi)部RC時鐘產(chǎn)生 rc=1.5us //SAMC=1; 設(shè)置 采樣時間為7個Tad ADCON3bits.ADRC = 1; ADCON3bits.SAMC = 1; //adchs 控制字的設(shè)置 //設(shè)置 ad通道0 負(fù)輸入是VREFbit ;通道0 正輸入是AN1 ADCHS = con_ch; //adpcfg 控制字的設(shè)置 //設(shè)置 模擬輸入引腳AN0、AN1為模擬輸入,其他為IO端口 ADPCFG = 0xffff; ADPCFGbits.PCFG0 = 0; ADPCFGbits.PCFG1 = 0; //adcssl 控制字的設(shè)置 //掃描模式被禁止。 ADCSSL = 0x0000; //清除ad中斷標(biāo)志位 IFS0bits.ADIF = 0 ; //開ad中斷 IEC0bits.ADIE = 1 ; } /********************************************************************* *中斷服務(wù)程序ISR */ void __attribute__((__interrupt__)) _ADCInterrupt(void) { int i = 0; ADCON1bits.ADON=0; ptr = &ADCBUF0; while ( i < 16 ) { advalue[i++] = *ptr++; } IFS0bits.ADIF = 0; ADCON1bits.ADON=1; } /********************************************************************/  | 
  |
  | 
    
 
  | 
  
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 | 
Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號  |