📄 e468.dt
字号:
;************************************************************
;* Tilte: FM TRANSMITER FOR CAR *
;* Description: MCU:EM78P468N ,RF IC:Sanyo Lv2280 *
; xtal 32.768Khz, *
;* Company: Protech microelectronics (sz) ltd. *
;* Author: Ellison.Lan *
;* Date: 23/08/2006 *
;* Version: v4.0 *
;************************************************************
INCLUDE "EM78x468xx.INC"
INCLUDE "clrEM78RamBank.INC"
;============================================
; START
;
;============================================
ORG 000H
Reset:
JMP START
;==============================================================
; INTERRUPT VECTOR
;
;;==============================================================
ORG 00CH
PAGE 0
JMP INTCNT1_PRO ; COUNTER1 INTERRUPT ;YES
;
ORG 020H
;==============================================================
;----------------------------------------------------------------
;Couter1 Interrupt process subroutine
;----------------------------------------------------------------
INTCNT1_PRO:
; NOP
CLR RF
BS WORKFLAGS,FGINTON
;;JBC PORT5,5
;;JMP CNT1DONE
;;MOV A,@85
;;SUB A,INCOUNT
;;JBC STATUS,C
;;JMP CNT1DONE
;;MOV A,@84
;;MOV INCOUNT,A
CNT1DONE:
JBS PORT5,7 ;TEST POWER STATUS
JMP $+3
CALL PowerDispOff ; If Power<2.8v Power Bar Shine
JMP $+2
CALL PowerDispOn
NOP
CALL StatusBarOnOff ; 0.5S ON OFF STATUS BAR.
NOP ;User define for special purpose!!
MOV A,@85
XOR A,INCOUNT
JBC STATUS,Z ;
BS PORT8,3 ; 10SEC,LED OFF
DJZ INCOUNT
JMP INT_RET
BS WORKFLAGS,TwoMinUp;
INT_RET:
NOP
RETI
;=======================================
; Table for Display
;=======================================
TABLE:
ADD PC,A
RETL 0xeb ;0
RETL 0x0a ;1
RETL 0xC7 ;2
RETL 0x8f ;3
RETL 0x2e ;4
RETL 0xad ;5
RETL 0xed ;6
RETL 0x0b ;7
RETL 0xef ;8
RETL 0xaf ;9
;=============================
; 清除所有LCD RAM
;=============================
CLR_LCD:
CLRA
MOV TEMP1,A
Clr_ALCD:
MOV A,TEMP1
MOV RA,A
CLR RB
INC TEMP1
JBS TEMP1,5
JMP Clr_ALCD
RET
;==============================
; 主程序开始
;==============================
START:
NOP
BC STATUS,C
MOV A,DispFreq_Hi
SUB A,@0x10
JBS STATUS,C
JMP POWERRESET
MOV A,@0x08
SUB A,DispFreq_Hi
JBS STATUS,C
JMP POWERRESET
JBS STATUS,Z
JMP CheckCharity
MOV A,@0x80
SUB A,DispFreq_Lw
JBS STATUS,C
JMP POWERRESET
CheckCharity:
NOP
MOV A,DispFreq_Hi
SUB A,CharityData1
JBS STATUS,Z
JMP POWERRESET
MOV A,DispFreq_Lw
SUB A,CharityData2
JBC STATUS,Z
JMP Sys_Init
POWERRESET:
NOP
m468ClrRamBank ;RAM clear
;
;
MOV A,@0x08
MOV DispFreq_Hi,A ; Display Frequence preset is 88.0 Mhz
MOV A,@0x80
MOV DispFreq_Lw,A ;
;
MOV A,@0x09
MOV M1_Value_Hi,A ; M1 PRESET-> 90.0Mhz
MOV A,@0x00
MOV M1_Value_Lw,A
;
MOV A,@0x09
MOV M2_Value_Hi,A ; M2 PRESET-> 95.0Mhz
MOV A,@0x50
MOV M2_Value_Lw,A
;
MOV A,@0x10
MOV M3_Value_Hi,A ; M3 PRESET-> 100.0Mhz
MOV A,@0x00
MOV M3_Value_Lw,A
;
MOV A,@0x10
MOV M4_Value_Hi,A ; M4 PRESET-> 105.0Mhz
MOV A,@0x50
MOV M4_Value_Lw,A
Sys_Init:
MOV A,@0b0011111
MOV R4,A ;Bank 0 ,From 00 to 3F
CLR RC ; counter disable
CLR RE ;Disable INT0,P5.4 for IO
CLR RF ;Clear Interrupt Status
;
IOPAGE 0
MOV A,@0xF1 ; p5.4 P5.5,P5.6~7 INTPUT , p7.0~3->SEGMENT,P7.4~7 ->IO P8-> General IO
IOW IOC50
;
MOV A,@0xff ; P6 INPUT FOR KEY
IOW IOC60
;
MOV A,@0x70
IOW IOC70 ;P7.7 OUTPUT P7.4~P7.6,INPUT PORT,P7.4,AGC ,P7.5->PA0,P7.6->PA1
;
CLRA
;IOW IOC80 ;P8 OUTPUT FOR IIC
IOW IOC90 ;RAM
IOW IOCA0
IOW IOCC0
IOW IOCD0
IOW IOCE0
;
MOV A,@0b00010000
IOW IOC80 ;P8.4 FOR POWER OFF TEST
;
MOV A,@0xff ;
IOW IOCB0 ;COUNTER1 PRESET IS 255
;
MOV A,@0x08 ;mask all interrpt,Enable Counter1
IOW IOCF0
IOPAGE 1
MOV A,@0x04 ; P6 Wake up enable ,P8 Wake up enable
IOW IOC61
;
CLRA
IOW IOC71
IOW IOC81
IOW IOCA1
IOW IOCC1
;IOW IOCD1
IOW IOCE1
;
MOV A,@0x05 ; CNT1 Scale 1:32, 1sec INT,USE 32.768Khz
IOW IOC91 ;
MOV A,@0xff ;Enable P6 pull high resister function
IOW IOCB1
MOV A,@0xff
IOW IOCD1 ;Enable P8 pull high resister function
;===== port init ================
IOPAGE 0 ;Return IOPage 0-
;
MOV A,@0xf0 ;PORT 5 HIGH
MOV PORT5,A ;initial system status
MOV A,@0xff
MOV PORT6,A ;P6 high for KEYscan
MOV A,@0xfb ;IIC PORT,SCL/P8.1,SDA/P8.0 HIGH,LV2280 POWER OFF
MOV PORT8,A
DISI
WDTC
Clr WORKFLAGS ;Clear WorkFlags
Clr DISPFLAGS
;========= SET PRESET VALUE===================
CLRA
MOV ControlByte1,A ;
MOV A,@0x02 ; TS1-TS0 : Test Mode Dedault state is: "01"
MOV ControlByte2,A
JBC PORT7,4 ; option
BS ControlByte2,0 ; AGC
JBC PORT7,5
BS ControlByte2,3 ; PA0
JBC PORT7,6
BS ControlByte2,4 ; PA1
;
;=============================================
LCD_Init:
MOV A,@0xe0 ;1/3 Bias,1/4 duty,lcd off
MOV R9,A
;
MOV A,@0xF5
MOV RD,A ;Main Clock 8MhZ,Sleep mode,fm MODE
CALL delay_5ms ;
;
;CALL CLR_LCD
Dis_ON:
;
CALL Display_Freq;
CALL DispFreq_Change ; dispfreq to freq,save in 0x31,0x30
CALL ChangeCtrlByte ; Change Freq To Controlbyte
CALL WriteLV2280 ;
; NOP
;
BS RC,CNT1EN ; Start counter1
MOV A,@100 ; 2 MIN SETING
MOV INCOUNT,A
BC PORT8,3 ; LCD ON
MOV A,@0x60
MOV KEYCnt,A ; 3 Sec Key Hold
CLR OldKeyNum
CLR KeyNum
ENI ;interrupt enable
;
Key_Scan:
MOV A,@20 ;DELAY 20MS
CALL DELAY
MOV A, PORT6
XOR A,@0xFf
JBC STATUS,Z ;if key press, Z=0
JMP NO_Key ;无按键,
Key_Dl:
MOV A,@2 ; 去抖
CALL DELAY ;
MOV A,PORT6 ;
XOR A,@0xFf
JBC STATUS,Z ;
JMP NO_Key ;
;
BC WORKFLAGS,TwoMinUp ; Clear 2Min Flag
;
MOV A,@100
MOV INCOUNT,A
;
BC PORT8,3 ;LED ON
;
MOV PORT6,TEMP1;
MOV KeyNum,OldKeyNum
MOV TEMP1,KeyNum
MOV A,OldKeyNum
XOR A,KeyNum
JBC STATUS,Z
JMP KeyHoldprocess ;if oldkeynum==keynum
;BC WORKFLAGS,KeyHold ;
;BC WORKFLAGS,LongKeyOn ;
MOV A,@0x60
MOV KEYCnt,A
JBS KeyNum,1
JMP IncFreq ;Freq++
JBS KeyNum,0
JMP DecFreq ;Freq--
JBS KeyNum,2
JMP ShowM1Freq ;M1
JBS KeyNum,3
JMP ShowM2Freq ;M2
JBS KeyNum,4
JMP ShowM3Freq ;M3
JBS KeyNum,5
JMP ShowM4Freq ;M4
JBS KeyNum,6
JMP PowerOn ;Power on
JMP Key_Scan
DispFreq:
BC DISPFLAGS,ShowM
CALL Display_Freq ;
CALL DispFreq_Change ; dispfreq to freq,save in 0x31,0x30
CALL ChangeCtrlByte ; Change Freq To Controlbyte
CALL WriteLV2280 ;
; NOP
JMP Key_Scan
NO_Key:
BC WORKFLAGS,KeyHold ;
CLR OldKeyNum
CLR KeyNum
MOV A,@0x60
MOV KEYCnt,A
JBC DISPFLAGS,ShowM
JMP DispFreq
JBC WORKFLAGS,LongKeyOn
JMP SleepDone
JBS WORKFLAGS,TwoMinUp
JMP IdleDone ;
;NOP
BC WORKFLAGS,TwoMinUp ; Clear 2Min Flag
MOV A,@100 ; 2 MIN RESETING
MOV INCOUNT,A ;
;
SleepDone:
BC WORKFLAGS,LongKeyOn
BS PORT8,3 ;LED Off
BC PORT8,2 ;CLOSE LV2280 POWER
CALL CLR_LCD
BC RC,CNT1EN ;CNT1 OFF
BC R9,LCDEN ; LCD OFF
BC RD,IDLE
SleepDone1:
BC RD,CPUS ;CPUS=0,ENTER GREEN MODE
NOP
SLEP
NOP
BS RD,CPUS ;CPU=1,FROM GREEN MODE TO NARMAL MODE
NOP
NOP
; NOP
JMP Dis_ON
IdleDone:
BS RD,IDLE
BC RD,CPUS ;CPUS=0,ENTER GREEN MODE
NOP
SLEP
NOP
BS RD,CPUS ;CPU=1,FROM GREEN MODE TO NARMAL MODE
NOP
JBC WORKFLAGS,FGINTON
JMP IdleDone12
MOV A,@85
SUB A,INCOUNT
JBC STATUS,C
JMP IdleDone12
MOV A,@84
MOV INCOUNT,A
IdleDone12:
BC WORKFLAGS,FGINTON
JBC WORKFLAGS,LongKeyOn
JMP SleepDone
; NOP
; NOP
JMP Key_Scan
;---------- Key Freq ++ Done --------------------
IncFreq:
CLR DISPFLAGS
;NOP
BC STATUS,C
MOV A,DispFreq_Lw
ADD A,@0x01
DAA
MOV DispFreq_Lw,A
JBS STATUS,C
JMP CompMax ; go to compare 108.0Mhz
MOV A,DispFreq_Hi
ADD A,@0x01
DAA
MOV DispFreq_Hi,A
CompMax:
MOV A,@0x10
XOR A,DispFreq_Hi
JBS STATUS,Z
JMP SetKeyShowFlags
MOV A,@0x81
XOR A,DispFreq_Lw
JBS STATUS,Z
JMP SetKeyShowFlags
MOV A,@0x80 ;If Freq>108Mhz, TURN TO 88.0Mhz
MOV DispFreq_Lw,A
MOV A,@0x08
MOV DispFreq_Hi,A
JMP SetKeyShowFlags
;------------------Key Freq-- --------------------------
DecFreq:
CLR DISPFLAGS
;NOP
MOV DispFreq_Lw,DispFreq_Lw
JBC STATUS,Z
JMP DecHi ;DispFreq_Lw==0,有借位。
MOV A,@0x99
ADD A,DispFreq_Lw
DAA
MOV DispFreq_Lw,A
JMP CompMin
DecHi:
MOV A,@0x99
MOV DispFreq_Lw,A
MOV A,@0x99
ADD A,DispFreq_Hi
DAA
MOV DispFreq_Hi,A
CompMin:
MOV A,@0x08
XOR A,DispFreq_Hi
JBS STATUS,Z
JMP SetKeyShowFlags
MOV A,@0x79
XOR A,DispFreq_Lw
JBS STATUS,Z
JMP SetKeyShowFlags
MOV A,@0x80 ;If Freq<88.0Mhz, TURN TO 108.0Mhz
MOV DispFreq_Lw,A
MOV A,@0x10
MOV DispFreq_Hi,A
; JMP DispFreq
SetKeyShowFlags:
JMP DispFreq
;BS DISPFLAGS,ShowM
;JMP Key_Scan
;------------------ Key M1,M2,M3,M4 -------------------------
ShowM1Freq:
MOV DispFreq_Hi,DispFreqTmp_Hi
MOV DispFreq_Lw,DispFreqTmp_Lw
MOV M1_Value_Hi,DispFreq_Hi
MOV M1_Value_Lw,DispFreq_Lw
Clr DISPFLAGS
BS DISPFLAGS,M1on
BS DISPFLAGS,ShowM
JMP Key_Scan
ShowM2Freq:
MOV DispFreq_Hi,DispFreqTmp_Hi
MOV DispFreq_Lw,DispFreqTmp_Lw
MOV M2_Value_Hi,DispFreq_Hi
MOV M2_Value_Lw,DispFreq_Lw
Clr DISPFLAGS
BS DISPFLAGS,M2on
BS DISPFLAGS,ShowM
JMP Key_Scan
ShowM3Freq:
MOV DispFreq_Hi,DispFreqTmp_Hi
MOV DispFreq_Lw,DispFreqTmp_Lw
MOV M3_Value_Hi,DispFreq_Hi
MOV M3_Value_Lw,DispFreq_Lw
Clr DISPFLAGS
BS DISPFLAGS,M3on
BS DISPFLAGS,ShowM
JMP Key_Scan
ShowM4Freq:
MOV DispFreq_Hi,DispFreqTmp_Hi
MOV DispFreq_Lw,DispFreqTmp_Lw
MOV M4_Value_Hi,DispFreq_Hi
MOV M4_Value_Lw,DispFreq_Lw
Clr DISPFLAGS
BS DISPFLAGS,M4on
BS DISPFLAGS,ShowM
JMP Key_Scan
;----------------- Key Power On -------------------------
PowerOn:
; BS WORKFLAGS,LongKeyOn
NOP
JMP DispFreq
;---------------- Hold Key Done -------------------------
KeyHoldprocess:
JBC WORKFLAGS,KeyHold
JMP KeyHoldDone2
DJZ KEYCnt ; TEST LONG KEY
JMP Key_Scan
KeyHoldDone:
MOV A,@0x60
MOV KEYCnt,A
;
JBS KeyNum,1
JMP QuickAdd
JBS KeyNum,0
JMP QuickDec
JBS KeyNum,2
JMP SaveM1
JBS KeyNum,3
JMP SaveM2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -