飛思卡爾微控制器PIT彙編程式設計(一)

lddzzhengfeng發表於2014-08-22

飛思卡爾微控制器(XS128系列)微控制器彙編程式設計(一)

本人就是一個菜鳥,從菜鳥學習彙編程式設計;彙編也沒想象中的複雜和難懂,細細品味還是挺有意思的。就當刷著玩吧,就學起了彙編(這一直是我的一大心病),慢慢學吧,就當了卻了我的一個願望。作為我的第一個彙編程式,仔細縷縷編寫的過程。好了,廢話不說了,開始正題。

手頭上的資料:飛思卡爾微控制器,偵錯程式以及手冊(歐了,就這三樣),對了,下一個飛思卡爾微控制器的彙編指令集哦。

開始如下工作:

首先熟悉中斷機制,確定我們要在哪部分程式設計,以及程式設計之後起到的效果,然後才能更好地程式設計。具體機制參考下圖:


程式設計部分:參考手冊找到PIT部分,根據以往C語言程式設計的經歷,定時器主要通過配置相應的暫存器來實現,為此我們配置所需的暫存器,裡面的暫存器太多了(吧啦吧啦),

其實,每個微控制器都會有相應模組的功能框圖。如下圖所示:

在該部分,手冊裡面給了一個例程:

上圖中的標號1處之所以箭頭用黃色,是因為這是錯的(我也被坑的很慘)。在給的附件程式中會有應該如何修改(最後);其實,仔細想想也就知道了,中斷向量表處於只讀儲存區中,一句MOVW怎麼能將它就該呢(哎)。

上圖中的標號3處的MOVB  #$01,PITTF這句必須要有,是為了將相應的標誌清空的(此處和51有區別,此處糾結了很長時間)。

下面是我的程式附件:

;**************************************************************
;* This stationery serves as the framework for a              *
;* user application. For a more comprehensive program that    *
;* demonstrates the more advanced functionality of this       *
;* processor, please see the demonstration applications       *
;* located in the examples subdirectory of the                *
;* Freescale CodeWarrior for the HC12 Program directory       *
;**************************************************************
; Include derivative-specific definitions
            INCLUDE 'derivative.inc'

; export symbols
            XDEF Entry, _Startup, main
            ; we use export 'Entry' as symbol. This allows us to
            ; reference 'Entry' either in the linker .prm file
            ; or from C/C++ later on

            XREF __SEG_END_SSTACK      ; symbol defined by the linker for the end of the stack




; variable/data section
MY_EXTENDED_RAM: SECTION
; Insert here your data definition.

; code section
MyCode:     SECTION
main:
_Startup:
Entry:
            LDS  #__SEG_END_SSTACK     ; initialize the stack pointer  pu
            SEI
            ;**********關看門狗
            CLR COPCTL
            ;*********定時器0暫存器設定
            MOVB #$ff,DDRB
            MOVB #$55,PORTB
           BCLR  PITCFLMT,#128 
           BSET  PITCE,#1
           BCLR  PITMUX,#1
           LDAB  #244
           STAB  PITMTLD0
           LDD   #65535
           STD   PITLD0
           BSET  PITCFLMT,#128
           BSET  PITTF,#1  
           BSET  PITINTE,#1
             CLRX
           
            CLI                    ; enable interrupts


MainLoop: 	BRA   MainLoop


CH0_ISR:    
            COM PORTB
            BSET PITTF ,#1
            RTI

            ORG $FF7A
            FDB CH0_ISR



相關文章