📄 main.asm
字号:
;==========================================================
.listinclude
#INCLUDE ht46rb50.INC
#INCLUDE MACRO.H
#INCLUDE User_Con.asm
;;***********************************************************
;;**********************Mask option**************************
;;***********************************************************
;;MCU Body: HT46RB50
;;Product: 18DIP
;;VDD: 5V
;;Fsys: 12MHZ
;;Pull-High: all pull-high
;;WDT: WDT enable
;;WDT Clock Soure: T1
;;CLR WDT: One clear instruction
;;Output mode PA0~7: CMOS output
;;Wake-Up: all none wake-up
;;Project name: USB
;;Programmer: dolphin
;;Established date: 2006/03/01
;;***********************************************************
;;***********************************************************
;;***********************************************************
;;**********************Code section*************************
;;***********************************************************
MAIN. SECTION AT 0H 'CODE'
ORG 0
JMP L_START
;;-----------------------------------------------------------
ORG 04H
RETI ;INT
ORG 08H
RETI ;TME0
ORG 0CH
JMP ISR_TMR1 ;TMR1
ORG 10H
JMP ISR_USB ;USB
ORG 14H
JMP ISR_AD ;ADC
ORG 18H
RETI ;RS232
;;-----------------------------------------------------------
L_START:
CLR WDT
CALL INI_PORT ;initial port
MOV A,0FFH
L_DELAYYY:
NOP
SDZ ACC
JMP L_DELAYYY
SET PA.2
CALL Clear_RAM ;clear all ram
CLR PA.2
SET USC.4 ;V33C
CLR F_FsysClock ;UCC.6,12MHz
MOV A,125
MOV M_IdleTime,A ;set USB idle time is 125*4ms=500ms
SET F_ReportProtocol ;
SET M_Stall ;stall=FFH
SET F_AddressStatus ;
SET F_USBClockOn ;UCC.3,USB ON
CALL INI_Timer ;RAM ;initial ram
;=================================================================
;=================================================================
MOV A,45
MOV M_DIV_1S,A
MOV A,5
MOV M_DIV_01S,A
MOV A,0
MOV CH1_TestMode,A
MOV A,0
MOV CH2_TestMode,A
MOV A,2 ;
MOV M_CH1_5SecTime,A
MOV A,2 ;
MOV M_CH2_5SecTime,A
LED_ON
;=================================================================================
;EUI USB
;EADI ADC
;ET1I Timer1
;EMI General Interrupt..
CLR USBF
SET EUI
SET EMI
;=================================================================================
;=================================================================================
L_Enumerate_Ok:
CLR WDT
SNZ F_ConfigurationStatus
JMP L_Enumerate_Ok
;=================================================================================
MOV A,255
L_UsbOkDelay:
NOP
NOP
NOP
NOP
SDZ ACC
JMP L_UsbOkDelay
;=================================================================================
;=================================================================================
;CH1_Charge1_On
CH1_DeChargeOFF
;CH1_PWM_ON
MOV A,00H ;0FFH;075H
MOV PWM0,A
MOV M_CH1_PWM_BUF,A
;CH2_Charge2_On
CH2_DeChargeOFF
;CH2_PWM_ON
MOV A,00H ;0FFH;075H
MOV PWM1,A
MOV M_CH2_PWM_BUF,A
MOV A,6
MOV M_CH1_Sample_Num,a ;point
MOV M_CH2_Sample_Num,a ;point
;=================================================================================
;=================================================================================
;Timer1 On..
SET TMR1C.4 ;Timer1 on
CLR T1F
;Enable Timer1 Interrupt..
SET ET1I ;Enable Timer1 Interrupt...
;=================================================================================
;=================================================================================
CLR EADI
MOV A,00000010B
MOV ACSR,A
MOV A,00110000B
MOV ADCR,A
select_chanel_0 ;From Channel 0 Start...
Adc_start
CLR ADF
;Enable ADC Interrupt..
SET EADI ;Enable ADC Interrupt...
;=================================================================================
LED_OFF
;=================================================================================
Main_Loop:
CLR WDT
;Check If Usb Vbus PowerDown....
;--------------------------------------------------------------
SZ PA.6
JMP L_Errot_Proc
sz F_CH1_NoChargeBat ;no charge baterry...
JMP L_Errot_Proc
SZ F_CH1_BatReverse ;bat is placed reversely..
JMP L_Errot_Proc
sz F_CH2_NoChargeBat ;no charge baterry...
JMP L_Errot_Proc
SZ F_CH2_BatReverse ;bat is placed reversely..
JMP L_Errot_Proc
SZ F_CH1_BadBattery ;CH1 is bad battery...
JMP L_Errot_Proc
SZ F_CH2_BadBattery ;CH2 is bad battery...
JMP L_Errot_Proc
; JMP L_VbusPowerNormal
;-----------------------------------------------------------------
;L_VbusPowerNormal:
;-----------------------------------------------------------------
;CH1 or CH2 Charging Led Indicator.....
;-----------------------------------------------------------------
SZ F_CH1_Chargeing ;
JMP L_LED_ON
SZ F_CH2_Chargeing ;
JMP L_LED_ON
LED_OFF
JMP L_LED_ONOFF_COM
L_LED_ON:
LED_ON
L_LED_ONOFF_COM:
;----------------------------------------------------------
;----------------------------------------------------------
; CALL L_CH1CheckVoltageProc
L_CH1CheckVoltageProc:
;second part voltage check..........
;=================================================================================
; CH1 Test voltage...
;=================================================================================
SZ F_CH1_AA ;If is AA Not Check AAA...
JMP L_CH1_checkdischarge
SZ F_CH1_AAA ;If is AA Not Check AAA...
JMP L_CH1_checkdischarge
JMP L_CH1_TestModeCom ;in decharge mode go...
L_CH1_checkdischarge:
SZ PA.5 ;judge if decharge...
JMP L_CH1_IsChargeIng
MOV A,CH1_TestMode
SUB A,11
SZ C
JMP L_CH1_TestModeCom ;in decharge mode go...
sz F_CH1_DisChargeOk
JMP L_CH1_TestModeCom ;in decharge modego...
SZ F_CH1_NoBat ;no charge bateery GO..
JMP L_CH1_TestModeCom ;
CLR M_CH1_DisChargeTimes
CLR M_CH1_AA_NoBatTimes
CLR M_CH1_AAA_NoBatTimes
; CLR M_CH1_0Delta_Times
; CLR M_CH1_NDelta_Times
CLR M_CH1_CurrentState ;Cal charge time...
CLR M_CH1_Volume
CLR F_CH1ChargeOver
CLR M_CH1_NoChargeBatCount
CLR M_CH1_NoChargeBatTime ;
CLR M_CH1ChargeSec
CLR M_CH1ChargeMin
CLR M_CH1ChargeHour
CLR F_CH1StartCharge
CLR M_CH1_Volume
CLR M_CH1_BatValueH ;Clear voltage..
CLR M_CH1_BatValueL
SET F_CH1_DisChargeing ; decharge
CLR F_CH1_BatReverse ;bateery reverse
CLR F_CH1_NoChargeBat ;no charge battery
CLR F_CH1_Chargeing ;in charging
CLR F_CH1_NoBat ;no bateery
MOV A,11
MOV CH1_TestMode,A
JMP L_CH1_TestModeCom
;-----------------------------------------------------
L_CH1_IsChargeIng:
MOV A,CH1_TestMode
SUB A,11
SNZ C
JMP L_CH1_TestModeCom ;now in charging mode go...
MOV A,0
MOV CH1_TestMode,A
JMP L_CH1_TestModeCom
;-----------------------------------------------------
;-----------------------------------------------------
L_CH1_TestModeCom:
MOV A,CH1_TestMode
XOR A,0
SZ Z
JMP L_CH1_TestMode_0
MOV A,CH1_TestMode
XOR A,1
SZ Z
JMP L_CH1_TestMode_1
MOV A,CH1_TestMode
XOR A,2
SZ Z
JMP L_CH1_TestMode_2
MOV A,CH1_TestMode
XOR A,3
SZ Z
JMP L_CH1_TestMode_3
MOV A,CH1_TestMode
XOR A,4
SZ Z
JMP L_CH1_TestMode_4
MOV A,CH1_TestMode
XOR A,5
SZ Z
JMP L_CH1_TestMode_5
MOV A,CH1_TestMode
XOR A,6
SZ Z
JMP L_CH1_TestMode_6
MOV A,CH1_TestMode
XOR A,7
SZ Z
JMP L_CH1_TestMode_7
MOV A,CH1_TestMode
XOR A,8
SZ Z
JMP L_CH1_TestMode_8
MOV A,CH1_TestMode
XOR A,9
SZ Z
JMP L_CH1_TestMode_9
MOV A,CH1_TestMode
XOR A,10
SZ Z
JMP L_CH1_TestMode_10
MOV A,CH1_TestMode
XOR A,11
SZ Z
JMP L_CH1_TestMode_11
MOV A,CH1_TestMode
XOR A,12
SZ Z
JMP L_CH1_TestMode_12
MOV A,CH1_TestMode
XOR A,13
SZ Z
JMP L_CH1_TestMode_13
MOV A,CH1_TestMode
XOR A,14
SZ Z
JMP L_CH1_TestMode_14
; MOV A,CH1_TestMode
; XOR A,15
; SZ Z
; JMP L_CH1_TestMode_15
JMP L_CH1_EndTestMode
;----------------------------------------------------------------------
;============================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -