晒晒我的第一个汇编项目(源代码)
;*****************************************************************************; 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