Different compilers for different sereis Microship MCU
- 8bits baseline, id-range: HiTechC
- 8bits PIC18: C18
- 16bits: C30
- 32bits: C32
Some notes for Microchip MCU PIC16F (8bis baseline)
- PIC16F 指令寬度: 14-bits > 2k 要做Page(Bank)切換,這部份C Compiler已經幫忙完成
- Data memory
- SFR,GPR, Accessses(70-7Fh)
- SFR(Special File Register)
- 使用Hitec C Compiler, SFR名稱為內建變數不可更動
- SFR部分register在Bank1,2,3,4共用相同內容
- GPR(Gloab purose Register)
- 用來存放一般定義變數內容
- Access data memory bank1,2,3,4共用相同內容,無需切換Bank
- Status register
- PD: 電源狀態指示位元,執行sleep後為0,sleep用途為省電使用
- TO: WDT溢位指示,可用來檢查watchdog reset, HITECH-C會清除TD,需要改檢查HITECH-C另外定義的變數
- pic.h:選擇合適ic header .h file
- #define SLEEP() asm(“sleep”)
- Configuration bits
- Configuration bits are mapped in program momory location 2007h.
- It is important to note that address 2007h is beyond the user program memory space, which can be accessed only during programming.
- ID Locations
- Code Protected, ID Location相同,Complier Checksum會相同!!程式內容不影響Checksum
- Without Code Protected, ID Location 不影響Checksum !!?,程式內容影響Checksum
EEPROM
使用內嵌組語asm去寫55AA,確保55AA是連續且快速的寫入EECON2,
#asm MOVLW 55h MOVWF EECON2 MOVLW AA MOVWF EECON2 BSF EECON1, WR #endasm
- HITECH-C 可以使用@ 的絕對定址符號定義SFR的位址,使用此種宣告方式,該位址並不會被保留
- HITEHC-C Proteus可模擬硬體電路
- Debug tool -> MPLAB SIM 才有Stopwatch
- Debug tool -> ICD3在Debug Model 需按下執行,MCU與硬體才會動作
- Build Options\Adress qualifiers\Request -> 使有宣告bank1,2,3,4的變數存放在各自bank位置
- Build Options\Adress qualifiers\Ignore -> 讓Compiler自行控制變數存放的bank位置,會往bank0放
- Array
- bank1,2,3 size: 96KBs 因此宣告陣列大小不得超過96KBs,如果要避免此問題,可使用PIC16F1XXX系列(採用線性定址),或者使用PIC18FXXX的元件(合併Bank
- Interrupt
- C 函數可以被連結到中斷向量的位置,只要在函數原型宣告使用保留字“interrupt” 即可
- void interrupt Isr(void)
- MCU可以在任何執行位置呼叫此函數,進入位址 0x0004,16系列只有一個中斷,其它系列有的有各周邊不同中斷
- 中斷旗標記得清除,否則有可能造成繼續進入中斷
- 中斷內不要呼叫函式與區域變數,否則會造成花費許多時間進入或結束中斷
- C 函數可以被連結到中斷向量的位置,只要在函數原型宣告使用保留字“interrupt” 即可