?? sp200.asm
字號:
------------------------------------------------------------------------------------------------------data
; MCU body : HT95A200
; MCU resource:
; 1) 4K X 16bit ROM .
; 2) 1152 X 8bit RAM.
; 3) 28 pin normal I/O.
; 4) 8 pin dialer I/O.
;------------------------------------------------------------------------------------------------------data
#include SP400.inc
#include macro.h
;------------------------------------------------------------------------------------------------------data
data .section 'data' ;Data section?;------------------------------------------------------------------------------------------------------data
;////// RAM define area ///////////
;------------------------------------------------------------------------------------------------------data
;// bank 0 //
R_Dial_Code_Buffer db 51 DUP(?)
R_Temp1 db ?
R_Debounce db ? ;key debounce
R_Key_Value db ? ;key value
R_Key_Hold db ? ;key hold flag
R_TempA db ? ;temp A value save
R_status db ? ;temp status save
R_H db ? ;hang key scan count
R_write_EE_data db ? ;write in eeprom data
R_WR_bit_count db ? ;count w/R eeprom bit
R_WR_EE_address db ? ;eeprom address
R_EE_Byte_count db ? ;need W/R byte number ee
R_EE_bank db ? ;EEPROM bank code
R_Time_count_L db ? ;count 1ms in time1 interrup
R_Time_count_H db ?
R_count_500ms db ?
R_Redial_count db ?
R_temp db ?
R_Hold_time db ?
R_Dial_Code db ?
R_pause_time db ? ;save in eeprom EDH
R_Vspeaker_Vring db ? ;save in eeprom EEH
R_Vearphone_Vhandset db ? ;save in eeprom EFH
R_flash_time db ? ;save in eeprom F0H
R_volume_tone db ? ;save in eeprom F1H
R_Password db ? ;5 dup (?)
R_wait_time db ? ;// setting use RAM
R_area_code db ? ;4 dup (?)
R_access_number db ? ;4 dup (?)
R_dial_count_P db ?
R_flag5 db ?
flag_off_ring equ R_flag5.0
flag_90V equ R_flag5.1
flag_on_ring equ R_flag5.2
R_flag4 db ?
flag_first_pause equ R_flag4.0
flag_first_memory equ R_flag4.1
flag_disc equ R_flag4.2
flag_pause_hook_on equ R_flag4.3
flag_over_3232 equ R_flag4.4
flag_fuck equ R_flag4.5
flag_power equ R_flag4.6
flag_set_exit equ R_flag4.7
R_flag3 db ?
flag_flash equ R_flag3.0
flag_earphone equ R_flag3.1
flag_dialing equ R_flag3.2
flag_ringoff equ R_flag3.3
Flag_counting1 equ R_Flag3.4
flag_save_over32 equ R_Flag3.5
flag_break equ R_Flag3.6
flag_dial_pause_1 equ R_Flag3.7
R_Flag2 db ?
;flag_adjust_V equ R_Flag2.0
flag_pause_between equ R_Flag2.0
flag_headset equ R_Flag2.1
flag_line_hold equ R_Flag2.2
flag_hook_status_change equ R_Flag2.3
flag_ring_delay equ R_Flag2.4 ;
flag_dial_pause equ R_Flag2.5
flag_dial_pause1 equ R_Flag2.6
flag_dial_pause2 equ R_Flag2.7
R_Flag1 db ?
Flag_first_ring equ R_flag1.0
flag_fskbit equ R_flag1.1
flag_message equ R_flag1.2
flag_ismessage equ R_flag1.3 ;is message type ,but need test it on/off
flag_endringadd_T equ R_flag1.4 ;count 6 minutes H flag, add 255
flag_onhook_T equ R_flag1.5
flag_endring_T equ R_flag1.6
flag_VTemp_change equ R_flag1.7
R_Flag db ?
Flag_first_dial equ R_Flag.0
Flag_store equ R_Flag.1
Flag_counting equ R_Flag.2
Flag_phone_use equ R_Flag.3
Flag_store_over equ R_Flag.4
Flag_flash_save equ R_Flag.5
Flag_all_ready_redial equ R_Flag.6
flag_zj_have_ring equ R_Flag.7
R_fsk_data db ?
R_fsk_counter1 db ?
R_onhook_T db ?
R_endring_T db ?
;R_endringL_T db ?
R_key_delay_time db ?
R_SDT_signal_width db ?
R_Ring_time db ?
;R_Ring_time_off db ?
R_port_d db ?
R_Time_count_L1 db ?
R_Time_count_H1 db ?
R_temp_fsk db ?
R_message_Length db ?
R_count_length db ?
R_parameter_length db ?
R_Hold_time_set db ?
R_hold_time_setR db ?
R_volume_tone_temp db ?
R_temp1_temp db ?
R_temp3 db ?
R_temp2 db ? ;100
R_fsk_sdt db ?
;// 55h -->fsk , AAh -->sdt
R11 db ?
R2 db ?
R_ring_timea db ?
R_ring_ajust db ?
; R_Dial_Code_Buffer db 51 DUP(?)
R_store_code db 17 dup(?)
;------------------------------------------------------------------------------------------------------code
;///// Lable define area /////////
;------------------------------------------------------------------------------------------------------code
SCL equ PB.0
SDA equ PB.1
Vol_A equ pd.4
Vol_B equ pd.5
Vol_C equ pd.6
auto_spo equ PD.3
headset_countral equ pd.1 ;關耳機
STRDT equ pb.4
cd equ pb.4
data equ pb.3
STD equ Pb.2
D_store_key equ 32
D_star_key equ 10 ;*
D_number_key equ 12 ;#
D_zero_key equ 11 ;0
D_headset_key equ 36
D_disc equ 15
D_pause equ 0dh
D_Vup equ 34
D_Vdown equ 35
;------------------------------------------------------------------------------------------------------code
; /// program code location ///
;------------------------------------------------------------------------------------------------------code
code .section at 0 'code' ;program code section?
org 00h
jmp start1
org 04h ;Ext int use as ring detector falling edge
jmp INT_ex
org 08h ;timer 0
jmp F_timer0_int
org 0ch ;timer 1
jmp F_time1_INT
org 10h ;DTMF burst interrupt
reti ;not use burst mode
org 14h ;real time clock int
jmp F_Real_time_INT
org 18h ;Hook on/off int
jmp F_Hook_INT
start1:
clr wdt ;clear watch dog time
clr bp ;set RAM map to bank 0
clr pec
set [0feh] ;clear bank0 192bytes RAM
clr R_key_value
call F_key_scan
mov a,R_key_value ;power on test * key
xor a,D_star_key
sz acc
clr [0feh]
; clr wdt ;clear watch dog time
; clr bp ;set RAM map to bank 0
; clr pec.3
; set pac.2
; call nop4t
; clr pe.3
; call nop4t
;
; clr [0feh]
; snz pa.2
; set [0feh] ;clear bank0 192bytes RAM
jmp L_power_on_reset
;------------------------------------------------------------------------------------------------------code
; /// program start from here ///
;------------------------------------------------------------------------------------------------------code
start:
clr wdt ;clear watch dog time
clr flag_power
clr bp ;set RAM map to bank 0
clr pec.3
set pac.2
call nop4t
clr pe.3
call nop4t
clr [0feh]
snz pa.2
jmp L_start_key_pressa
jmp L_Main_Loop
L_start_key_pressa:
set [0feh] ;clear bank0 192bytes RAM
L_power_on_reset:
mov a,40h
mov mp0,a
mov a,190 ;clear 192 bytes RAM
ClrDataRAMLoop:
clr [00h] ;Clr whole data RAM
inc mp0
sdz acc
jmp ClrDataRAMLoop
;_______________________ Initial Timer _______________________________________
clr tmr0c
mov a,10000000b ;timer mode, stop timer counting, falling edge trigger
mov tmr1c,a
;_______________________ Initial INT _______________________________________
; set intc0.1 ;turn on int
set intc1.2 ;turn on dialer I/O interrupt
set intc1.1 ;turn on real time
set intc0.0 ;turn on global INT
;_______________________ Port initialize ___________________________________
clr pa
clr pb
clr pd
clr pe
clr pb
mov a,01011111b
mov PAC,a ;set portA 0~ 4 as pull high input
CLR PDC ;set portD as cmos output
CLR PEC ;set portE as cmos output
clr PBC ;set portB as cmos output
set pbc.7
set pbc.6
set pdc.2
; set pdc.2
; call nop4t
; snz pd.2 ;have power=H
; jmp L_no_power_notset ;no power exit
;_______initialize Flash time & pause time in eeprom_____
; set Flag_not_ever_write_EE
;_______________ Main loop __________________________________________
call F_turn_on_3_58MHz
;______________________ Data initialize ______________________________
; clr R_key_value
; call F_key_scan
; mov a,R_key_value ;power on test * key
; xor a,D_star_key
; sz acc
; clr pec.3
; call nop4t
; clr pe.3
; call nop4t
; sz pa.2
sz [0feh]
jmp L_initialization_setting ; * key press initialization
jmp L_read_set_value_fromEEprom
;///////
L_read_set_value_fromEEprom:
; call F_turn_on_3_58MHz
call F_Read_setting_data
jmp L_Main_Loop_11
;///////
L_initialization_setting:
; call F_turn_on_3_58MHz
; call F_wait_time_1s
clr [0feh]
; call nop4t
mov a,14 ;210
mov [190],a
clr R_temp1
mov a,offset R_temp1 ;write zero
mov mp0,a
clr R_WR_EE_address
L_clear_15EE:
mov a,0a0h
mov R_EE_bank,a
mov a,1
mov R_EE_Byte_count,a
call F_Write_EE_Byte
mov a,17
add a,R_WR_EE_address
; inc R_WR_EE_address
mov R_WR_EE_address,a
clr R_temp1
mov a,offset R_temp1 ;write zero
mov mp0,a
dec [190]
sz [190]
jmp L_clear_15EE ;up clear memory key
;//
L_no_power_notset:
mov a,36h
mov R_pause_time,a ;set default pause time is 3.6s
; mov a,56h
; mov R_Vspeaker_Vring,a
mov a,33h
mov R_Vearphone_Vhandset,a
mov a,06h
mov R_flash_time,a
mov a,51h
mov R_volume_tone,a
; clr R_Password ;db 5 dup (?)
; mov a,8 ;wait 8s
; mov R_wait_time,a ;db ?
; clr R_area_code ;db 4 dup (?)
; clr R_access_number ;db 4 dup (?)
; sz pd.2 ;have power=H
;no power exit
call F_writ_setting_data
L_Main_Loop_11:
; snz hfo
; jmp L_4
; set auto_spo
; call F_wait_time_100ms
; clr auto_spo
;L_4:
mov a,56h
mov R_Vspeaker_Vring,a
snz hks
set flag_phone_use
; clr pd.7
; clr line
;----------------------------------------------------------------
L_Main_Loop:
clr wdt ;clear watch dog time
call F_Stop_Dial ;check need stop dial ?
call F_Turn_off_PFD ;Flag_counting=0 stop pfd
sz flag_hook_status_change
call F_adjust_volume ;ajust volume
set pdc.2
call nop4t
snz pd.2 ;have power=H
jmp L_no_power ;no power exit
nop
sz flag_power
jmp start
L_not_reset:
mov a,55h
xor a,R_fsk_sdt
sz acc ;55h -->fsk
call F_Receive_SDT ;receive SDT signal
call F_active_ring ;active ring
snz flag_phone_use
jmp L_not_off_hookkk
clr pb.5
jmp L_nextnextqq
;//
L_nextnextqq_b:
sz R_ring_timea
jmp Ll_lll
jmp L_nextnextqq
;//
L_not_off_hookkk:
snz pb.6
jmp L_active_led ;ring active
sz Flag_message
jmp L_nextnextqq_b ;message active
Ll_lll:
sz flag_phone_use
jmp L_nextnextqq ;off hook not 90V signal 12/14 add
sz pa.6
jmp L_90V_not_active
set flag_90V
mov a,55h
mov R_fsk_sdt,a
;; sz acc ;55h -->fsk
jmp L_active_led ;90v pulse come
L_90V_not_active:
clr pb.5
jmp L_nextnextqq
L_active_led:
set pb.5
L_nextnextqq:
;///
sz flag_phone_use
jmp L_not_recieve_fsk
mov a,0aah
xor a,R_fsk_sdt
sz acc ;aah -->sdt
call F_receive_fsk ;detect FSK signal
call F_key_process
; s snz pb.6 ;if ring active exit
; ret
; s call F_active_ring ;10/25
mov a,0 ;00100000b ;NW6006 pwered down
mov pa,a
L_not_recieve_fsk:
clr pb.6
set pbc.6
; nop
;//
call F_on_ring_power
; call F_off_ring_power
L_no_power:
clr flag_power
set pdc.2
call nop4t
snz pd.2 ;have power=H
set flag_power
call F_clr_6006contorl_port
clr pb.6
set pbc.6
; nop
call F_key_Scan ;key scan routine
call F_key_process
call F_dial_pause2 ;process pause ,the flag_dial_pause
;not equal 0, can not dial code,can only save
call F_redial_code_in_pause
set pbc.7
call nop4t ;10/17 debug add
snz pb.7
jmp L_enter_sleep
sz Flag_phone_use ;=1 phone is using
jmp L_Not_sleep
L_enter_sleep:
;//// enter sleep mode
set intc0.1 ;turn on int
set pdc.2
call nop4t
sz pd.2 ;have power=H
jmp L_donotturnoff
;////no power
SET INTC1.2 ;enable dial I/O interrupt
set intc0.0 ;enable global
set intc0.1 ;enable external interrupt
; set intc0.1 ;turn on int
clr pe
CLR R_key_hold
clr R_fsk_sdt
clr flag_90v
clr flag_off_ring
clr mode0 ;enable 32kHz when enter sleep
; set mode0 ;disable 32kHz when enter sleep
call F_turn_off_real_time
call F_turn_off_time1_s
call timer0_off
call F_clr_6006contorl_port
; sz flag_phone_use
; jmp L_Not_sleep
clr pb.5
nop
nop
nop
nop
nop
nop
halt
;//// wake up from here,than enter green mode
nop
nop
nop
nop
nop
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -