




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本手冊(cè)分兩部分:第一部分 HI-TECH PICC C 的使用說(shuō)明. 這里我們只講述了PICC C與標(biāo)準(zhǔn)C的不同, 它不是一本C語(yǔ)言的教程, 并且我們假定你有C語(yǔ)言的基礎(chǔ).第二部分 在偉福集成環(huán)境下使用PICC. 講述在偉福集成環(huán)境如可設(shè)置PICC, 簡(jiǎn)單的調(diào)試步驟. 更詳細(xì)的說(shuō)明請(qǐng)參閱 偉福仿真器使用手冊(cè). 關(guān)于如何在MPLAB下使用PICC C語(yǔ)言, 請(qǐng)參閱Microchip相應(yīng)的手冊(cè).南京偉福實(shí)業(yè)有限公司電話: 025 3193973 網(wǎng)址: www.wave- 電子信箱: wave-cnPICC C 編譯器請(qǐng)向Microchip 上海分公司購(gòu)買, 售價(jià): RMB 599. 電話: 02
2、1 62755700 網(wǎng)址: Hi-tech 公司網(wǎng)址: 第一部分為了對(duì)PIC單片機(jī)有更好的支持,PICC在標(biāo)準(zhǔn)C的基礎(chǔ)上作了一些擴(kuò)充:l 定義I/O函數(shù),以便在你的硬件系統(tǒng)中使用<stdio.h>中定義的函數(shù)。l 用C語(yǔ)言編寫中斷服務(wù)程序l 用C語(yǔ)言編寫I/O操作程序 l C語(yǔ)言與匯編語(yǔ)言間的接口1-1 與標(biāo)準(zhǔn)C的不同 PICC只在一處與標(biāo)準(zhǔn)C不同:函數(shù)的重入。 因?yàn)镻IC單片機(jī)的寄存器及堆棧有限,所以PICC不支持可重入函數(shù)。1-2 支持的PIC芯片 PICC 支持很多PIC單片機(jī),支持PIC單片機(jī)的類型在LIB目錄下的picinfo.ini 文件中有定義。1-3 PICC 包
3、含一些標(biāo)準(zhǔn)庫(kù)1-4 PICC 編譯器可以輸出一些格式的目標(biāo)文件,缺省設(shè)置為輸出Bytecraft的'COD' 格式和 Intel的'HEX'格式。你可以用表1-1中的命令來(lái)指定輸出格式。 表-格式名稱描述PICC 命令文件類型Motorola HEXS1/S9 type hex file-MOT.HEXIntel HEXIntel style hex records(缺省)-INTEL.HEXBinarySimple binary image-BIN.BINUBROFUniversal Binary Image Relocatable Format-UBROF.
4、UBRTektronix HEXTektronix style hex records-TEK.HEXAmericanHex format with symbols for American -AAHEX.HEXAutomation HEXAutomation emulatorsBytecraft .CODBytecraft code format(缺省)n/a(缺省) .CODLibraryHI-TECH library filen/a.LIB1-5 符號(hào)文件PICC -G 命令用于生成符號(hào)文件,有了符號(hào)文件,你就可以進(jìn)行源程序調(diào)試. 命令格式為: PICC -16F877 -G test.
5、c 在使用仿真器時(shí)必須使用-G命令。1-6 配置字 PIC單片機(jī)的配置字可以用_CONFIG命令來(lái)定義: #include <pic.h> _CONFIG(x) 其中x是配置字,頭文件中定義了相應(yīng)的配置說(shuō)明符,如: _CONFIG(WDTDIS & XT & UNPROTECT); 這將關(guān)閉看門狗,設(shè)置XT振方式,程序不加密。注意:不同的 配置符間用'&'相聯(lián),未定義的部分保留未編程狀態(tài)。詳細(xì)的情況請(qǐng)參考 頭文件及PIC數(shù)據(jù)手冊(cè)。1-7 ID 位置 有些PIC單片機(jī)在程序空間外還有ID空間,可用下面的方法來(lái)定義: #include <p
6、ic.h> _IDLOC(x) 其中x是ID標(biāo)示,如: _IDLOC(15F0); 將ID的四個(gè)單元定義為:1, 5, 15, 0. ID的具體位置由所指定的PIC 芯片自動(dòng)設(shè)定。1-8 EEPROM 數(shù)據(jù) 有些PIC單片機(jī)支持用外部編程器對(duì)內(nèi)部的EEPROM進(jìn)行編程。 _EEPROM_DATA()可以將用于初始化的數(shù)據(jù)放入HEX文件中,如: _EEPROM_DATA(0, 1, 2, 3, 4, 5, 6, 7) 可將0-7八個(gè)數(shù)放入HEX文件中,在用外部的編程器進(jìn)行編程時(shí)將 這八個(gè)數(shù)寫入PIC單片機(jī)中。 _EEPROM_DATA不是用于運(yùn)行時(shí)寫入EEPROM數(shù)據(jù)的,在運(yùn)行時(shí)請(qǐng)用 EE
7、PROM_READ(), EEPROM_WRITE()。1-9 位指令 只要有可能,PICC總是采用位指令。如: int foo; foo |= 0x40; 的編譯結(jié)果為:bsf _foo, 6 為了方便可以定義如下宏: #define bitset(var, bitno) (var) |= (1 << (bitno) #defien bitclr(var, bitno) (var) &= (1 << (bitno) 上一條語(yǔ)句可寫為:bitset(foo, 6);1-10 支持的數(shù)據(jù)類型 PICC 支持1,2,4字節(jié)的基本類型。 所有的多字節(jié)類型都采用低有效位
8、在前的格式, 表1-2列出了所有數(shù)據(jù)類型及它們所占空間大小。 表-類型大小(位)數(shù)字類型值bit1邏輯類型0 或 1signed char8有符號(hào)字符-128.+127unsigned char 8無(wú)符號(hào)字符0.255signed short16有符號(hào)整數(shù)-32768.+32767unsigned short 16無(wú)符號(hào)整數(shù)0.65535signed int16有符號(hào)整數(shù)-32768.+32767unsigned int 16無(wú)符號(hào)整數(shù)0.65535signed long32有符號(hào)整數(shù)-2147483648.+2147483647unsigned long32無(wú)符號(hào)整數(shù)0.4294967295
9、float 24浮點(diǎn)double24 or 32浮點(diǎn)由-D24, -D32決定1-10-1 常量及進(jìn)制表示 PICC 支持標(biāo)準(zhǔn)C的進(jìn)制表示方法。 l或L后綴表明常量為long類型, u或U后綴表示常量為unsinged類型。 浮點(diǎn)數(shù)為double類型,可以用f或F指定浮點(diǎn)數(shù)為float類型。 字符型由單引號(hào)括起,如'a'. 字符串由雙引號(hào)括起,如"Hello world". 1-10-2 位數(shù)據(jù)類型 PICC 支持一位的變量,用bit來(lái)定義。如: static bit init_flag;變量必須是全局的或靜態(tài)的,它不能是自動(dòng)變量或一個(gè)函數(shù)的參數(shù),但可以作為
10、一個(gè)函數(shù)的返回類型。位變量很象unsigned char,但它只有0或1兩個(gè)值,位變量占用空間少,且運(yùn)算速度快. 所有的位變量在startup是被清0,請(qǐng)?jiān)诔绦蜷_始處初始化它們。如果將一個(gè)整型數(shù)賦給位變量,只是將最低位賦給位變量,如果你是想要將一個(gè)整型變量是否為0賦值給一個(gè)位變量,請(qǐng)用: bitvar = other_var != 0; 如要你使用了PICC的-STRICT命令,bit將被視為非法命令。1-10-2-1 使用可位尋址的寄存器 位變量的定義可以與絕對(duì)地址的定義結(jié)合起來(lái)使用。如:為了訪問(wèn)STATUS中Power Down位,先定義STATUS的絕對(duì)地址為3,然后再定義一位變量絕對(duì)地
11、址為27 static unsigned char STATUS 0x03; static bit PD (unsigned)&STATUS*8+3; 注意: 頭文件中已定義所有的特殊功能寄存器及相應(yīng)的位寄存器.1-10-3 PICC浮點(diǎn)數(shù)使用IEEE754 32位格式和IEEE754(截?cái)?24位格式. float類型使用24位格式,double使用24位或32位格式, 由PICC命令控制, -D24使用24位格式, -D32使用32位格式.1-11 絕對(duì)地址變量 一個(gè)全局的或靜態(tài)的變量可以定位絕對(duì)地址, 使用如下格式: unsigned char Portvar 0x06; 這里定
12、義了一個(gè)名為'Portvar'的變量, 地址為06h,注意,編譯器并不保留任何單元,僅僅是將一個(gè)變量分配在06h單元. 它等價(jià)于匯編語(yǔ)言: _Portvar EQU 06h 編譯器及連接器都不作任何檢查, 完全由程序員保證分配不會(huì)發(fā)生沖突.1-12 結(jié)構(gòu)與聯(lián)合PICC 支持struct及union, 它們可以作為函數(shù)的參數(shù)及返回值, 也可以作為指針指向的目標(biāo). 1-12-1 結(jié)構(gòu)限定PICC 支持在結(jié)構(gòu)上使用限定符, 如果在一個(gè)結(jié)構(gòu)上使用限定符, 那么, 這個(gè)結(jié)構(gòu)的所有成員都被限定.如: bank1 struct int number; int *ptr; 在這個(gè)結(jié)構(gòu)里,num
13、ber, ptr 都被放在bank1寄存器內(nèi)1-12-2 結(jié)構(gòu)中定義位成員PICC 支持在結(jié)構(gòu)中定義位成員位成員按最低有效位在前的方式存儲(chǔ),位成員總是按8位字節(jié)方式存放, 當(dāng)當(dāng)前字節(jié)放滿后再放下一個(gè)字節(jié),位成員不會(huì)跨字節(jié)存放. 如: struct unsigned hi: 1; unsigned dummy: 6; unsigned lo: 1; foo 0x10;結(jié)構(gòu)foo占用10h單元, hi為10h單元的第0位, lo為10h單元的第7位, dummy為10h單元的2-6位,(第6位為最高有效位) 不使用的位可用未命名的位成員來(lái)定義, 如果我們不使用dummy, 就可定義為: struc
14、t unsigned hi: 1; unsigned : 6; unsigned lo: 1; foo 0x10;1-13 在ROM及RAM存放字符串. 一個(gè)未說(shuō)明的字符串總是存放在ROM中, 并且只能通過(guò)常量指針為訪問(wèn). #define HELLO "Hello word" SendBuff(HELLO); 一個(gè)非常量的數(shù)組被一個(gè)字符串初始化, 如: char fred = 'Hello world" 將在RAM中保留一個(gè)數(shù)組, 在startup時(shí), 用存放在ROM中的"Hello world"來(lái)初始化. 如果要將一個(gè)常數(shù)字符串作為函
15、數(shù)參數(shù)或?qū)⑺x給一個(gè)指針, 必須定義一個(gè)常數(shù)指針. 如: void SendBuff(const char * ptr)1-14 const, volatile 類型限定符. PICC 支持標(biāo)準(zhǔn)C的const, volatile 類型限定符const類型限定符通知編譯器一個(gè)目標(biāo)含有的常量并且不會(huì)改變. 一個(gè)常量被放在ROM中, 顯然一個(gè)常量是不能被賦值的. 如: const int version = 3;volatile 類型限定符通知編譯器, 一個(gè)目標(biāo)不能保證在連續(xù)的訪問(wèn)中不被改變. 這將禁止編譯器對(duì)該目標(biāo)的優(yōu)化. 所有的I/O口及在中斷中使用的變量必須有volatile 類型限定符. 如
16、: volatile unsigned char P_A 0x05;對(duì)volatile目標(biāo)的訪問(wèn)與對(duì)non-volatile的訪問(wèn)是不同的, 如對(duì)volatile目標(biāo)置1是先將該目標(biāo)清0后加1, 而對(duì)non-volatile目標(biāo)置1是先將1放在W中后再將W賦值到目標(biāo)中.1-14 特別的類型限定符. PICC 支持一些特別的類型限定符: persistent, bank1, bank2及bank3, 這些限定符不可用于自動(dòng)變量.1-14-1 persistent按C的標(biāo)準(zhǔn), 所有的C變量在startup時(shí)被清為0. 但是在有些情況下, 我們希望在復(fù)位后仍保持一些變量的值. persistent類
17、型限定符使被其限定的變量在startup時(shí)不被清0, 而保留原有的值.1-14-2 bank1, bank2及bank3類型限定符. bank1, bank2及bank3類型限定符用于指定變量所在的寄存器頁(yè). 如: static bank3 unsigned char fred; bank3 unsigned char *ptrfred; 缺省頁(yè)是 bank01-15 C語(yǔ)言中的中斷處理 在PICC C語(yǔ)言中可以用"interrupt"限定符來(lái)編寫中斷服務(wù)程序. 一個(gè)中斷服務(wù)函數(shù)必須用 interrupt void 來(lái)定義, 不能有參數(shù), 并且不能被C語(yǔ)言直接調(diào)用. 如:
18、long tick_count; void interrupt tc_int(void) +tick_count; 1-15-1 在中斷中保存環(huán)境 PIC單片機(jī)硬件只保存PC, PICC 編譯器自動(dòng)地保存其它可能用到的變量. 但是編譯器無(wú)法確定inline中的匯編語(yǔ)言段使用變量的情況, 你必須自已保護(hù)它們.1-15-2 開啟中斷 在PIC.H中定義了所有的中斷位, di()關(guān)閉所有中斷, ei()打開所有中斷. 如: ADIE = 1; / A/D interrupt will be used PEIE = 1; / all peripheral interrupts are enabled ei(); / enable all interrupts di(); / disable all interrupts1-16 在C中使用匯編語(yǔ)言 #asm, #endasm, asm() 可以在C語(yǔ)言中直接使用匯編語(yǔ)言. #asm, #endasm用來(lái)加入一段匯編語(yǔ)言, 而asm()用來(lái)加入一條匯編語(yǔ)言. 如: #include <stdio.h> unsinged char var; void main(void) var = 1; #asm rlf _var, 1 r
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 礦石買賣運(yùn)輸合同范本
- 危廢處置合同范本
- 醫(yī)院標(biāo)識(shí)設(shè)計(jì)合同范本
- 農(nóng)村聯(lián)營(yíng)合同范本
- 反恐安全運(yùn)輸合同范例
- 上半年政務(wù)工作總結(jié)
- 危運(yùn)司機(jī)合同范本
- 設(shè)備保養(yǎng)合同范本
- 合伙做母嬰店合同范本
- 產(chǎn)品批發(fā)代銷合同范本
- 2025年中央一號(hào)文件高頻重點(diǎn)考試題庫(kù)150題(含答案解析)
- 接觸隔離標(biāo)準(zhǔn)操作流程
- 世界給予我的 課件-2024-2025學(xué)年高二下學(xué)期開學(xué)第一課主題班會(huì)
- 港股基礎(chǔ)知識(shí)
- 2025年溫州市甌海旅游投資集團(tuán)有限公司下屬子公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年天津三源電力集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年上半年浙江嘉興桐鄉(xiāng)市水務(wù)集團(tuán)限公司招聘10人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年腹腔穿刺術(shù)課件 (1)2
- (八省聯(lián)考)2025年高考綜合改革適應(yīng)性演練 物理試卷合集(含答案逐題解析)
- 2025年度智能倉(cāng)儲(chǔ)管理系統(tǒng)軟件開發(fā)合同6篇
- 2024版數(shù)據(jù)中心建設(shè)與運(yùn)維服務(wù)合同協(xié)議書3篇
評(píng)論
0/150
提交評(píng)論