;***********************************************************
;单    位:苏州华芯微电子有限公司                           *
;                                                          *
;文件名称:	HS16F1211_TMR0							       *
;摘    要:							   					   *
;当期版本:	V1.0                                           *
;作    者:	LvBuWei		                                   *
;开始日期:  2024-06-12                                     *
;完成日期:                                                 *
;                                                          *
;先前版本:                                                 *
;作    者:                                                 *
;创始日期:                                                 *
;***********************************************************

;***********************************************************
;files include
#include "HS16F1211.inc"

;***********************************************************
;user general reg define
DELAY_US	EQU		20H

STATUS_BUF	EQU		07EH
ACC_BUF		EQU		07FH
;***********************************************************
;/函数入口地址
	ORG		00H
	GOTO	MAIN
	
;/中断入口地址
	ORG		04H
	;GOTO	INT_PRO
INT_PRO:	
	MOVAR	ACC_BUF		;保存ACC
	SWAPR	STATUS,0
	MOVAR	STATUS_BUF	;保存STATUS
	
	BTRSS	FT0IF
	GOTO	INT_BACK
	BCR		FT0IF
	MOVIA	0158
	MOVAR	TMR0
	
	COMR	PORTB,1
	
INT_BACK:	
	SWAPR	STATUS_BUF,0
	MOVAR	STATUS
	SWAPR	ACC_BUF,1
	SWAPR	ACC_BUF,0
	RETFIE
	
;***********************************************************
;函数名：MAIN
;***********************************************************
MAIN:
	CALL	GPIO_init
	CALL	BANK0_RAM_CLR
	CALL	BANK1_RAM_CLR
	CALL	TMR0_INIT
	
MAIN_LOOP:
	CLRWDT
	COMR	PA,1	;翻转PA电平
	;COMR	PB,1	;翻转PA电平
	MOVIA	200
	CALL	DELAY	;延时2000个指令周期
	GOTO	MAIN_LOOP

;***********************************************************
;函数名：TMR0_INIT
;TMR0：定时器没有启动位一直运行中，分频可选，无自动装载
;***********************************************************
TMR0_INIT:
	BSR		STATUS,5
	
	;OPTION_REG(BANK1)
	MOVIA	000H		;0000 0000
	MOVAR	OPTION_REG	;Bit7：INT1EDG：外部中断1触发方式选择位（PB1）	;0-falling edge, 1-rising edge
						;Bit6：INTEDG：外部中断触发方式选择位（PB0）	;0-falling edge, 1-rising edge
						;Bit5：T0CS：TMR0时钟源选择位					;0-fcpu, 1-ExitClock
						;Bit4：T0SE：TMR0时钟源边沿选择位				;0-falling edge, 1-rising edge
						;Bit3：PSA：预分频分配位						;0-TMR0, 1-WDT
						;Bit2~Bit0：PS2:PS0：预分频比率选择位
	
	BCR		STATUS,5
	
	MOVIA	58
	MOVAR	TMR0		;初值
	
	BCR		FT0IF		;flag clear
	BSR		FT0IE		;int en
	BSR		FGIE		;
	RETURN
	
;***********************************************************
;函数名：GPIO_init
;注意寄存器所在 bank 区域
;***********************************************************
GPIO_init:
	BSR		STATUS,5	;转到bank1
	
	;OPTION_REG(BANK1)
	MOVIA	000H		;0000 0000
	MOVAR	OPTION_REG	;Bit7：INT1EDG：外部中断1触发方式选择位（PB1）	;0-falling edge, 1-rising edge
						;Bit6：INTEDG：外部中断触发方式选择位（PB0）	;0-falling edge, 1-rising edge
						;Bit5：T0CS：TMR0时钟源选择位					;0-fcpu, 1-ExitClock
						;Bit4：T0SE：TMR0时钟源边沿选择位				;0-falling edge, 1-rising edge
						;Bit3：PSA：预分频分配位						;0-TMR0, 1-WDT
						;Bit2~Bit0：PS2:PS0：预分频比率选择位

	;PCON(BANK1)(芯片控制寄存器)
	MOVIA	0A0H		;101- ----   	
	MOVAR	PCON		;Bit7：WDTE: WDT（看门狗定时器）使能位	;0-DIS, 1-EN
						;Bit6：EIS: IOB0/INT引脚定义位			;0-DIS, 1-EN
						;Bit5：LVREN: 低电压复位使能位			;0-DIS, 1-EN
						
	;TRISA(BANK1)(I/O口PA控制寄存器)
	MOVIA	00H			;--00 0000		
	MOVAR	TRISA		;0-OUT, 1-IN	
	
	;TRISB(BANK1)(I/O口PB控制寄存器)
	MOVIA	00H			;0000 0000 			
	MOVAR	TRISB		;0-OUT, 1-IN
	
	;PAHCON(BANK1)(PA内部上拉控制寄存器) 
	MOVIA	0FFH		;--11 1111
	MOVAR	PAHCON		;0-EN, 1-DIS
	         
	;PADCON(BANK1)(PA内部下拉控制寄存器)
	MOVIA	0FFH		;--11 ----
	MOVAR	PADCON		;0-EN, 1-DIS
	
	;PAIC0(BANK1)(PA口驱动选择寄存器)		
	MOVIA	00H			;--00 0000
	MOVAR	PAIC0		;0-DIS, 1-EN
	
	;PBIC0(BANK1)(PA口驱动选择寄存器)		
	MOVIA	00H			;0000 0000
	MOVAR	PBIC0		;0-DIS, 1-EN
	
	;WUCON(BANK1)(PORB输入状态变化中断/唤醒控制寄存器)
	MOVIA	00H			;0000 0000
	MOVAR	WUCON		;0-DIS, 1-EN
	
	BCR		STATUS,5	;转到bank0
		
	;PDCON(BANK0)(内部下拉控制寄存器)
	MOVIA	0FFH		;1111 1111
	MOVAR	PDCON		;0-EN, 1-DIS	
	
	;ODCON(BANK0)(PB漏极开路控制寄存器)
	MOVIA	00H			;0000 0000
	MOVAR	ODCON		;0-DIS, 1-EN
	
	;PHCON(BANK0)(PB 内部上拉控制寄存器)
	MOVIA	0FFH		;1111 1111
	MOVAR	PHCON		;0-EN, 1-DIS
	
	RETURN
	
;***********************************************************
;函数名：BANK0_RAM_CLR
;***********************************************************
BANK0_RAM_CLR:
	MOVIA	0X5F
	MOVAR	020H
	MOVIA	0X7F
	MOVAR	FSR
	
BANK0_RAM_CLR_LOOP:	
	CLRR	INDF
	DECR	FSR,1
	DECRSZ	020H,1
	GOTO	BANK0_RAM_CLR_LOOP	
	RETURN

;***********************************************************
;函数名：BANK1_RAM_CLR
;Bit7：间接寻址 BANK 选择位，与 IRP 共同控制间接寻址 BANK
;***********************************************************
BANK1_RAM_CLR:	
	MOVIA	(0x80 | 03FH)
	MOVAR	FSR
	MOVIA	020H	;32*reg-bank1
	MOVAR	020H
	
BANK1_RAM_CLR_LOOP:	
	CLRR	INDF
	DECR	FSR,1
	DECRSZ	020H,1
	GOTO	BANK1_RAM_CLR_LOOP	
	RETURN	
	
;***********************************************************
;函数名：DELAY
;传参：循环体调用次数
;返回值：
;功能：延时10个指令周期
;引脚：
;备注：
;***********************************************************
DELAY:					
	MOVAR	DELAY_US	
DELAY_LOOP:	
	CLRWDT				;1;/清看门狗
	GOTO	$+1			;2
	GOTO	$+1			;2
	GOTO	$+1			;2
	DECRSZ	DELAY_US,1	;1/(2)
	GOTO	DELAY_LOOP	;2	
	RETURN				;2
	
