📄 2ifinput.asm
字号:
.chip TM87P08
;FM-AM Radio TM87P08+Tr1002+2111
;Author:江振/2005.12.22
;Power Source:3V
;Clock Source:Dual Clock
;FM:87M-108.0M 步进0.1M (中频信号从IFIN1输入)
;AM:522K-1710K 步进9K (中频信号从IFIN2输入)
;************************************************************
.HEAD
; Display address
COM1 equ 00001110B
COM2 equ 00001101B
COM3 equ 00001011B
COM4 equ 00000111B
None equ 00001111B
SEG2 equ 0e0h
SEG1 equ 0e1h
SEG4 equ 0e2h
SEG3 equ 0e3h
SEG6 equ 0e4h
SEG5 equ 0e5h
SEG8 equ 0e6h
SEG7 equ 0e7h
SEG10 equ 0e8h
SEG9 equ 0e9h
SEG12 equ 0eah
SEG11 equ 0ebh
SEG14 equ 0ech
SEG13 equ 0edh
SEG16 equ 0eeh
SEG15 equ 0efh
SEG18 equ 0f0h
SEG17 equ 0f1h
SEG20 equ 0f2h
SEG19 equ 0f3h
SEG22 equ 0f4h
SEG21 equ 0f5h
SEG24 equ 0f6h
SEG23 equ 0f7h
SEG26 equ 0f8h
SEG25 equ 0f9h
SEG28 equ 0fah
SEG27 equ 0fbh
SEG31 equ 0fch
SEG29 equ 0fdh
SEG41 equ 0feh
SEG40 equ 0ffh
;*********************************
FMDispFreqUMax equ 1
FMDispFreqHMax equ 0
FMDispFreqMMax equ 8
FMDispFreqLMax equ 0
FMDispFreqUMin equ 0
FMDispFreqHMin equ 8
FMDispFreqMMin equ 7
FMDispFreqLMin equ 0
FMBottomPrgCountU equ 04h ;87.0MHz Hex format
FMBottomPrgCountH equ 0Ch ;
FMBottomPrgCountM equ 05h ;87.0M+10.7M/5K=(19540)d=(4C54)h
FMBottomPrgCountL equ 04h
FMTopPrgCountU equ 05h ;108.0MHz Hex format
FMTopPrgCountH equ 0Ch ;108.0M+10.7M/5K=(23740)d=(5CBC)h
FMTopPrgCountM equ 0Bh
FMTopPrgCountL equ 0Ch
FMOneStepCountU equ 00h
FMOneStepCountH equ 00h
FMOneStepCountM equ 01h ;FM步进=0.1M/5K=(20)d=(14)h
FMOneStepCountL equ 04h
;*******************************
AMDispFreqUMax equ 1
AMDispFreqHMax equ 7
AMDispFreqMMax equ 1
AMDispFreqLMax equ 0
AMDispFreqUMin equ 0
AMDispFreqHMin equ 5
AMDispFreqMMin equ 2
AMDispFreqLMin equ 2
AMBottomPrgCountU equ 01h
AMBottomPrgCountH equ 04h
AMBottomPrgCountM equ 04h ;(522K+450K)*16/3K=(5184)d=(1440)h
AMBottomPrgCountL equ 00h
AMTopPrgCountU equ 02h
AMTopPrgCountH equ 0Dh ;(1710K+450K)*16/3K=(11520)d=(2D00)h
AMTopPrgCountM equ 00h
AMTopPrgCountL equ 00h
AMOneStepCountU equ 00h
AMOneStepCountH equ 00h
AMOneStepCountM equ 03h ;AM步进=9K*16/3K=(48)d=(30)h
AMOneStepCountL equ 00h
;***********************************
DA_Low equ 1110B ;IOA1
DA_High equ 0001B ;IOA1
CK_Low equ 1101B ;IOA2
CK_High equ 0010B ;IOA2
CE_Low equ 1011B ;IOA3
CE_High equ 0100B ;IOA3
Mute_Low equ 0111B ;IOA4
Mute_High equ 1000B ;IOA4
BandSwitch_Low equ 1011B ;IOB3
BandSwitch_High equ 0100B ;IOB3
IO1_Low equ 1101B ;IOB2
IO1_High equ 0010B ;IOB2
Power_Low equ 1110B ;IOB1
Power_High equ 0001B ;IOB1
.ENDH
.DATA
;**************************************************************************
org 00H
AddrL dn 1 ;00h ;AM FM data register
AddrH dn 1 ;01h
PrgCountL dn 1 ;02h
PrgCountM dn 1 ;03h
PrgCountH dn 1 ;04h
PrgCountU dn 1 ;05h
Freq0 dn 1 ;06h
Freq1 dn 1 ;07h
DispFreqL dn 1 ;08h
DispFreqM dn 1 ;09h
DispFreqH dn 1 ;0Ah
DispFreqU dn 1 ;0Bh
DispSaveL dn 1 ;0Ch
DispSaveM dn 1 ;0Dh
DispSaveH dn 1 ;0Eh
DispSaveU dn 1 ;0Fh
Counter1 dn 1 ;10h;125MS计时
Counter2 dn 1 ;11h;常按键计时
AutoScanFlag dn 1 ;12h
KeyHoldFlag dn 1 ;13h
CycScanKeyFlag dn 1 ;14h
EverHoldFlag dn 1 ;15h
KeyValue dn 1 ;16h
KeySave dn 1 ;17h
;=======================
IC24C02Addr1 dn 1 ;18h
IC24C02Addr2 dn 1 ;19h
IC24C02Buff1 dn 1 ;1Ah
IC24C02Buff2 dn 1 ;1Bh
ReceiveData dn 1 ;1Ch
ReceiveTime dn 1 ;1Dh
MemoryNum dn 1 ;1Eh
;=======================
FixZero dn 1 ;1Fh
RAMROMFlag dn 1 ;20h ; "1"=> read RAM "0"=> read ROM
GlobalTemp0 dn 1 ;21h
GlobalTemp1 dn 1 ;22h
GlobalTemp2 dn 1 ;23h
GlobalTemp3 dn 1 ;24h
SysModeFlag dn 1 ;25h ;"0"=>FM "1"=>AM
;=======================
AMPrgCountL dn 1 ;26h
AMPrgCountM dn 1 ;27h
AMPrgCountH dn 1 ;28h
AMPrgCountU dn 1 ;29h
AMDispFreqL dn 1 ;2Ah
AMDispFreqM dn 1 ;2Bh
AMDispFreqH dn 1 ;2Ch
AMDispFreqU dn 1 ;2Dh
FMPrgCountL dn 1 ;2Eh
FMPrgCountM dn 1 ;2Fh
FMPrgCountH dn 1 ;30h
FMPrgCountU dn 1 ;31h
FMDispFreqL dn 1 ;32h
FMDispFreqM dn 1 ;33h
FMDispFreqH dn 1 ;34h
FMDispFreqU dn 1 ;35h
;**************************************************************************
org 70H
WorkReg dn 7
Halt15ms dn 1 ;77h
PortAState dn 1 ;78h
PortBState dn 1 ;79h
HaltPortC dn 1 ;7Ah
;**************************************************************************
.ENDD
;**************************************************************************
; program
;**************************************************************************
.CODE
;*****************************************************************************
;*****************************************************************************
org 00h
jmp Initialize
Initialize:
rf2 04h ;Open LCD Segment OutPut
sca 000000B ;prevent port A and C halt release
sie* 0000000B ;prevent all interrupts
sre 0000000B ;prevent all stop release source
plc 100101111B ;clear all the halt release flags
spc 10000b ;enable ioc port output and pull-low
sca 10h ;enable ioc halt release
tm2x 01111111B ;64*8/32.768=15.625ms
;tm2x 100111111B ;64*32/32768=62.5ms
she 0000000B ;prevent tmr1,2 int 0.5s RFC call InitRAM
call ClearLCD
call InitRAM
call InitIO
sf 02H ;SET BCF=1
fast
call TransDataControlByD0
call Display
slow
rf 02H ;SET BCF=0
;****************************************
MainHalt:
tm2x 01111111B ;64*8/32.768=15.625ms
she 10h
lda HaltPortC ;Key halt release
jb1 HaltPortCPro
lda Halt15ms
jb1 Halt15msPro ;62.5 ms halt release
halt
nop
nop
msb HaltPortC
mcx Halt15ms
jmp MainHalt
;===============================
ClearLCD:
lds 70h,00h
lcp 00h,70h
lcp 01h,70h
lcp 02h,70h
lcp 03h,70h
lcp 04h,70h
lcp 05h,70h
lcp 06h,70h
rts
;================================
InitIO:
;IOA4 IOA3 IOA2 IOA1
; | | | |
;Mute CE CK DA
lds 70h,1000b
sta PortAState
opa 70h
spa 11111b
; IOB4 IOB3 IOB2 IOB1
; | | | |
; × AM/FM IO1 PowerOut
lds 70h,0111b ;2005-9-1 16:22
sta PortBState
opb 70h
spb 11111b
;IOC4 IOC3 IOC2 IOC1
; | | | |
; Down Up Power Mode
lds 70h,0000b
opc 70h
spc 10000b
;===================
lds 70h,0000b
opd 70h
spd 11111b
;==Set C5-C9 Output as 0==
lds 70h,00h
lcp 1fh,70h
rts
SetCKAsHigh:
ori* PortAState,CK_High
opa PortAState
rts
SetCKAsLow:
andi* PortAState,CK_Low
opa PortAState
rts
SetCEAsHigh:
ori* PortAState,CE_High
opa PortAState
rts
SetCEAsLow:
andi* PortAState,CE_Low
opa PortAState
rts
SetDAAsHigh:
ori* PortAState,DA_High
opa PortAState
rts
SetDAAsLow:
andi* PortAState,DA_Low
opa PortAState
rts
SetMuteAsHigh:
ori* PortAState,Mute_High
opa PortAState
rts
SetMuteAsLow:
andi* PortAState,Mute_Low
opa PortAState
rts
SetBandSwitchAsHigh:
ori* PortBState,BandSwitch_High
opb PortBState
rts
SetBandSwitchAsLow:
andi* PortBState,BandSwitch_Low
opb PortBState
rts
SetIO1AsHigh:
ori* PortBState,IO1_High
opb PortBState
rts
SetIO1AsLow:
andi* PortBState,IO1_Low
opb PortBState
rts
SetPowerAsHigh:
ori* PortBState,Power_High
opb PortBState
rts
SetPowerAsLow:
andi* PortBState,Power_Low
opb PortBState
rts
;*********************** 15.625MS事件处理 ***************************
Halt15msPro:
plc 10h ;Clear timer2 Halt release request flag HRF1
andi* Halt15ms,1101b ;clear timer2 Halt release flag
nop
nop
lda AutoScanFlag
jnz GoToAutoSearch
mrw WorkReg,Counter1
subi WorkReg,08h
jc EighthSecEntry
inc* Counter1
jmp MainHalt
;=========== 1/8秒事件处理 ============
EighthSecEntry:
lds Counter1,00h
lda CycScanKeyFlag
jz EighthSecEntry2
mrw WorkReg+1,Counter2
subi WorkReg+1,04h ;设置常按时间
jc AutoScanDelWith
inc* Counter2
EighthSecEntry2: ;125ms侦测一次按键
ipc KeyValue ;read pin of portc
jz NoDetectKey
sub KeySave
jz DetectKey
NoDetectKey:
lds CycScanKeyFlag,00h
lds Counter2,00h
rf2 1 ;关闭reload功能 2005-3-11 18:06
jmp MainHalt
DetectKey: ;不变,表明是常按键
lds CycScanKeyFlag,01h
jmp MainHalt
;==================常按键处理===================
AutoScanDelWith:
lds KeyHoldFlag,01h
lds Counter2,00h
lds AutoScanFlag,01h
sf2 01h
jmp MainHalt
;==============================
KeyAddPressPro1:
call KeyAddPress
jmp AutoSearchAgain
KeySubPressPro1:
call KeySubPress
jmp AutoSearchAgain
;******************* 自动搜台 *******************
GoToAutoSearch:
;rf2 1 ;关闭reload功能 2005-3-11 18:06
lda KeySave
jb2 KeyAddPressPro1
jb3 KeySubPressPro1
jmp MainHalt
AutoSearchAgain:
lds AutoScanFlag,00h
;call Delay62ms ;2005-11-16 13:39
call Delay100ms ;2005-11-16 13:52
call TransDataControlByD2
lda AutoScanFlag
jnz AutoSearchAgain1
sf2 1h ;开启reload功能/enable timer2
lds AutoScanFlag,01h ;2005-8-23 13:33
jmp MainHalt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -