承接:嵌入式外包项目(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