承接:嵌入式外包项目(13410905075) ;***************************************************************************** ; 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 definition RG_INT_STATMP REG 0x11 ;example register definition RG_INT_PCHTMP REG 0x12 ;example register definition ;--- RG_TEMP REG 0x13 ;example register definition RG_COUNT0 REG 0x15 ;time 0 counter RG_COUNT1 REG 0x16 RG_COUNT2 REG 0x17 RG_COUNT3 REG 0x18 RE_LAST_COUNT3 REG 0X1B ;remerber count 3 RG_COUNT_PULSE REG 0x19 ;remerber pulse period RG_OOUNT_PULSE_REMAIN REG 0X1A RG_US_CNT REG 0X1B ;delay count RG_MS_CNT REG 0X1C ; RG_S_CNT0 REG 0X1D ; RG_S_CNT1 REG 0X1E ; RG_38K_CNT REG 0X1f RG_MD_CNT REG 0X20 RG_PB_4_STATUS REG 0X21 ;---------------vaule segment------------------------------------------------- EQ_AAA EQU 0x55 ;example value definition EQ_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 ;--- INCR RG_COUNT0, 1 ;Increament RGCOUNT0 BTRSC STATUS, 2 ;Test STATUS Z bitC GOTO INCREASE_COUNT1 ;If RG_COUNT0 is verflow, increse RG_COUNT1 GOTO INT_EXIT INCREASE_COUNT1: INCR RG_COUNT1, 1 BTRSC STATUS, 2 ;Test STATUS Z bitC GOTO INCREASE_COUNT2 ;If RG_COUNT1 is verflow, increse RG_COUNT2 GOTO INT_EXIT INCREASE_COUNT2: INCR RG_COUNT2, 1 BTRSC STATUS, 2 ;Test STATUS Z bitC GOTO INCREASE_COUNT3 ;If RG_COUNT2 is verflow, increse RG_COUNT3 GOTO INT_EXIT INCREASE_COUNT3: INCR RG_COUNT2, 1 GOTO INT_EXIT ;------ INT_EXIT: MOVIA 0X00 ;Hardware interrupt program is written here. MOVAR INTFLAG ;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: CLRA MOVAR PORTB MOVIA 0X10 IOST PORTB ;Set PortB to output mode, IOB3 is input only MOVIA 0X00 OPTION ;Use internel clock source CLRA MOVAR RG_US_CNT MOVAR RG_MS_CNT MOVAR RG_S_CNT0 MOVAR RG_S_CNT1 MOVAR RG_PB_4_STATUS CALL MAIN ;---------------------main-------------------------------------------------------- MAIN: CALL DELAY_S CALL OUTPUT_MOD_WAVE MOVIA 0X07 XORAR RG_PB_4_STATUS, 0 BTRSC STATUS, Z_B GOTO CLEAR_PORTB1 GOTO SET_PORTB1 CLEAR_PORTB1: BCR PORTB, 1 GOTO MAIN SET_PORTB1: BSR PORTB, 1 GOTO MAIN ;----------------clear tx pin---------------------------------------------- CLEAR_TX_PIN: ;tx pin equan 1 BCR PORTB, 2 ;set tx pin to 0 RETURN ;----------------set tx pin-------------------------------------------------- SET_TX_PIN: BSR PORTB, 2 ;set tx pin to 1 RETURN ;----------------disable 38khz load wave----------------------------------- DISABLE_LOAD_WV: CALL DISABLE_TIME0 CALL DELAY_MS RETURN ;----------------disable 38khz load wave----------------------------------- ENABLE_LOAD_WV: CALL ENABLE_TIME0 RETURN ;----------------enable time0----------------------------------------------- ENABLE_TIME0: BTRSC INTEN,7 RETURN MOVIA 0X81 MOVAR INTEN ;Enable time0 intr RETURN ;----------------desable time0---------------------------------------------- DISABLE_TIME0: MOVIA 0X00 MOVAR INTEN ;Enable time0 intr RETURN ;----------------init count------------------------------------------------- CLEAR_COUNT: CLRA MOVAR RG_COUNT0 ;Init counter MOVAR RG_COUNT1 MOVAR RG_COUNT2 MOVAR RG_COUNT3 RETURN OUTPUT_MOD_WAVE: CLRA MOVAR RG_PB_4_STATUS CALL OUTPUT_38KHZ_WAVE BTRSS PORTB, 4 BSR RG_PB_4_STATUS, 0 CALL DELAY_MS CALL OUTPUT_38KHZ_WAVE BTRSS PORTB, 4 BSR RG_PB_4_STATUS, 1 CALL DELAY_MS CALL OUTPUT_38KHZ_WAVE BTRSS PORTB, 4 BSR RG_PB_4_STATUS, 2 CALL DELAY_MS RETURN ;----------------38K output--------------------------------------------------- OUTPUT_38KHZ_WAVE: MOVIA 25 ; MOVAR RG_38K_CNT MOVIA 0xff DECRSZ RG_38K_CNT, R CALL LOAD_WAVE MOVIA 0xff ANDAR RG_38K_CNT, R BTRSS STATUS, Z_B GOTO $-5 CALL CLEAR_COUNT RETURN LOAD_WAVE: CALL SET_TX_PIN CALL DELAY_US CALL CLEAR_TX_PIN CALL DELAY_US RETURN ;----------------delay us------------------------------------------------------ DELAY_US: MOVIA 3 MOVAR RG_US_CNT DECRSZ RG_US_CNT, R GOTO $-1 NOP NOP RETURN ;----------------delay mS--------------------------------------------------------- DELAY_MS: MOVIA 60 ;Period is MOVAR RG_MS_CNT CALL DELAY_US DECRSZ RG_MS_CNT, R GOTO $-2 RETURN ;---------------delay S-------------------------------------------------------- DELAY_S: MOVIA 0XFF MOVAR RG_S_CNT0 MOVIA 8 MOVAR RG_S_CNT1 CALL DELAY_MS DECRSZ RG_S_CNT0, R GOTO $-2 DECRSZ RG_S_CNT1, R GOTO $-2 RETURN ;---------------MCU Boot/Reset Vector segment--------------------------------- ORG 0x3FF ;MCU reset vector GOTO INIT
晒晒我的第一个汇编项目(源代码)
最新推荐文章于 2022-04-14 13:27:18 发布