機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
PICC18使用說明
PICC18使用說明
 更新時間:2008-7-26 17:03:51  點擊數(shù):3
【字體: 字體顏色
PICC18使用說明2007-5-18 

翻譯人          :張元南

指導校對     

翻譯修改時間:2007-4-20

地點              :中國福州

重要說明      :僅就PICC18V9.50PL3安裝目錄下的使用手冊的編程使用最緊密相關的部分做翻譯。本翻譯純粹為本人業(yè)余興趣所致。本人不承擔因翻譯錯誤、偏差帶來的任何后果。并且保留在不做通知的情況下升級本翻譯文檔的權利。請查閱英文原始版本說明書,本文僅做入門參考。另外,本文翻譯的目的在于加深對PICC18的認識和理解,所以將大量采用意譯而非逐字翻譯。故可能和英文原版有較大的篇幅差別。

版本說明      :增加了對指針的翻譯,中斷處理部分的翻譯。

3.1.1 與ANSI標準C的區(qū)別

受PIC18 MCU的硬件限制,PICC18不支持函數(shù)的遞歸調用。

3.1.2

同樣的C代碼可能在不同版本的編譯器或者不同的編譯器之間會編譯成不同的匯編代碼。

3.2.1

編輯安裝目錄下的pic-18.ini文件,可以增加用戶自定義的新的PIC18系列的MCU。

3.2.2 CONFIG的操作

PICC18可以在源代碼中配置CONFIG,由于PIC18 MCU的CONFIG有多個字節(jié),所以采用如下語法:

__CONFIG(2, BW8 & PWRTDIS & WDTPS1 & WDTEN);

注意,前面是兩個下劃線,這是一個宏__CONFIG()。該宏的定義在系統(tǒng)文件 htc.h中,根據PICC18編譯器特性,如果再每個源文件中都使用了#include <pic18.h>,使用該宏則可不必再寫#include <stc.h>。這個宏,必須在函數(shù)外使用。

3.2.3 ID區(qū)定義

和CONFIG區(qū)操作類似,采用如下語法:

__IDLOC(15F01);

注意,前面是兩個下劃線,這是一個宏__CONFIG()。該宏的定義在系統(tǒng)文件 htc.h中,根據PICC18編譯器特性,如果再每個源文件中都使用了#include <pic18.h>,使用該宏則可不必再寫#include <stc.h>。這個宏,必須在函數(shù)外使用。

3.2.4.1 EE區(qū)操作

很多時候,需要在MCU運行前,事先在EE區(qū)燒入一定數(shù)據,MCU上電后,則可從EE區(qū)讀出相關數(shù)據,執(zhí)行相應操作。這個操作和上面的CONFIG操作類似,采用一個系統(tǒng)定義的宏,采用如下語法:

__EEPROM_DATA(0, 1, 2, 3, 4, 5, 6, 7);

注意,前面是兩個下劃線,這是一個宏__CONFIG()。該宏的定義在系統(tǒng)文件 htc.h中,根據PICC18編譯器特性,如果再每個源文件中都使用了#include <pic18.h>,使用該宏則可不必再寫#include <stc.h>。這個宏,必須在函數(shù)外使用。

使用這個宏,必須也只能一次性初使化8個字節(jié)。而且第一次調用這個宏就是只能是在0地址開始初使化。從0初使化到7,要想再初使化8個字節(jié),就再調用一次。比如如下:

__EEPROM_DATA(0, 1, 2, 3, 4, 5, 6, 7);

__EEPROM_DATA(8,9,10,11, 12,13,14,15);

即使不想初使化前8個字節(jié),只初使化第10個字節(jié),也要采用上述的寫法從0寫到15。不過一般沒有必要特意從某個地址開始初使化EE區(qū)。建議我們不要去挑戰(zhàn)編譯器的組織方式,把有這樣的系統(tǒng)調用宏全部放在主文件中,以便于修改。

如果是在MCU的運行過程中需要對EE區(qū)操作,則可以考慮在程序中使用自己編寫讀寫EE區(qū)函數(shù),或者采用系統(tǒng)定義的一個宏(不是系統(tǒng)函數(shù))。

寫EE區(qū)address字節(jié)一個valus值,如下:

EEPROM_WRITE(address,value);

從EE區(qū)的address地址讀回值,存入variable變量,如下:

variable=EEPROM_READ(address); variable 為自定義的unsigned char變量。

這些宏為了保證操作,在過程中關斷了總中斷GIE。這可能會導致某些情況下一些實時控制系統(tǒng)崩潰——由于中斷不能即時響應。比如發(fā)電機控制。PIC18 MCU寫EE區(qū)一個字節(jié)一共需要8MS,插除4MS,寫4MS。

3.2.4.2 FLASH操作

用來在程序中寫COPY  FLASH區(qū)的一個塊到另外一個塊:

flash_write(source_pointer, length, dest_pointer);

讀FLASH(程序)區(qū)的一個字節(jié)

variable=flash_read(address);

3.2.5外擴程序區(qū)操作

用PIC18的MCU,基本上無人使用它提供的這個功能。本章節(jié)不翻譯。有興趣請查閱英文原版。如果一定要外擴,建議使用51或者增強型51MCU。

3.2.6位指令

PICC18會盡可能使用位指令來提高編譯效率。

比如使用:

unsigned int foo;

foo |= 0x40;

會編譯成如下指令:

bsf _foo,6

如果要清或者置某個整形變量的某個位,可以采用下面的系統(tǒng)定義的宏。

#define bitset(var,bitno) ((var) |= 1UL < < (bitno))

#define bitclr(var,bitno) ((var) &= ~(1UL < < (bitno)))

比如上面提到的操作,也可以用如下語法實現(xiàn):

bitset(foo,6);

3.2.7 多字節(jié)變量的特殊功能寄存器

比如以16位定時器的讀寫來說,由于硬件特性,從PIC16到PIC18系列的MCU,都必須遵照寫TIMEX,先寫TMRXH,再寫TMRXL,讀則相反,則寫讀TMRXL,TMRXH。以讀TMR1為例子,采用如下語法實現(xiàn):

unsigned char i;

i=TMR1L;

i+=TMR1H<<8;

3.3.5 運行中的啟動代碼

C程序在進入MAIN()函數(shù)執(zhí)行前,會要求初使化一些東西,并使芯片從復位時候的狀態(tài)轉入一種確定的狀態(tài)。

通常說來,啟動代碼是一段普通的預編譯的子程序,將鏈接到用戶程序中。即使用戶的程序不需要啟動代碼的各個方面,多余的啟動代碼照樣鏈接,雖然這是無害的,但占用了程序空間,延遲了用戶自編寫的程序的執(zhí)行。

PICC18采用了一種新穎的策略來識別什么樣的啟動代碼是必要的,此處翻譯省略。

啟動代碼在每次編譯的時候都會自動鏈接,包含啟動代碼的單獨的文件每次都會被刪除,如果要想在編譯后依然看到它,可以采用如下編譯選項,--RUNTIME=default,+keep。這個文件名為startup.as,至于到底這個文件在什么位置出現(xiàn),由于本人沒使用過,暫時不翻譯,可以使用搜索功能找到它。

這些過程是不需要用戶去干預的。

3.3.5.4上電子程序

在某些情況下,我們需要在一上電或者一復位的時候,通常是前幾個指令周期,就根據上電或者復位情況執(zhí)行特定代碼。這個用戶提供的匯編模塊會在復位后被馬上執(zhí)行,通常這個模塊是在C函數(shù)中使用嵌入匯編代碼完成。一個虛擬的(空的)上電子程序被包含在powerup.as文件中。這個文件可以被拷貝,修改,添加到你的項目中。添加后不需要任何特殊的編譯,鏈接設置,或者用代碼指定跳到該文件。編譯器會自動檢查你是否使用了上電子程序。并在復位后自動跳轉。如果使用了上電代碼,則需要在初使化后添加一個跳轉到start。power.as文件在編譯器安裝目錄的source文件夾下可以找到。

強調一下,啟動代碼(startup.as)和上電代碼(powerup.as)是不同的東西,啟動代碼在所有的情況下都是需要的,主要是執(zhí)行變量的初使化。PICC18會在最開始的時候把所有的變量給個初值,如果你定義的時候給了初值,沒有給的,它會把變量清0。而上電代碼是為了應付特殊的需求的,如果不添加文件,是不會自動產生的。

3.4支持的數(shù)據類型和變量

多字節(jié)變量的存儲格式位,低字節(jié)低地址,高字節(jié)高地址;緮(shù)據類型如下表。

 

 

進制表示。

 

 

數(shù)據類型和進制表示上用的是標準的C語言風格,每種變量占用的內存字節(jié)數(shù)都比較符合ANSI C,比如整形變量就是2個字節(jié)。某些單片機的C編譯器,整形變量則可能是一個字節(jié),這需要大家小心。另外增加了單片機需要的位變量類型。為了適應單片機計算,浮點類型允許設置為24位或者32位(可以在編譯選項中設置)。

任何的整形常量將由一個最小的存儲長度來存儲同時保證數(shù)據不會溢出。如果加上了后綴“L”或者“l(fā)”則表明此常量為unsigned long 或者signed long 。后綴“U”或者“u”將表明此常量為unsigned類型,如果為“UL”,則為unsigned long。

浮點常量將有兩種類型,除非有明確的后綴“L”或者“l(fā)”表示其為double類型,“F”或者“f”表示其為FLOAT類型。

字符串常量或者字符串數(shù)據都用雙引號來表示比如用“Hello world”。用const char *來定義一個字符串常量,并把這些數(shù)據存儲在程序區(qū)。把一串字符串常量分派給一個非常數(shù)字符指針,編譯器會產生警告,比如:

char * cp= "one";          // "one" in ROM, 產生警告

const char * ccp= "two";    // "two" in ROM, 正確

定義一個非常量的字符數(shù)組可以采用如下方式:

char ca[]= "two"; // "two" different to the above

則將在RAM中初使化two,two從程序中拷貝而來。

兩段分離開的常數(shù)則由編譯器自動鏈接。比如中間只空一格的如下表達:

const char * cp = "hello " "world";

將把"hello world"分配給cp。

 

3.4.2位數(shù)據類型和變量

PICC18用關鍵字bit來聲明一個位變量,只存儲0或者1。如果加上static,且在函數(shù)內聲明,則只可在函數(shù)內部使用,例如:

static bit init_flag;

如果在函數(shù)外聲明,例如,

bit init_flag;

則為全局函數(shù)。

 

位變量不能定義為一個局部變量,“auto”。所以當在函數(shù)內部定義一個位變量,包括main函數(shù),一定要加上static聲明其為局部靜態(tài)變量,如上所示范。位變量也不能做為一個函數(shù)的參數(shù)。但是,一個函數(shù)可以定義為bit類型來返回一個位的值。這個位變量值將放在STATUS寄存器的C位返回。

位變量在很多時候表現(xiàn)得和無符號字符型變量很相似,但他儲存0和1,所以這提供了一個方便高效的方法來存儲布爾符號而不需要消耗大量的RAM空間。盡管如此,不存在指向一個位變量的指針,也不能靜態(tài)初使化位變量。

把一個整形變量整體賦值給一個位變量,則最后一位將賦值給該位變量,這和ANSI C對布爾類型的轉換是不一樣的。比如:

int data = 0x54;

bit bitvar;

bitvar = data;

由于data的最低位為0,所以bitvar將為0。

如果你想用類似ANSI C對布爾變量類型轉換時候的操作,即把整形數(shù)賦值給位變量,位變量為0還是1,取決于原始的整形數(shù)據是否為0,則可以采用如下語法:

bitvar = data != 0;

位變量在啟動代碼會被強制清0,如果你想對一個單獨的位變量給非0的初值,請在自己的用戶代碼中處理。而不能指望在定義的時候給初值就可。

如果使用了——strict編譯選項,則位變量不可用。

 

3.4.3 Using Bit-Addressable Registers

本章節(jié)介紹如何強制定位一個位變量到某個地址,一般這只對特殊寄存器有用,不建議對變量做這樣的操作,具體形式可以參考MCU的頭文件中對特殊功能寄存器各個位的定義,比如

static unsigned char RCON @ 0xFD0;

static near bit PD @ (unsigned)&RCON*8+2;

 

3.4.4 8位整形數(shù)據類型和變量

PICC18同時支持有符號和無符號字符型(signed char and unsigned char),如果關鍵字signed 和unsigned 沒有標明,則char默認狀態(tài)下為unsigned char。但如果使用了--CHAR=signed,則char表示signed char。后續(xù)的英文原始文檔不過再次強調一個觀點,所謂的字符型,實際上應該完全看作一個8位的整形,對字符型的操作和對8位整形的操作沒有什么區(qū)別,就是符號型和整形之間是有天然的轉換關系。比如你可以寫char XXX=’A’,也可以寫char XXX=0X41。這兩者都是等效的。XXX在內存中的表示形式都是0X41。對這點如果有不太熟悉的,可以參考潭浩強的C語言教材。

 

3.4.5 16位整形數(shù)據類型和變量

翻譯略。編程無特殊注意事項。

 

3.4.6 32位整形數(shù)據類型和變量

翻譯略。編程無特殊注意事項。

 

3.4.7 Floating Point Types and Variables

數(shù)據的存儲遵照如下格式。

 

浮點類型一般為有符號型,所以采用無符號聲明一個浮點數(shù)是非法的。

通過編譯選項--double=fast32可以有效提高浮點計算的速度,但以程序區(qū)的空間增大為代價。在MPLAB IDE下,需要注意設置觀察變量的屬性,才能正確觀察浮點數(shù)。具體方法如下:

以定義了一個double vat=10000;的浮點數(shù)(不是整形)的觀察為例子。

首先,HI-TECH的編譯器支持32位,但是為了節(jié)約空間提高運算效率,在不對編譯器選項做設置的情況下,即使是double,不過是24位。另外HI-TECH采取的是IEEE754規(guī)范。由于各個編譯器廠家采取的浮點規(guī)范略有不同,就導致了我們在觀察的時候需要注意觀察屬性的設置,F(xiàn)在見附圖。使用MPLAB IDE英文版用戶,可參造找到適當?shù)奈恢谩?/P>

 


 

 

 

3.4.8 結構體和成員體

結構體和聯(lián)合體,除了單獨的位變量不能做為其成員,使用上和標準C沒什么區(qū)別。

 

3.4.8.1 位結構體

在匯編語言的情況下,我們會把幾個位變量放在一個字節(jié)內。以方便管理。PICC18提供了更方便的位結構體類型。在位結構體中,你可以在任意位定義單獨的變量,并定義多個位的位段。這和標準C也是類似的。例如:

struct {

unsigned lo : 1;

unsigned dummy : 6;

unsigned hi : 1;

} foo;

lo定義在bit0(最低位),hi定義在bit7(最高位)。

如果你只想在bit0和bit7定義,中間六位暫時不想使用,可簡化定義為:

struct {

unsigned lo : 1;

unsigned : 6;

unsigned hi : 1;

} foo;

 

而初使化則可以這樣:

 

struct {

unsigned lo : 1;

unsigned mid : 6;

unsigned hi : 1;

} foo = {1, 8, 0};

 

則foo在的單元實際上為實際上為 0 001000 1 ,即0x11。

 

3.4.8.2 結構體和聯(lián)合體的限制

如果整個結構體為常量,則全部數(shù)據將仿在程序區(qū),顯然,將只能讀出。如果這樣,所有的成員必須被初使化。例如:

const struct {

int number;

int *ptr;

} record = { 0x55, &i};

 

如果某個結構體的內部成員為常量,但結構體不是常量,則整個結構體將放在RAM中,但每個成員都變成只讀。比如:

struct {

const int number;

int * const ptr;

} record = { 0x55, &i};

 

3.4.9 標準類型限制

PICC18支持ANSI C的限制以及為嵌入式專門設置的一些關鍵字。

 

3.4.9.1 Const and Volatile Type Qualifiers

const會告訴編譯器,該變量為只讀,無法修改。常量被定義的時候就必須初使化。

volatile用來告訴編譯器一個參量成功訪問后也未必能獲得值,這能避免啟動代碼去錯誤操作它。一般用于特殊寄存器的定義。

 

3.4.10 特殊類型限定

PICC18提供了一些特殊的限定字來把變量分配到特定的RAM空間。包括persisten, near , far。這些限定也可以用在指針上。但是不能用在局部自動變量上。如果一定要用在局部變量上,只能用在局部靜態(tài)變量上。如:

static persistent int intvar;

 

PICC18依然支持關鍵字bank1,bank2,bank3,這些關鍵字的存在是為了讓代碼能無縫地從PICC(支持PIC12/16/17系列的編譯器)移植到PICC18。PICC18允許這些限定字,但這些限定不會對變量的定位發(fā)生任何影響。

 

3.4.10.1 Persistent類型限定

該類型告訴編譯器,在上電復位的時候這些變量不應該被自動清0。比如特殊功能寄存器,都加了此限定字。如果要實現(xiàn)某些功能,需要某些特殊變量在上電的時候不被清0,則可加此關鍵字進行限定。

3.4.10.2 Near 類型限定

near類型用來把局部靜態(tài)變量指定到PIC18的ACCESS BANK。如:

static near unsigned char fred;

 

3.4.10.3 Far類型限定

FAR是為了把變量定義在外擴的ROM。不推薦使用。只有支持外擴的MCU才支持FAR類型。

 

3.4.11 Bdata類型限定

該關鍵字只在程序采用small mode 編譯時有意義。在這樣的模式下,所有的局部靜態(tài)和全局變量都放在ACCESS BANK,bdata則能限制這些變量放在非ACCESS區(qū)。然后這些變量就表現(xiàn)得和在large mode下一樣。這些能防止ACCESS BANK在small mode下溢出,以免更換到large mode模式編譯。

 

3.4.12 指針類型

PICC18支持兩種基本指針,數(shù)據指針,函數(shù)指針。數(shù)據指針存儲變量的地址,以使變量可以為程序讀寫修改。函數(shù)指針存儲可執(zhí)行子函數(shù)的入口,以便通過指針間接調用。

 

3.4.12.1 RAM指針

RAM指針為16位,可以尋址PIC18全空間的RAM。

指向near的指針只有8位,只能訪問near 變量(存儲在ACCESS RAM的變量)。

 

3.4.12.2 Const and Far Pointers

常量和FAR指針,可為16位或者24位,這由編譯選項--CP=24或者 --CP=16決定。項目中的所有模塊必須采用同樣寬度的指針。

指針指向FAR變量和常量是基本一樣,只有一點不同,指向FAR變量的,可能用來改變所指向的內容,指向常量的是絕對不行的。

16位的常量和FAR指針可以訪問全部的RAM空間和大部分的程序空間(64K字節(jié)以內)。在運行時,指針的內容將被檢查。地址范圍超過RAM區(qū)上限的,將采用表讀表寫指令訪問程序區(qū),小于RAM區(qū)上限的則訪問RAM區(qū)。如果常量指針保存的地址在RAM區(qū),RAM的該地址的內容不應當變化。默認情況下,鏈接選項會把常量放在RAM的地址上限,以保證訪問正確的存儲空間。

當目標MCU的程序區(qū)超過64K字節(jié),只有低64K字節(jié)能用16位指針訪問。后續(xù)內容為24位指針,牽涉到CONFIG區(qū)操作,翻譯暫緩。

 

3.4.12.3 函數(shù)指針

翻譯暫略,內容與上面基本一致,講述了16位指針與24位指針的不同,但沒有給出具體的使用例程。

 

3.4.12.4 聯(lián)合類型限定與指針

類型限定可用來限定指針本身的類型以及指針指向的變量的類型。舉例如下:

near int * nip ;

int * near inp ;

near int * near ninp ;

nip是指所指向的變量為near int,即存儲在ACCESS RAM,則指針本身為8位,但是會存在全部RAM BANK的某些地方。

inp是指指向的變量為int,則可能在RAM的任何一個角落,則指針需要為16位,但加了near限定后,指針變量將放在ACCESS RAM。

ninp則指用存儲在ACCESS RAM的8位指針,指向存儲在ACCESS RAM的變量。

其他限定詞帶來的變量存儲,指示,如上所示范。為了兼容PICC,PICC18允許BANK1,BANK2,BANK3這些關鍵字的存在,但是這些關鍵字不影響PICC18的代碼。

 

3.5 存儲類型和參數(shù)分配

與標準C基本相同,無重要信息,暫時不翻譯,請查看英文文檔。

 

3.6 函數(shù)

與編程操作基本無關,無重要信息,暫時不翻譯,請查看英文文檔。

3.7

與編程操作基本無關,無重要信息,暫時不翻譯,請查看英文文檔。

 

3.8 操作數(shù)

3.8.1 整形提升

整形提升是值得認真學習的。C不比匯編,編譯器有時會自動擴充變量長度,以做中間計算使用,每款單片機的C編譯器,都必須充分學習其整形提升的語法規(guī)則。否則則請大量使用中間變量,或者手動控制整形提升。筆者初次獨立編寫PID和一些數(shù)學處理函數(shù),就死在了對整形提升沒有認真體會上。

當數(shù)學算式中存在不只一個操作數(shù)時,典型情況下它們的類型應當嚴格一致,否則編譯器會自動進行類型轉換。轉換的原則是向“大”的方向轉。即使操作數(shù)都是同樣的類型,但在某些情況下,也會發(fā)生整型提升。如果你不注意的話,那么異常的結果就發(fā)生了。整形提升會在枚舉類型,有符號無符號字符型,有符號無符號整形的變量下發(fā)生。例如:

unsigned char count, a=0, b=50;

if(a - b < 10)

count++;

a-b的結果是206(這個結果不是比10。,因為a,b在進行減法前都被轉化成signed int 類型了。然后再從-50轉換成了unsigned int。

實際上,很多情況下,一個變量的范圍都是受限制的,并不會達到其類型的上下限。按筆者的經驗,這段代碼可以改造為如下。

unsigned int temp_b=b;

temp_b+=10;

if(a<temp_b)

count++;

因為a,b本身就為8位,所以轉換一個就夠了。為了避免下溢(出現(xiàn)負號,出現(xiàn)負號則需要進行有符號計算,比較浪費代碼),強烈建議采用這樣的無符號提升,并做加法處理。

 

再看一個例子:

unsigned char count, c;

c = 0x55;

if( ~c == 0xAA)

count++;

似乎理論上對c取反,8位下,55取反應該就是0XAA,但是編譯器做了整形提升,結果為0XFFAA,出錯了。

那么其實可以用變通的寫法。

unsigned char count, c;

c = 0x55;

c=~c;

if( c == 0xAA)

count++;

由于C取反又給了C,所以沒有整形提升,則判斷不出錯。我的觀點是,在不是很了解編譯器什么時候進行整形提升時,我們盡量避免在判斷語句中進行計算后的比較判定。而只做簡單的判定。另外,用對0XFF的異或,來取代求反;蛘哂妙愃频暮陞R編來完成求反。

 

3.8.2 移位過程中的提升

這里的關鍵是對有符號數(shù)進行移位的時候會發(fā)生什么。無符號數(shù)則與ANSI C是一致的。

如果需要直接和匯編指令掛鉤的操作,可以采用系統(tǒng)定義的宏或者自己用嵌入式匯編。

ANSI C,對于有符號數(shù)右移時,符號位可能被清0,或者保持。(應該是取決于C編譯器的版本)。

右移動有符號數(shù),PICC18按上述的后者進行,即先整體移動,然后保持符號位。

右移動無符號數(shù),最高位清0。

左移動無符號或者有符號數(shù),最低為清0。

 

 

3.8.3 除以一個整數(shù)和對一個整數(shù)求模(取余數(shù))

除0將導致結果為0。

 

3.9 PSECT用法

沒研究清楚,暫時不翻譯。

 

3.10 中斷的處理

高中斷的聲明和PICC一致,用關鍵字interrupt。低中斷的聲明用interrupt low_priority。聲明了低中斷處理函數(shù),并不會把什么中斷自動變?yōu)榈椭袛,每個中斷的高低,還是由程序的代碼中修改。

 

3.10.2 中斷中的變量保護

PIC18 MCU在發(fā)生中斷時,只將PC壓入堆棧。其他的變量保護需要由軟件完成。PICC18會自動檢測需要保存的變量,在軟件上做保存。如果中斷中調用了某個函數(shù),而這個函數(shù)定義在中斷函數(shù)之前,那么編譯器將適當包保存必要的變量,否則,最壞的情況就是全部可能用到變量都會被保存。

PICC18不掃描內嵌匯編代碼,中斷中內嵌匯編代碼用到的變量,編譯器不會自動保存。

高中斷,編譯器會動用影子寄存器進行變量保護還原,但是指明了compile for icd2,則不會動用影子寄存器,因為ICD2會占用這些空間。

關于高低中斷將變量保護到哪個段,與編程無關,在此不翻譯。

 

3.10.2 中斷中的變量還原

變量自動還原,無需我們關心。

 

3.10.4 中斷水平

沒有深入研究,暫時不翻譯。

 

3.11 C和匯編的混合編程

  • 上一篇: PIC16F97+eV1527解碼源程序
  • 下一篇: PIC單片機C語言編程教程
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網站

    網站經營許可證:浙B2-20080178-1