;********************TOOL_UDV_CP02********************************************
; TITLE "TOOL_UDV_CP02.ASM"
; DATE 2006/05/01
PROCESSOR 16F73
;*****************************************************************************
; BANK SPECIAL REGISTERS(特殊暂存器库)
;*****************************************************************************
INDEX EQU 00H
RTCC EQU 01H ;即时时间/事件记数器.
PCL EQU 02H ;程式计数器的低8位元.
;*****************************************************************************
PSW EQU 03H ;程序状态暂存器.
CF EQU 0 ;进位旗标
DCF EQU 1 ;半进位旗标
ZF EQU 2 ;零位旗标
PDF EQU 3 ;电源下降旗标
TOF EQU 4 ;计时超时旗标
PA0 EQU 5 ;分页预选位元
PA1 EQU 6 ;分页预选位元
IPA EQU 7
;*****************************************************************************
FSR EQU 04H ;档案选择暂存器
BK0 EQU 5
BK1 EQU 6
;*****************************************************************************
RA EQU 05H ;RA暂存器
SP EQU 0 ;OUTPUT
BOTTON_SELECT EQU 1 ;INPUT
BOTTON_SELECT1 EQU 2 ;INPUT
SW EQU 3 ;OUTPUT
USB_KB EQU 4 ;OUTPUT
USB_MS EQU 5 ;OUTPUT
;******************************************************************************
RB EQU 06H ;RB暂存器
MIC1 EQU 0 ;OUTPUT
MIC2 EQU 1 ;OUTPUT
SEG_DAT EQU 2 ;OUTPUT
SEG_CLK EQU 3 ;OUTPUT
SEG_CLR EQU 4 ;OUTPUT
UN_USE0 EQU 5
UN_USE1 EQU 6
C1 EQU 7 ;OUTPUT
;*******************************************************************************
RC EQU 07H ;RC暂存器
_D0 EQU 0
_D1 EQU 1
_D2 EQU 2
_D3 EQU 3
_D4 EQU 4
_D5 EQU 5
_RX EQU 6
_TX EQU 7
;*******************************************************************************
PCLATH EQU 0AH ;PROGRAM COUNTER HIGH BYTE
SUB_0 EQU 0
SUB_1 EQU 1
SUB_2 EQU 2
PG0 EQU 3
PG1 EQU 4
;*******************************************************************************
;* BANK0 GENEARL PURPOSE REGISTERS(普通用途暂存器库0)
;*******************************************************************************
K21REG EQU 21H
K22REG EQU 22H
K23REG EQU 23H
K24REG EQU 24H
K25REG EQU 25H
K26REG EQU 26H
K27REG EQU 27H
K28REG EQU 28H
K29REG EQU 29H
;*******************************************************************************
K2AREG EQU 2AH
K2BREG EQU 2BH
K2CREG EQU 2CH
K2DREG EQU 2DH
K2EREG EQU 2EH
K2FREG EQU 2FH
K30REG EQU 30H
K31REG EQU 31H
;*******************************************************************************
; ALL BANKS COMMON REGISTERS(所有暂存器库的共用暂存器)
;*******************************************************************************
K70REG EQU 70H
REG_0 EQU 0
REG_1 EQU 1
REG_2 EQU 2
REG_3 EQU 3
REG_4 EQU 4
REG_5 EQU 5
REG_6 EQU 6
REG_7 EQU 7
;*******************************************************************************
TEMP0 EQU 71H
TEMP1 EQU 72H
TEMP2 EQU 73H
TEMP3 EQU 74H
PORT_NUMBER EQU 75H
TEMP5 EQU 76H
;*******************************************************************************
TIMER0 EQU 77H
TIMER1 EQU 78H
TIMER2 EQU 79H
TIMER3 EQU 7AH
TIMER4 EQU 7BH
;*******************************************************************************
TEMP6 EQU 7CH
TEMP7 EQU 7DH
;*******************************************************************************
TEMP8 EQU 7EH
TEMP9 EQU 7FH
;*******************************************************************************
; BANK1 SPECIAL REGISTERS (暂存器库1中的专用暂存器)
;*******************************************************************************
OPT_R EQU 81H
PS0 EQU 0
PS1 EQU 1
PS2 EQU 2
PSA EQU 3
TOSE EQU 4
TOCS EQU 5
INTEDG EQU 6
RBPU EQU 7
;*******************************************************************************
TRISA EQU 85H
TRISB EQU 86H
TRISC EQU 87H
;*******************************************************************************
; UNIVERSAL SYNCHRONOUS ASYNCHRONOUS RECEIVER TRANMITTER,UASRT
; (通用的 同步的 异步的 接收器)
;*******************************************************************************
TXSTA EQU 98H ;TXSRA
TX9D EQU 0 ;PRINTER PORT DATA
TRMT EQU 1
BRGH EQU 2
Unimplemented EQU 3
SYNC EQU 4
TXEN EQU 5
TX9 EQU 6
CSRC EQU 7
;*******************************************************************************
PIE1 EQU 8CH ;TXSRA
TXIE EQU 4
RCIE EQU 5
;*******************************************************************************
PIR1 EQU 0CH ;RXSRA
TXIF EQU 4
RCIF EQU 5
;*******************************************************************************
RCSTA EQU 18H ;RXSRA
RX9D EQU 0 ;PRINTER PORT DATA
OERR EQU 1
RERR EQU 2
ADDEN EQU 3
CREN EQU 4
SREN EQU 5
RX9 EQU 6
SPEN EQU 7
;*******************************************************************************
TXREG EQU 19H
SPBRG EQU 99H
RCREG EQU 1AH
;*******************************************************************************
ADCON1 EQU 9FH ;Port A Analog/Digital Define Controller
BIT_0 EQU 0 ;(Port A 模拟/数字定义控制器)
BIT_1 EQU 1
BIT_2 EQU 2
BIT_3 EQU 3
BIT_4 EQU 4
BIT_5 EQU 5
BIT_6 EQU 6
BIT_7 EQU 7
;*******************************************************************************
; RTCC TABLE
;*******************************************************************************
RF0 EQU 0
RF1 EQU 1
RF2 EQU 2
RF3 EQU 3
RF4 EQU 4
RF5 EQU 5
RF6 EQU 6
RF7 EQU 7
;*******************************************************************************
PAGE0 EQU 0005H
PAGE1 EQU 0800H ;MIAN PROGRAM PIC 16F73
RST_87 EQU 0000H ;STARTING REGISTER AT 0000H
;*******************************************************************************
PORT_MAIN EQU 2
;*******************************************************************************
ORG RST_87
GOTO MAIN_INIT
;*******************************************************************************
;LED灯显示副程式
SCODE
CLRF PCLATH
ADDWF PCL
RETLW 06H ;60H init ;0
RETLW 06H ;60H 1port ;1
RETLW 0CBH ;0B6H 2port ;2
RETLW 0FFH ;60H ;3
RETLW 99H ;4
RETLW 92H ;5
RETLW 82H ;6
RETLW 0F8H ;7
RETLW 80H ;8
RETLW 90H ;9
RETLW 88H ;A
RETLW 83H ;B
RETLW 0C6H ;C
RETLW 0A1H ;D
RETLW 86H ;E
RETLW 8EH ;F
SHOWDISPLAY
BSF RB,SEG_DAT
BCF RB,SEG_CLR ;clear display
BSF RB,SEG_CLR
MOVF PORT_NUMBER,W
ANDLW 0FH
CALL SCODE
MOVWF TEMP6
MOVLW 08H
MOVWF TEMP7
SHOWDISPLAY1
BSF RB,SEG_DAT
BTFSC TEMP6,7
BCF RB,SEG_DAT
BCF RB,SEG_CLK
BSF RB,SEG_CLK
RLF TEMP6
DECFSZ TEMP7,1
GOTO SHOWDISPLAY1
RETLW 0
;LED灯显示副程式结束
;*******************************************************************************
;B声副程式开始
BEEP
BSF RA,SP ;SET speaker on
BEP0
CLRF RTCC
BEP1
BTFSS RTCC,RF7
GOTO BEP1
BCF RA,SP
RETLW 0
;B声副程式结束.返回调用处.
;*******************************************************************************
;延迟副程式开始
ONE_SECOND
MOVLW 0EH
MOVWF TIMER1
BTFSC TEMP5,3
GOTO LOOP1
MOVLW 01H
MOVWF TIMER1
LOOP1 MOVLW 08FH
MOVWF TIMER2
LOOP2 MOVLW 0FFH
MOVWF TIMER3
LOOP3 DECFSZ TIMER3
GOTO LOOP3
DECFSZ TIMER2
GOTO LOOP2
DECFSZ TIMER1
GOTO LOOP1
RETLW 0H
;延迟副程式结束,返回调用处.
;*******************************************************************************
;开始进行初始化
MAIN_INIT
CLRF PSW ;PSW暂存器的5,6位元决定了使用哪个暂存器库中的暂存器
CLRF FSR ;FSR暂存器决定选择哪个暂存器库.
CLRF PCLATH ;PCLATH暂存器是储存程式计数器的高位元.
BSF PSW,PA0 ;CHANGE REGISTERS BANK TO 2ND
MOVLW 87H ;10000111
MOVWF OPT_R ;SET RTCCTIMER SCALE TO 128US EACH STUP
MOVLW 07H ;0000011
MOVWF ADCON1 ;DEFINE PORTA IS digital i/0
MOVLW 06H ;00000110
MOVWF TRISA
MOVLW 00H
MOVWF TRISB
MOVLW 00H
MOVWF TRISC
BCF PSW,PA0
;*******************************************************************************
BSF RA,BOTTON_SELECT
BSF RA,BOTTON_SELECT1
BCF RA,SW
BSF RA,USB_KB
BSF RA,USB_MS
BSF RC,_D4
BCF RA,SP
BSF RB,MIC1
BSF RB,MIC2
BCF RB,C1
CLRF TEMP6
CLRF TEMP7
BSF RB,SEG_DAT
BCF RB,SEG_CLK
BSF RB,SEG_CLK
CLRF PORT_NUMBER
CALL SHOWDISPLAY
;初始化结束,进入主循环
;;*******************************************************************************
CALL BEEP ;重置后,叫一声.
;*******************************************************************************
;开始主循环TX
TX
; BSF RA,USB_KB
CLRF TEMP1 ;使用TEMP1暂存器来储存RA的状态.
MOVF RA,0 ;READ
MOVWF TEMP1
BTFSS TEMP1,2 ;按了BOTTON_SELECT1
GOTO TX_1
BTFSS TEMP1,1 ;按了BOTTON_SELECT
GOTO TX_0
GOTO TX
;主循环结束.返回TX处继续进行循环.侦测到低电位则跳到分支循环.
;***********************************************************
;开始进行分支循环.
TX_1
MOVF RA,0
MOVWF TEMP1
BTFSS TEMP1,2 ;按了BOTTON_SELECT1
GOTO TX_1
GOTO BOTTON_1
TX_0
MOVF RA,0
MOVWF TEMP1
BTFSS TEMP1,1 ;按了BOTTON_SELECT
GOTO TX_0
GOTO BOTTON_0
;分支循环结束.返回继续进行分支循环.侦测到高电位则跳到指定的按钮功能副程式处.
;*******************************************************************************
;*******************************************************************************
;按了BOTTON_SELECT1按钮.
BOTTON_1
MOVLW 05H
MOVWF TEMP2
BOTTON_1_0
BSF RB,MIC1
BSF RB,MIC2
CALL ONE_SECOND
BCF RB,MIC1
BCF RB,MIC2
CALL ONE_SECOND
DECFSZ TEMP2,1 ;使用TEMP2来决定闪烁的次数.
GOTO BOTTON_1_0
BSF RB,MIC1
BSF RB,MIC2
GOTO TX
;BOTTON_SELECT1按钮功能执行完毕.返回主循环.
;*******************************************************************************
;按了BOTTON_SELECT按钮.
BOTTON_0
CLRF TEMP3
MOVF RB,0
MOVWF TEMP3 ;使用TEMP3暂存器来储存RB的状态.
BTFSC TEMP3,7
GOTO SET_LOW
BSF RB,C1
MOVLW 02H
MOVWF PORT_NUMBER
; CALL SHOWDISPLAY
GOTO SET_SW
SET_LOW BCF RB,C1
MOVLW 01H
MOVWF PORT_NUMBER
; CALL SHOWDISPLAY
GOTO SET_SW
SET_SW
BSF RA,SW
CALL SHOWDISPLAY
MOVF RA,0
MOVWF TEMP5 ;使用TEMP5暂存器来存储RA的状态.
CALL ONE_SECOND
BCF RA,SW
GOTO TX
;BOTTON_SELECT按钮功能执行完毕. 返回主循环.
;*******************************************************************************
END