(Embeded System)(Microchip)Hint for HITECH C Compilier

  • 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系列只有一個中斷,其它系列有的有各周邊不同中斷
        • 中斷旗標記得清除,否則有可能造成繼續進入中斷
        • 中斷內不要呼叫函式與區域變數,否則會造成花費許多時間進入或結束中斷