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

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








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值