读书人

晒晒小弟我的第一个汇编项目(源代码)

发布时间: 2013-01-28 11:49:56 作者: rapoo

晒晒我的第一个汇编项目(源代码)

;*****************************************************************************;  This file is a base code template for assembley code generation on the 8PE53.;*****************************************************************************;* TITLE        :;* REVISION     :1.0;* AUTHOR       :DriverMonkey;* COMPANY      :;* DATE         :2013.1.26;* QQ:196568501;* MAIL:bookworepeng@hotmail.com;* CHIP         :8PE53;* CONFIG       :;*****************************************************************************;---------------Include files Segment-----------------------------------------#include        <8PE53.ASH>;---------------Custom define segment-----------------------------------------RG_INT_ACCTMP   REG     0x10                    ;example register definitionRG_INT_STATMP   REG     0x11                    ;example register definitionRG_INT_PCHTMP   REG     0x12                    ;example register definition;---RG_TEMP         REG     0x13                    ;example register definitionRG_COUNT0REG  0x15 ;time 0 counterRG_COUNT1REG  0x16RG_COUNT2REG  0x17RG_COUNT3REG  0x18RE_LAST_COUNT3REG0X1B;remerber count 3RG_COUNT_PULSEREG0x19;remerber pulse periodRG_OOUNT_PULSE_REMAINREG 0X1ARG_US_CNTREG0X1B;delay countRG_MS_CNTREG0X1C;RG_S_CNT0REG0X1D;RG_S_CNT1REG0X1E;RG_38K_CNTREG0X1fRG_MD_CNTREG0X20RG_PB_4_STATUSREG0X21;---------------vaule segment-------------------------------------------------EQ_AAA          EQU     0x55                    ;example value definitionEQ_TX_CHANGE    EQU     0x03 ;---------------Program segment-----------------------------------------------                ORG     0x000;---------------Software Interrupt Vector segment-----------------------------                ORG     0x002                   ;Software INT vector                                                ;Software interrupt program is written here.;---------------Hardware Interrupt Vector segment-----------------------------                ORG     0x008                   ;Hardware INT vector                MOVAR   RG_INT_ACCTMP                SWAPR   STATUS,A                MOVAR   RG_INT_STATMP                SWAPR   PCHBUF,A                MOVAR   RG_INT_PCHTMP           ;Save ACC STATUS PCHBUF template code                ;---INCRRG_COUNT0, 1;Increament RGCOUNT0BTRSCSTATUS, 2;Test STATUS Z bitCGOTO   INCREASE_COUNT1;If RG_COUNT0 is verflow, increse RG_COUNT1GOTO INT_EXITINCREASE_COUNT1:INCRRG_COUNT1, 1BTRSCSTATUS, 2;Test STATUS Z bitCGOTO   INCREASE_COUNT2;If RG_COUNT1 is verflow, increse RG_COUNT2GOTO INT_EXITINCREASE_COUNT2:INCRRG_COUNT2, 1BTRSCSTATUS, 2;Test STATUS Z bitCGOTO   INCREASE_COUNT3;If RG_COUNT2 is verflow, increse RG_COUNT3GOTO INT_EXITINCREASE_COUNT3:INCRRG_COUNT2, 1GOTO INT_EXIT;------INT_EXIT:MOVIA 0X00                    ;Hardware interrupt program is written here.MOVARINTFLAG ;Clear interrupt FLA FLAG                 SWAPR   RG_INT_PCHTMP,A                MOVAR   PCHBUF                SWAPR   RG_INT_STATMP,A                MOVAR   STATUS                SWAPR   RG_INT_ACCTMP,R                SWAPR   RG_INT_ACCTMP,A                RETFIE                          ;Restore ACC STATUS PCHBUF template code;--------------------init---------------------INIT:             CLRAMOVAR   PORTBMOVIA0X00IOSTPORTB  ;Set PortB to output mode, IOB3 is input onlyMOVIA0X00OPTION;Use internel clock sourceCLRAMOVARRG_US_CNTMOVARRG_MS_CNTMOVARRG_S_CNT0MOVARRG_S_CNT1CALL    MAIN;---------------------main--------------------MAIN:CALLDELAY_SCALL OUTPUT_MOD_WAVEMOVIA0X07XORARRG_PB_4_STATUS, 0BTRSCSTATUS, Z_BBCRPORTB, 1BSRPORTB, 1GOTO MAIN;----------------clear tx pin----------------------------------------------CLEAR_TX_PIN:;tx pin equan 1BCRPORTB, 2;set tx pin to 0RETURN;----------------set tx pin--------------------------------------------------SET_TX_PIN:BSRPORTB, 2;set tx pin to 1RETURN;----------------disable 38khz load wave-----------------------------------DISABLE_LOAD_WV:CALL DISABLE_TIME0CALLDELAY_MSRETURN;----------------disable 38khz load wave-----------------------------------ENABLE_LOAD_WV:CALL ENABLE_TIME0RETURN;----------------enable time0-----------------------------------------------ENABLE_TIME0:BTRSCINTEN,7RETURNMOVIA0X81MOVARINTEN;Enable time0 intrRETURN;----------------desable time0----------------------------------------------DISABLE_TIME0:MOVIA0X00MOVARINTEN;Enable time0 intrRETURN;----------------init count-------------------------------------------------CLEAR_COUNT:CLRAMOVARRG_COUNT0;Init counterMOVARRG_COUNT1MOVARRG_COUNT2MOVARRG_COUNT3RETURNOUTPUT_MOD_WAVE:CALLOUTPUT_38KHZ_WAVEBTRSCPORTB, 4BSRRG_PB_4_STATUS, 0CALLDELAY_MSCALLOUTPUT_38KHZ_WAVEBTRSCPORTB, 4BSRRG_PB_4_STATUS, 1CALLDELAY_MSCALLOUTPUT_38KHZ_WAVEBTRSCPORTB, 4BSRRG_PB_4_STATUS, 2CALLDELAY_MSRETURN;----------------38K output---------------------------------------------------OUTPUT_38KHZ_WAVE:MOVIA 25;MOVARRG_38K_CNTMOVIA 0xffDECRSZRG_38K_CNT, RCALLLOAD_WAVEMOVIA 0xffANDARRG_38K_CNT, RBTRSSSTATUS, Z_B GOTO $-5CALLCLEAR_COUNTRETURNLOAD_WAVE:CALLSET_TX_PINCALLDELAY_USCALLCLEAR_TX_PINCALL DELAY_USRETURN;----------------delay us------------------------------------------------------DELAY_US:MOVIA3MOVARRG_US_CNTDECRSZRG_US_CNT, RGOTO$-1NOPNOPRETURN;----------------delay mS---------------------DELAY_MS:MOVIA60;Period is MOVARRG_MS_CNTCALLDELAY_USDECRSZRG_MS_CNT, RGOTO$-2RETURN;---------------delay S--------------------DELAY_S:MOVIA0XFFMOVARRG_S_CNT0MOVIA8MOVARRG_S_CNT1CALLDELAY_MSDECRSZRG_S_CNT0, RGOTO$-2DECRSZRG_S_CNT1, RGOTO$-2RETURN;---------------MCU Boot/Reset Vector segment---------------------------------                ORG     0x3FF                   ;MCU reset vector                GOTO    INIT


 

读书人网 >其他相关

热点推荐