SY8833双向通讯源码,包括岍丞、小明、杰理等。

This commit is contained in:
Alex xu 2024-06-14 19:44:02 +08:00
commit 1cd975eb67
457 changed files with 142988 additions and 0 deletions

View File

@ -0,0 +1,285 @@
:030000000208985B
:10089800758E3075D20078FFE4F6D8FD75819D021B
:0208A80008E561
:0F0EBB001209B7D2AED2BE120C31120AAE80F4B9
:0405EF00029900006D
:020D6800AD07D5
:100D6A00E4FCFBFAF527F52875FE2975FF8BEDC41F
:100D7A0054F04401F5A5E5A520E0FBAFA1AB07AF10
:100D8A00A2EFFEEEFAEB2528F528EA3527F5270C1F
:100D9A00BC08DBE528AE277803CEC313CE13D8F9F7
:010DAA00FF49
:010DAB002225
:100DAC00E4F524F5257F05120D688E248F257F062A
:100DBC00120D68E4FCFDC004A905AA06AB07AE241D
:100DCC00AF257C077DD0120271D0001201A98E24B0
:020DDC008F2561
:010DDE0022F2
:100DDF00E4F525F5267F04120D688E258F267F06F4
:100DEF00120D68E4FCFDC004A905AA06AB07AE25E9
:100DFF00AF267C037DE8120271D0001201A98E2567
:020E0F008F262C
:010E110022BE
:0605F300C114C116C11580
:10078900E4FFFE752401120DDFC3EF9474EE940E9D
:1007990040037F0122E5E630E757D3EF9436EE9424
:1007A900055030EF9422EE94024028301612EF944F
:1007B90014EE94055007C2167524018003E4F5244C
:1007C90030152ED3EF9444EE94024022C2157524BD
:1007D90001801ED3EF9436EE94054004D216800BA7
:1007E900C3EF9422EE94025002D21553B3FEE4F5FE
:0307F90024AF2406
:0107FC0022DA
:100BDC00E5E620E70953B3FE75F210C21422E5F2E4
:100BEC00540C601053B3FEE5F354C0603775F20C2F
:100BFC0075F3C022E5F354C0600375F3C012078986
:100C0C00EF6021E5F230E417C3789AE694EB18E62E
:100C1C00940F500575F210800353B3FED214224387
:050C2C00B301C2142217
:0405F900C117C1184D
:100D2200E5E530E103C21722E5E230E705C217D25A
:100D32001822E5E830E00EC217300B29C20B75E825
:100D42000175B50122D21730181BE5E630E716C34C
:100D5200789AE6941018E6940E4005D217C218222B
:060D6200E4F5B5C2172202
:0705FD00011DFFC119C11A25
:100E3E00E5E230E425E5E25408FF651D601CE5E2BD
:100E4E0030E305751C018005E4F51CC21ED219D2D3
:0A0E5E001AE4F51FF540F5418F1D61
:010E68002267
:0B060400C113C111C110C112019D0003
:100E6900301208C211C212789D7602301006C210E3
:0E0E7900789D7603301306C213789D76012211
:03060F000198004F
:10000E007893A607EDC31308F608A60508A603E421
:03001E0008F622BF
:100CD5007893E6603D24FE6007047036D283803445
:100CE5007897E6FFC37894965004D2838002C28336
:100CF500EFC3789596401DE47897F618E6FFF46003
:100D050013EFD394004001167896E670077893F6B2
:0D0D15008002C2837893E67898F6180622D3
:05061200011E00C11DE6
:100E9A00E5E620E706200903301D04C21DC322D35C
:010EAA002225
:1009B700E4F5D275FE8943FF8075FE0153FFFCF510
:1009C700FE75FF0375FE0E75FF05D2DF4387807541
:1009D700BA0375AAFD7598D0D299D298D2AC75B7DB
:1009E700C3758901758CFC758A17D2A9D28C75FEDF
:1009F7000675FF0C75FE0375FF0CC283F58675FE41
:100A07000F43FF8075FE4F75FF1075FE1775FF3C8E
:100A170075FE1E75FF0CD2A8D2B9D2BBD2AF75F244
:100A27001C75F3C075E80C75FE8753FFDF43B310E1
:0A0A370075FE7043FF04751E0A22CD
:03000300020006F2
:0100060032C7
:03004B00020ED5CD
:060ED50075EB3CD21D325A
:03005B00020EDBB7
:060EDB0075F30CD21D327C
:0F0617000B880000000000000000000000C11C64
:100E870074882553F8A6990553E5532275520075C2
:030E9700530022E3
:0A0E12008E358F368B378A38893908
:100E1C00E4FFEFC39536E495355016201BFD78376B
:100E2C00E475F00112023B120154D21BF5990F80AC
:010E3C00E1D4
:010E3D002292
:0300230002092AA5
:0F092A00C0E0C0D075D000C000C005C006C00737
:10093900309904C299C21B309867C298E551146076
:100949001F04705DE599B4AA0F755101120E931237
:100959000E87700205528049755100120E9380412D
:10096900120E8770020552640745527015788EE69B
:10097900FEE42409FFE43EFE18E6FDEEF554EF4DD2
:10098900F555E55565537004E5546552600BD3E59B
:1009990053940BE55294004008120E93755100D2FE
:0109A9001C31
:0D09AA00D007D006D005D000D0D0D0E0326C
:05062600011F00C11ED0
:1006E000E5E630E729301402807A301A10E51CB4B0
:1006F000010B201E08D21EE4FBFDFF801D7898E64A
:1007000064027002E1887BFF7D647F028077301F86
:100710000F301A747B047D647F0212000EC21A220D
:10072000E51C6401704BE56B7004E56C6043E56BA0
:1007300064016005E56CB401167898E6640260090E
:100740007BFF7D327F0212000EE4F51FD21D22E5F1
:100750006B64027033E56C6402702DE51FC394284E
:100760005009051FE4FBFD7F01801AE4FBFDFF80BB
:1007700014E51FC394285009051FE4FBFD7F018089
:0907800004E4FBFDFF12000E224F
:100AAE00300C08C20C120E3E120D22300F05C20F72
:100ABE00120CD5300A1BC20A120BDC120DAC78993F
:100ACE00A60608A60712029E1206E0120B18120CBA
:100ADE0086300D35C20DE51ED394004009151E302B
:100AEE001D27C21D8020120E9A501BC2ACC2BBC263
:100AFE00B9C2A975FE2953FF7F438702D2ACD2BB80
:0A0B0E00D2B9D2A98000751E0A2298
:0B004E000000000000000000000000A7
:10062B00C109C105C108C102C104C100C106014213
:10063B000002450000014400014300C101024700D4
:10064B0000027000000672000000000000087A0033
:10065B0000000000000000028400000256000002AF
:10066B00780000028600000282000002580000168B
:10067B005A00000000000000000000000000000015
:10068B0000000000000000013F00C1030240000019
:02069B00C10795
:10002600FF547FF6EFC4131313540122C208D20102
:10003600E4F544D20522FF5401F6EFC3135401221E
:100EAB00D282EF700753B7CF43B7302253B7CF225D
:10029E00E5E8540C60110542E542C394024008E4BF
:1002AE00F54275E80C8109301960301758200606A2
:1002BE0075B501D20622E4F56BF56CC205C200F5E8
:1002CE0045F546E51C7011D202C204C219D209C20C
:1002DE0006C28243B7308032C202C208C3E54194DF
:1002EE0002E5409400500FE4FF120EAB0541E541CC
:1002FE00701805408014E4F5B5D204C219C206F593
:10030E0040F54180057F01120EAB30042AC3E54152
:10031E009458E5409402501AE54120E0047D248073
:10032E00027D257F0D12048F0541E54170090540C0
:10033E008005E4FF120EAB2002052000028184C36B
:10034E00E5419432E54094005031E54120E00F3014
:10035E0000047D24800DE51C70187D24800F300074
:10036E00067D257F058008E51C70077D257F0D1213
:10037E00048F0541E541700205402230000DC20098
:10038E00C202C209E4F5B57F0181192002028184FF
:10039E00E5E354AC64AC6003301F12C3E5469458D9
:1003AE00E54594024007D200E4F540F54120072EC2
:1003BE00C3E5419464E5409400501AE54120E00401
:1003CE007D2480027D257F0E12048F0541E541704C
:1003DE000D05408009D207D208E4F540F5413008FA
:1003EE0050E544C3940150097D2412048508F6801B
:1003FE0030E543D394054006120032FF800D789409
:10040E00E6601208E66007120032FF020EAB7D2591
:10041E00120485800C7895E660077D247F0A12040D
:10042E008FE544D3941E40070543E4F5448002054E
:10043E00443005210541E54170020540D39414E591
:10044E004094004010C205E4F544F543D2827D216C
:10045E007F1202048F30011EE544C3946450097567
:10046E00FE7843FF03054422C201E4F54475FE788D
:10047E0053FFFC43FF01227F0A12048FE47894F6A7
:01048E00224B
:0A0A41008B358A3689378C388D39E1
:100A4B00E4FDFC753A10753B21F53CE5391539AEE3
:100A5B0038700215384E60467835E475F001120295
:100A6B003B120154F53CFEEE6204E4F53DF53EC34A
:100A7B00E53E9408E53D940050D1EC30E70FED25B1
:100A8B00E0FFEC33653AFCE53B6FFD8007ED25E0BD
:100A9B00FDEC33FC053EE53E70D5053D80D1AE0443
:020AAB00AF0595
:010AAD002226
:04048F008F248D2504
:1004930078267C007D007BFF7A00794E7E007F0BFF
:1004A30012012EE4F531F532F533F5347526AA85BC
:1004B3002527852428F529851C2AE52412024B05C6
:1004C3000C0504E10A05190B05200D054F0E058FD8
:1004D3000F051911059A120519370000059D752B93
:1004E3000EE4F52CFF74722FF8E6FE742D2FF8A698
:1004F300060FBF06F0E4FF747A2FF8E6FE74332F7D
:10050300F8A6060FBF08F0A19D752B01E4F52CA2F8
:100513000333F52DA19DE4F52BF52C807D752B057B
:10052300E4F52C752D10F52D752E01E5E654807834
:100533009C46F52FE525B4240478848007E525B48B
:1005430025057885E6F530E4F531804E752B0AE410
:10055300F52C853F2DFFEFFDE53F2DFDE433FCD367
:10056300ED9416EC648094804008742E2FF876FF87
:10057300800EE53F2F245AF8E6FE742E2FF8A606C8
:100583000FBF09D27409253FF53F800E752B01E497
:10059300F52C752D018003D20E22E52CFEE42407F1
:1005A300FFE43EF533EF452BF5347B007A007926E3
:1005B300FDAC33120A418E318F32AD3474272DF8DE
:1005C300A607E531FF74282DF8A607C28275FE0E33
:1005D30043FF04E534240AFFE43533FE7B007A004D
:0B05E3007926120E1275FE0E53FFF376
:0105EE0022EA
:100800007889E6C4540FFD540360020197EF24F683
:10081000602524FD602F14607124D7707AE4FE787F
:100820008DE6FFEEC39F506F748F2EF8E6FF747253
:100830002EF8A6070E80E8788FE6BD04047870F6DF
:10084000227871F622ED64047891701FE6788412A4
:1008500000267856F67892E6F54708E67878120092
:100860003C7886F67894E67882F622E6788512005F
:10087000267857F67892E6F54808E6787912003C33
:100880007887F67894E67883F622788FE6BD0404BC
:070890007858F6227859F6B2
:01089700223E
:100C8600E4F524F525F526301C44C21C788EE6FED4
:100C9600E42407FFE43EFE18E6FDEEF524EF4DF5ED
:100CA600257B007A007988FDAC24120A41AC06AD9A
:100CB60007AB25748A2BF8E6FE74892BF8E6FBEB66
:0E0CC600B5050BEEB50407788AE6FF120800AC
:010CD40022FD
:10069D00019C00C11F019B1E14080BB80C1C0CE41F
:0E06AD000D480DAC0E420ED80F3C0FD2106857
:0B0ECA00EF25E02408F8E6FC08E62213
:100B1800E4FFE5E630E715120ECA2432FDE43CFC9A
:100B2800C3789AE69D18E69C50108012120ECAFDF2
:100B3800C3789AE69D18E69C40040FBF0AD4789CB7
:100B4800E6FEEFD39E400418068003789B16789B38
:100B5800E6FED394325006EEC3940A5007789CA65A
:100B68000718761E789CE6FFD394015003D21F2203
:080B7800EFD394024002C21FFA
:010B80002252
:1006BB00014B00014D00014A00014900014C00C1F2
:1006CB000CC10FC10BC10AC10D015000014E00C17D
:0406DB000E014F00BD
:100C3100E5506050E4F550054BE54BC39405400584
:100C4100E4F54BD20C054DE54DC3940A4005E4F59E
:100C51004DD20F0549E549C394644005E4F549D2F5
:100C61000A054AE54AC394FA401AE4F54AD20B054B
:100C71004CE54C9404400DE4F54CD20D0546E54697
:050C8100700205452290
:03000B00020B8164
:100B8100C0E0C0D074FC258CF58C7417258AF58AD9
:100B9100755001054EE54EC39405403A754E00303F
:100BA1000E34E54FD394045004C282801BE54F30CC
:100BB100E00BB40D04C282800FD282800BE54FB4EA
:100BC1000E04D2828002C282054FE54FC3941740C2
:0B0BD10005C20E754F00D0D0D0E032FE
:1008AA00020EBBE493A3F8E493A34003F68001F29B
:1008BA0008DFF48029E493A3F85407240CC8C3334F
:1008CA00C4540F4420C8834004F456800146F6DF1E
:1008DA00E4800B01020408102040809005EFE47EBA
:1008EA00019360BCA3FF543F30E509541FFEE49313
:1008FA00A360010ECF54C025E060A840B8E493A3DA
:10090A00FAE493A3F8E493A3C8C582C8CAC583CA04
:10091A00F0A3C8C582C8CAC583CADFE9DEE780BEBC
:0106DF00001A
:10005E00E709F608DFFA8046E709F208DFFA803E84
:10006E0088828C83E709F0A3DFFA8032E309F60871
:10007E00DFFA8078E309F208DFFA807088828C83D9
:10008E00E309F0A3DFFA806489828A83E0A3F6088D
:10009E00DFFA805889828A83E0A3F208DFFA804C67
:1000AE0080D280FA80C680D4806980F2803380103E
:1000BE0080A680EA809A80A880DA80E280CA8033A7
:1000CE0089828A83ECFAE493A3C8C582C8CCC5831F
:1000DE00CCF0A3C8C582C8CCC583CCDFE9DEE780EF
:1000EE000D89828A83E493A3F608DFF9ECFAA9F06E
:1000FE00EDFB2289828A83ECFAE0A3C8C582C8CCC4
:10010E00C583CCF0A3C8C582C8CCC583CCDFEADEDC
:10011E00E880DB89828A83E493A3F208DFF980CC3E
:10012E0088F0EF60010E4E60C388F0ED2402B40437
:10013E000050B9F582EB2402B4040050AF232345DE
:06014E0082239000AE7355
:10015400BB010689828A83E0225002E722BBFE02A9
:09016400E32289828A83E49322DC
:10016D0075F008758200EF2FFFEE33FECD33CDCC49
:10017D0033CCC58233C5829BED9AEC99E5829840CC
:10018D000CF582EE9BFEED9AFDEC99FC0FD5F0D6A9
:10019D00E4CEFBE4CDFAE4CCF9A88222B800C1B9D3
:1001AD000059BA002DEC8BF084CFCECDFCE5F0CB11
:1001BD00F97818EF2FFFEE33FEED33FDEC33FCEB4A
:1001CD0033FB10D703994004EB99FB0FD8E5E4F905
:1001DD00FA227818EF2FFFEE33FEED33FDEC33FCF2
:1001ED00C933C910D7059BE99A4007EC9BFCE99AE6
:1001FD00F90FD8E0E4C9FAE4CCFB2275F010EF2F2B
:10020D00FFEE33FEED33FDCC33CCC833C810D7072A
:10021D009BEC9AE899400AED9BFDEC9AFCE899F865
:0E022D000FD5F0DAE4CDFBE4CCFAE4C8F922F8
:10023B00FAE6FB0808E6F925F0F618E6CA3AF622C4
:10024B00D083D082F8E4937012740193700DA3A342
:10025B0093F8740193F5828883E473740293686056
:06026B00EFA3A3A380DF56
:10027100EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02D1A
:10028100FDE43CFCE8A42EC8C5F03DFDE43CFCEFD8
:0D029100A4FFE5F028FEE43DFDE43CFC2266
:00000001FF

Binary file not shown.

61
Project/HEXBIN.bat Normal file
View File

@ -0,0 +1,61 @@
:: @File Name: HEXBIN.bat
:: @Version : 1.0
:: @Author : Alex-XU
:: @Creat Date : 2023-03-30
:: @Brief :
:: 在keil中,生成hex、bin文件到 Out 文件夹中.
:: 复制本文件到keil工程文件所在目录下/Project目录下
:: 在keil 魔法棒USER里填写
:: .\Out.bat $K !P @P
:: $K hextobin转换工具位置 !P 工程名 @P 工程目录
:: .\HEXBIN.bat .\Objects\hex2bin_TP.exe mcu \Objects\
::关闭显示
@echo off
::获取时间
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hour=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%
::创建输出文件夹 Out
if exist .\..\Out (
echo Out file exist
) else (
mkdir .\..\Out
)
::设置hex2bin_TP.exe位置 ,\Objects\hex2bin_TP.exe
set exe_location=%1
::获取工程名 mcu.hex
set project_name=%2
::设置.hex文件所在目录路径\Objects\
set obj_path=%3
::设置输出后的文件名
set output_name=SY8833A_EVB_%project_name%_V100_%date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
::将bin文件生成到HEXBIN文件夹 >nul屏蔽成功命令 .\Objects\hex2bin_TP.exe .\Objects\mcu.hex .\Objects\bin.bin 3 0
%exe_location% .%obj_path%%project_name%.hex .%obj_path%%output_name%.bin 3 0 >nul
::将hex文件重命名
ren .%obj_path%%project_name%.hex %output_name%.hex >nul
ECHO Add CRC16 At the end of the .bin file
ECHO -------------------------------------
SET SREC_PATH=D:\Keil_v5\SREC
for /f %%i in ('dir /s /b .%obj_path%%output_name%.bin') do (
set indexdx=%%~zi
)
ECHO --- size= %indexdx% Bytes ---
ECHO %SREC_PATH%\srec_cat.exe .%obj_path%%output_name%.bin -Binary -crop 0 %indexdx% -CRC16_Big_Endian %indexdx% -XMODEM -o .%obj_path%%output_name%_crc.bin -Binary
%SREC_PATH%\srec_cat.exe .%obj_path%%output_name%.bin -Binary -crop 0 %indexdx% -CRC16_Big_Endian %indexdx% -XMODEM -o .%obj_path%%output_name%_crc.bin -Binary
del /q ..\Out\*.*
::将hex文件复制到HEXBIN文件夹
move .%obj_path%%output_name%.hex .\..\Out >nul
move .%obj_path%%output_name%.bin .\..\Out >nul
move .%obj_path%%output_name%_crc.bin .\..\Out >nul

View File

@ -0,0 +1,263 @@
A51 MACRO ASSEMBLER STARTUP 05/27/2024 11:13:53 PAGE 1
MACRO ASSEMBLER A51 V8.2.7.0
OBJECT MODULE PLACED IN .\Objects\STARTUP.obj
ASSEMBLER INVOKED BY: D:\Keil_v5\C51\BIN\A51.EXE ..\Src\startup\STARTUP.A51 SET(SMALL) DEBUG PRINT(.\Listings\STARTUP.ls
t) OBJECT(.\Objects\STARTUP.obj) EP
LOC OBJ LINE SOURCE
1 $nomod51
2 ;------------------------------------------------------------------------------
3 ; This file is part of the C51 Compiler package
4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
5 ; Version 8.01
6 ;
7 ; *** <<< Use Configuration Wizard in Context Menu >>> ***
8 ;------------------------------------------------------------------------------
9 ; STARTUP.A51: This code is executed after processor reset.
10 ;
11 ; To translate this file use A51 with the following invocation:
12 ;
13 ; A51 STARTUP.A51
14 ;
15 ; To link the modified STARTUP.OBJ file to your application use the following
16 ; Lx51 invocation:
17 ;
18 ; Lx51 your object file list, STARTUP.OBJ controls
19 ;
20 ;------------------------------------------------------------------------------
21 ;
22 ; User-defined <h> Power-On Initialization of Memory
23 ;
24 ; With the following EQU statements the initialization of memory
25 ; at processor reset can be defined:
26 ;
27 ; <o> IDATALEN: IDATA memory size <0x0-0x100>
28 ; <i> Note: The absolute start-address of IDATA memory is always 0
29 ; <i> The IDATA space overlaps physically the DATA and BIT areas.
0100 30 IDATALEN EQU 100H
31 ;
32 ; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
33 ; <i> The absolute start address of XDATA memory
0000 34 XDATASTART EQU 0
35 ;
36 ; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
37 ; <i> The length of XDATA memory in bytes.
0000 38 XDATALEN EQU 0H
39 ;
40 ; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
41 ; <i> The absolute start address of PDATA memory
0000 42 PDATASTART EQU 0H
43 ;
44 ; <o> PDATALEN: PDATA memory size <0x0-0xFF>
45 ; <i> The length of PDATA memory in bytes.
0000 46 PDATALEN EQU 0H
47 ;
48 ;</h>
49 ;------------------------------------------------------------------------------
50 ;
51 ;<h> Reentrant Stack Initialization
52 ;
53 ; The following EQU statements define the stack pointer for reentrant
54 ; functions and initialized it:
55 ;
56 ; <h> Stack Space for reentrant functions in the SMALL model.
57 ; <q> IBPSTACK: Enable SMALL model reentrant stack
A51 MACRO ASSEMBLER STARTUP 05/27/2024 11:13:53 PAGE 2
58 ; <i> Stack space for reentrant functions in the SMALL model.
0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
60 ; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
61 ; <i> Set the top of the stack to the highest location.
0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
63 ; </h>
64 ;
65 ; <h> Stack Space for reentrant functions in the LARGE model.
66 ; <q> XBPSTACK: Enable LARGE model reentrant stack
67 ; <i> Stack space for reentrant functions in the LARGE model.
0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
69 ; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
70 ; <i> Set the top of the stack to the highest location.
0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
72 ; </h>
73 ;
74 ; <h> Stack Space for reentrant functions in the COMPACT model.
75 ; <q> PBPSTACK: Enable COMPACT model reentrant stack
76 ; <i> Stack space for reentrant functions in the COMPACT model.
0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
78 ;
79 ; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
80 ; <i> Set the top of the stack to the highest location.
0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
82 ; </h>
83 ;</h>
84 ;------------------------------------------------------------------------------
85 ;
86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM
87 ; <e>Compact Model Page Definition
88 ;
89 ; <i>Define the XDATA page used for PDATA variables.
90 ; <i>PPAGE must conform with the PPAGE set in the linker invocation.
91 ;
92 ; Enable pdata memory page initalization
0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
94 ;
95 ; <o> PPAGE number <0x0-0xFF>
96 ; <i> uppermost 256-byte address of the page used for PDATA variables.
0000 97 PPAGE EQU 0
98 ;
99 ; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
100 ; <i> most 8051 variants use P2 as uppermost address byte
00A0 101 PPAGE_SFR DATA 0A0H
102 ;
103 ; </e>
104 ;------------------------------------------------------------------------------
105
106 ; Standard SFR Symbols
00E0 107 ACC DATA 0E0H
00F0 108 B DATA 0F0H
0081 109 SP DATA 81H
0082 110 DPL DATA 82H
0083 111 DPH DATA 83H
008E 112 CKCON DATA 8EH
00D2 113 CLKPRE DATA 0D2H
0087 114 PCON DATA 87H
115
116 NAME ?C_STARTUP
117
118
119 ?C_C51STARTUP SEGMENT CODE
120 ?STACK SEGMENT IDATA
121
---- 122 RSEG ?STACK
0000 123 DS 1
A51 MACRO ASSEMBLER STARTUP 05/27/2024 11:13:53 PAGE 3
124
125 EXTRN CODE (?C_START)
126 PUBLIC ?C_STARTUP
127
---- 128 CSEG AT 0
0000 020000 F 129 ?C_STARTUP: LJMP STARTUP1
130
---- 131 RSEG ?C_C51STARTUP
132
0000 133 STARTUP1:
134 ;Set Wait State to 0x30 and CPU CLK Prescaler to 1 to Accelerate Startup
135 ;MOV PCON, #02H ;Enter Standby
0000 758E30 136 MOV CKCON, #30H ;Wait State = 0x30
0003 75D200 137 MOV CLKPRE, #0 ;CLK Prescaler = 1
138
139 IF IDATALEN <> 0
0006 78FF 140 MOV R0,#IDATALEN - 1
0008 E4 141 CLR A
0009 F6 142 IDATALOOP: MOV @R0,A
000A D8FD 143 DJNZ R0,IDATALOOP
144 ENDIF
145
146 IF XDATALEN <> 0
MOV DPTR,#XDATASTART
MOV R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
MOV R6,#(HIGH (XDATALEN)) +1
ELSE
MOV R6,#HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @DPTR,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
160
161 IF PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
164
165 IF PDATALEN <> 0
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
173
174 IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
179
180 IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
186
187 IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
MOV ?C_PBP,#LOW PBPSTACKTOP
A51 MACRO ASSEMBLER STARTUP 05/27/2024 11:13:53 PAGE 4
ENDIF
191
000C 758100 F 192 MOV SP,#?STACK-1
193
194 ; This code is required if you use L51_BANK.A51 with Banking Mode 4
195 ;<h> Code Banking
196 ; <q> Select Bank 0 for L51_BANK.A51 Mode 4
197
202 ;</h>
000F 020000 F 203 LJMP ?C_START
204
205 END
A51 MACRO ASSEMBLER STARTUP 05/27/2024 11:13:53 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?C_C51STARTUP. . . C SEG 0012H REL=UNIT
?C_START . . . . . C ADDR ----- EXT
?C_STARTUP . . . . C ADDR 0000H A
?STACK . . . . . . I SEG 0001H REL=UNIT
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
CKCON. . . . . . . D ADDR 008EH A
CLKPRE . . . . . . D ADDR 00D2H A
DPH. . . . . . . . D ADDR 0083H A
DPL. . . . . . . . D ADDR 0082H A
IBPSTACK . . . . . N NUMB 0000H A
IBPSTACKTOP. . . . N NUMB 0100H A
IDATALEN . . . . . N NUMB 0100H A
IDATALOOP. . . . . C ADDR 0009H R SEG=?C_C51STARTUP
PBPSTACK . . . . . N NUMB 0000H A
PBPSTACKTOP. . . . N NUMB 0100H A
PCON . . . . . . . D ADDR 0087H A
PDATALEN . . . . . N NUMB 0000H A
PDATASTART . . . . N NUMB 0000H A
PPAGE. . . . . . . N NUMB 0000H A
PPAGEENABLE. . . . N NUMB 0000H A
PPAGE_SFR. . . . . D ADDR 00A0H A
SP . . . . . . . . D ADDR 0081H A
STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP
XBPSTACK . . . . . N NUMB 0000H A
XBPSTACKTOP. . . . N NUMB 0000H A
XDATALEN . . . . . N NUMB 0000H A
XDATASTART . . . . N NUMB 0000H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)

356
Project/Listings/adc.lst Normal file
View File

@ -0,0 +1,356 @@
C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE ADC
OBJECT MODULE PLACED IN .\Objects\adc.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\adc\adc.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\UsrIn
-c\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key
-;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\v
-ox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\adc.lst
-) TABS(2) OBJECT(.\Objects\adc.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file adc.c
5 * @brief adc module
6 * @ic TP3102
7 *
8 * @version 1.0
9 * @date 2024/03/26 15:00:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/08/04 Alex build this file
18 ******************************************************************************/
19 /*_____ I N C L U D E S ____________________________________________________*/
20
21 #include "adc.h"
22 #include "system.h"
23 #include "sys_tim.h"
24
25 #if ADC_ENABLE
26
27 /******************************************************************************\
28 Macro definitions
29 \******************************************************************************/
30
31 /******************************************************************************\
32 Variables definitions
33 \******************************************************************************/
34
35 idata uint16_t Vbat_Adc = 0;
36
37
38 /******************************************************************************\
39 Functions definitions
40 \******************************************************************************/
41
42
43 /*
44 *******************************************************************************
45 * uint16_t ADC_Chn_Data(ADC_CHANNELS_E adc_chn)
46 *
47 * Description : 获取相应通道的电压ADC值。
48 *
49 * Arguments : NONE
50
51 * Returns : adc Value (mV)
C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 2
52
53 * Notes : NONE
54 *
55 *******************************************************************************
56 */
57
58 uint16_t ADC_Chn_Data(ADC_CHANNELS_E adc_chn)
59 {
60 1 uint8_t index = 0;
61 1 uint16_t adc_data = 0;
62 1 uint16_t adc_plus_data = 0;
63 1
64 1 SFRADDR = ADC_CTL0;
65 1 SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
66 1
67 1 for(index=0; index<8; index++)
68 1 {
69 2 ADC_CTL1 = (adc_chn << 4) | 0x01; //Channel set and Start conversion
70 2
71 2 while(ADC_CTL1 & 0x01); //Wait for conversion complete
72 2
73 2 adc_data = ADC_DATL; //Read low byte first! Lock ADC Value.
74 2
75 2 adc_data |= (uint16_t)(ADC_DATH << 8);
76 2
77 2 adc_plus_data += adc_data;
78 2 #ifdef _DEBUG_ADC
printf("adc4:%d,plus:%d.\r\n",(uint16_t)adc_data,(uint16_t)adc_plus_data);
#endif
81 2 // adc_data = 0;
82 2 }
83 1
84 1 adc_data = adc_plus_data >> 3;
85 1
86 1 #ifdef _DEBUG_ADC
printf("adc_chn1:%d.\r\n",(uint16_t)adc_data);
#endif
89 1
90 1 #ifdef _DEBUG_ADC
printf("Adc,Vadc:%d,Vref:%d.\r\n", (uint16_t)adc_data, (uint16_t)adc_plus_data);
#endif
93 1
94 1 return adc_data;
95 1 }
96
97 /*
98 *******************************************************************************
99 * uint16_t Vbat_Value(void)
100 *
101 * Description : Vbat Value.获取电池电压。
102 *
103 * Arguments : NONE
104
105 * Returns : Vbat Value (mV)
106
107 * Notes : NONE
108 *
109 *******************************************************************************
110 */
111 uint16_t Vbat_Value(void)
112 {
113 1 uint16_t n_Vbat_Data = 0;
C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 3
114 1 //uint16_t n_ADC_Plus = 0;
115 1
116 1 n_Vbat_Data = ADC_Chn_Data(ADC_BAT);
117 1
118 1 #ifdef _DEBUG_ADC
printf("bat_Vbat1:%d.\r\n",(uint16_t)n_Vbat_Data);
#endif
121 1
122 1 // n_ADC_Plus = ADC_Chn_Data(ADC_VREF); //获取VREF
123 1
124 1 n_Vbat_Data = (uint32_t)(n_Vbat_Data) * VREF * 2 / ADC_Chn_Data(ADC_VREF); //Vadx = VREF*DATAadx/DATAvr
-ef
125 1
126 1 #ifdef _DEBUG_ADC
printf("bat,Vbat:%d.\r\n",(uint16_t)n_Vbat_Data);
#endif
129 1
130 1 return n_Vbat_Data;
131 1 }
132
133 /*
134 *******************************************************************************
135 * uint16_t ADC_NTC_Value(void)
136 *
137 * Description : 获取NTC采样电压
138
139 * Arguments : NONE
140
141 * Returns : ADC Value (mV)
142
143 * Notes : NONE
144 *
145 *******************************************************************************
146 */
147 #ifdef ADC_NTC_ENABLE
148
149 uint16_t ADC_NTC_Value(void)
150 {
151 1 uint16_t adc_data = 0;
152 1 // uint16_t adc_plus_data = 0;
153 1
154 1 adc_data = ADC_Chn_Data(ADC_CH4);
155 1
156 1 #ifdef _DEBUG_ADC
printf("adc_chn1:%d.\r\n",(uint16_t)adc_data);
#endif
159 1 // adc_plus_data = ADC_Chn_Data(ADC_VREF); //获取VREF
160 1
161 1 adc_data = (uint32_t)(adc_data) * VREF / ADC_Chn_Data(ADC_VREF); //Vadx = VREF*DATAadx/DATAvref
162 1
163 1 #ifdef _DEBUG_ADC
printf("Adc,Vadc:%d.\r\n", (uint16_t)adc_data);
#endif
166 1
167 1 return adc_data;
168 1 }
169 #endif
170
171
172 #endif
173
C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _ADC_Chn_Data (BEGIN)
; SOURCE LINE # 58
;---- Variable 'adc_chn' assigned to Register 'R5' ----
0000 AD07 MOV R5,AR7
; SOURCE LINE # 59
; SOURCE LINE # 60
;---- Variable 'index' assigned to Register 'R4' ----
0002 E4 CLR A
0003 FC MOV R4,A
; SOURCE LINE # 61
;---- Variable 'adc_data' assigned to Register 'R2/R3' ----
0004 FB MOV R3,A
0005 FA MOV R2,A
; SOURCE LINE # 62
0006 F500 R MOV adc_plus_data,A
0008 F500 R MOV adc_plus_data+01H,A
; SOURCE LINE # 64
000A 75FE29 MOV SFRADDR,#029H
; SOURCE LINE # 65
000D 75FF8B MOV SFRDATA,#08BH
; SOURCE LINE # 67
0010 ?C0001:
; SOURCE LINE # 68
; SOURCE LINE # 69
0010 ED MOV A,R5
0011 C4 SWAP A
0012 54F0 ANL A,#0F0H
0014 4401 ORL A,#01H
0016 F5A5 MOV ADC_CTL1,A
0018 ?C0004:
; SOURCE LINE # 71
0018 E5A5 MOV A,ADC_CTL1
001A 20E0FB JB ACC.0,?C0004
; SOURCE LINE # 73
001D AFA1 MOV R7,ADC_DATL
001F AB07 MOV R3,AR7
; SOURCE LINE # 75
0021 AFA2 MOV R7,ADC_DATH
0023 EF MOV A,R7
0024 FE MOV R6,A
0025 EE MOV A,R6
0026 FA MOV R2,A
; SOURCE LINE # 77
0027 EB MOV A,R3
0028 2500 R ADD A,adc_plus_data+01H
002A F500 R MOV adc_plus_data+01H,A
002C EA MOV A,R2
002D 3500 R ADDC A,adc_plus_data
002F F500 R MOV adc_plus_data,A
; SOURCE LINE # 82
0031 0C INC R4
0032 BC08DB CJNE R4,#08H,?C0001
0035 ?C0002:
; SOURCE LINE # 84
0035 E500 R MOV A,adc_plus_data+01H
0037 AE00 R MOV R6,adc_plus_data
0039 7803 MOV R0,#03H
003B ?C0009:
003B CE XCH A,R6
C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 5
003C C3 CLR C
003D 13 RRC A
003E CE XCH A,R6
003F 13 RRC A
0040 D8F9 DJNZ R0,?C0009
; SOURCE LINE # 94
0042 FF MOV R7,A
; SOURCE LINE # 95
0043 22 RET
; FUNCTION _ADC_Chn_Data (END)
; FUNCTION Vbat_Value (BEGIN)
; SOURCE LINE # 111
; SOURCE LINE # 112
; SOURCE LINE # 113
0000 E4 CLR A
0001 F500 R MOV n_Vbat_Data,A
0003 F500 R MOV n_Vbat_Data+01H,A
; SOURCE LINE # 116
0005 7F05 MOV R7,#05H
0007 120000 R LCALL _ADC_Chn_Data
000A 8E00 R MOV n_Vbat_Data,R6
000C 8F00 R MOV n_Vbat_Data+01H,R7
; SOURCE LINE # 124
000E 7F06 MOV R7,#06H
0010 120000 R LCALL _ADC_Chn_Data
0013 E4 CLR A
0014 FC MOV R4,A
0015 FD MOV R5,A
0016 C004 PUSH AR4
0018 A905 MOV R1,AR5
001A AA06 MOV R2,AR6
001C AB07 MOV R3,AR7
001E AE00 R MOV R6,n_Vbat_Data
0020 AF00 R MOV R7,n_Vbat_Data+01H
0022 7C07 MOV R4,#07H
0024 7DD0 MOV R5,#0D0H
0026 120000 E LCALL ?C?LIMUL
0029 D000 POP AR0
002B 120000 E LCALL ?C?ULDIV
002E 8E00 R MOV n_Vbat_Data,R6
0030 8F00 R MOV n_Vbat_Data+01H,R7
; SOURCE LINE # 130
; SOURCE LINE # 131
0032 22 RET
; FUNCTION Vbat_Value (END)
; FUNCTION ADC_NTC_Value (BEGIN)
; SOURCE LINE # 149
; SOURCE LINE # 150
; SOURCE LINE # 151
0000 E4 CLR A
0001 F500 R MOV adc_data,A
0003 F500 R MOV adc_data+01H,A
; SOURCE LINE # 154
0005 7F04 MOV R7,#04H
0007 120000 R LCALL _ADC_Chn_Data
000A 8E00 R MOV adc_data,R6
000C 8F00 R MOV adc_data+01H,R7
; SOURCE LINE # 161
000E 7F06 MOV R7,#06H
0010 120000 R LCALL _ADC_Chn_Data
C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 6
0013 E4 CLR A
0014 FC MOV R4,A
0015 FD MOV R5,A
0016 C004 PUSH AR4
0018 A905 MOV R1,AR5
001A AA06 MOV R2,AR6
001C AB07 MOV R3,AR7
001E AE00 R MOV R6,adc_data
0020 AF00 R MOV R7,adc_data+01H
0022 7C03 MOV R4,#03H
0024 7DE8 MOV R5,#0E8H
0026 120000 E LCALL ?C?LIMUL
0029 D000 POP AR0
002B 120000 E LCALL ?C?ULDIV
002E 8E00 R MOV adc_data,R6
0030 8F00 R MOV adc_data+01H,R7
; SOURCE LINE # 167
; SOURCE LINE # 168
0032 22 RET
; FUNCTION ADC_NTC_Value (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 170 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = 2 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

313
Project/Listings/bat.lst Normal file
View File

@ -0,0 +1,313 @@
C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE BAT
OBJECT MODULE PLACED IN .\Objects\bat.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\bat\bat.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\UsrIn
-c\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key
-;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\v
-ox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\bat.lst
-) TABS(2) OBJECT(.\Objects\bat.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file bat.c
5 * @brief Voltage-based RC model gauge algorithm
6 *
7 *
8 * @version 1.0
9 * @date 2023/02/20 17:35:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2023/02/20 Alex build this file
18 ******************************************************************************
19 */
20 #include "bat.h"
21 #include "adc.h"
22
23 idata uint8_t bat_level = 0;
24 bit F_batlevel_low = 0; //电池低压
25
26 #if BAT_VALUE
27
28 #define C_offset_bat_level_MAX 50
29 #define C_offset_bat_level_MIN 10
30
31 #define C_bat_level_protect 0
32 #define C_bat_level_lowpower 1
33
34
35 //bit F_batlevel_protect = 0; //低电保护
36 idata uint8_t offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
37
38
39 #define C_batLevel_SetMax 10
40
41 /*充电电池电压会浮高,具体电压需要测试。*/
42 const uint16_t Boost_batlevel_Threshold[C_batLevel_SetMax] =
43 {
44 3000, //1
45 3100, //2
46 3300, //3
47 3400, //4
48 3500, //5
49 3650, //6
50 3800, //7
51 3900, //8
C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 2
52 4050, //9
53 4200 //10
54 };
55 #if 0
const uint16_t Charging_batlevel_Threshold1[C_batLevel_SetMax] =
{
3050, //1
3150, //2
3350, //3
3450, //4
3550, //5
3700, //6
3850, //7
3950, //8
4100, //9
4200 //10
};
#endif
70 void check_bat_level(void)
71 {
72 1 uint8_t i = 0;
73 1 //get bat level
74 1 #if ADC_ENABLE
75 1 for(i=0; i < C_batLevel_SetMax; i++)
76 1 {
77 2 #if 0
if( Vbat_Adc < Boost_batlevel_Threshold[i] )
{
break;
}
#else
85 2 if(CHIP_STA4 & 0x80) //充电
86 2 {
87 3 if( Vbat_Adc < Boost_batlevel_Threshold[i] + 50 )
88 3 break;
89 3 }
90 2 else //放电
91 2 {
92 3 if( Vbat_Adc < Boost_batlevel_Threshold[i] )
93 3 {
94 4 break;
95 4 }
96 3 }
97 2 #endif
98 2 }
99 1 #endif
100 1
101 1 if( i > bat_level )
102 1 {
103 2 offset_bat_level++;
104 2 }
105 1 else
106 1 {
107 2 offset_bat_level--;
108 2 }
109 1
110 1 //debounce
111 1 if( (offset_bat_level > C_offset_bat_level_MAX) || (offset_bat_level < C_offset_bat_level_MIN) )
112 1 {
113 2 //update
C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 3
114 2 bat_level = i;
115 2 offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
116 2 }
117 1 #if 0
if( bat_level <= C_bat_level_protect )
{
F_batlevel_protect = 1;
}
else if( bat_level > ( C_bat_level_protect + 1 ) )
{
F_batlevel_protect = 0;
}
#endif
127 1 if( bat_level <= C_bat_level_lowpower )
128 1 {
129 2 F_batlevel_low = 1;
130 2 }
131 1 else if( bat_level > (C_bat_level_lowpower + 1) )
132 1 {
133 2 F_batlevel_low = 0;
134 2 }
135 1 }
136
137 #endif
C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION Com0010 (BEGIN)
0000 L?0017:
0000 EF MOV A,R7
0001 25E0 ADD A,ACC
0003 2400 R ADD A,#LOW Boost_batlevel_Threshold
0005 F8 MOV R0,A
0006 E6 MOV A,@R0
0007 FC MOV R4,A
0008 08 INC R0
0009 E6 MOV A,@R0
000A 22 RET
; FUNCTION Com0010 (END)
; FUNCTION check_bat_level (BEGIN)
; SOURCE LINE # 70
; SOURCE LINE # 71
; SOURCE LINE # 72
;---- Variable 'i' assigned to Register 'R7' ----
0000 E4 CLR A
0001 FF MOV R7,A
; SOURCE LINE # 75
0002 ?C0001:
; SOURCE LINE # 76
; SOURCE LINE # 85
0002 E5E6 MOV A,CHIP_STA4
0004 30E715 JNB ACC.7,?C0004
; SOURCE LINE # 86
; SOURCE LINE # 87
0007 120000 R LCALL L?0017
000A 2432 ADD A,#032H
000C FD MOV R5,A
000D E4 CLR A
000E 3C ADDC A,R4
000F FC MOV R4,A
0010 C3 CLR C
0011 7800 E MOV R0,#LOW Vbat_Adc+01H
0013 E6 MOV A,@R0
0014 9D SUBB A,R5
0015 18 DEC R0
0016 E6 MOV A,@R0
0017 9C SUBB A,R4
0018 5010 JNC ?C0003
; SOURCE LINE # 88
001A 8012 SJMP ?C0002
; SOURCE LINE # 89
001C ?C0004:
; SOURCE LINE # 91
; SOURCE LINE # 92
001C 120000 R LCALL L?0017
001F FD MOV R5,A
0020 C3 CLR C
0021 7800 E MOV R0,#LOW Vbat_Adc+01H
0023 E6 MOV A,@R0
0024 9D SUBB A,R5
0025 18 DEC R0
0026 E6 MOV A,@R0
0027 9C SUBB A,R4
0028 4004 JC ?C0002
; SOURCE LINE # 93
C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 5
; SOURCE LINE # 94
; SOURCE LINE # 95
; SOURCE LINE # 96
; SOURCE LINE # 98
002A ?C0003:
002A 0F INC R7
002B BF0AD4 CJNE R7,#0AH,?C0001
002E ?C0002:
; SOURCE LINE # 101
002E 7800 R MOV R0,#LOW bat_level
0030 E6 MOV A,@R0
0031 FE MOV R6,A
0032 EF MOV A,R7
0033 D3 SETB C
0034 9E SUBB A,R6
0035 4004 JC ?C0008
; SOURCE LINE # 102
; SOURCE LINE # 103
0037 18 DEC R0
0038 06 INC @R0
; SOURCE LINE # 104
0039 8003 SJMP ?C0009
003B ?C0008:
; SOURCE LINE # 106
; SOURCE LINE # 107
003B 7800 R MOV R0,#LOW offset_bat_level
003D 16 DEC @R0
; SOURCE LINE # 108
003E ?C0009:
; SOURCE LINE # 111
003E 7800 R MOV R0,#LOW offset_bat_level
0040 E6 MOV A,@R0
0041 FE MOV R6,A
0042 D3 SETB C
0043 9432 SUBB A,#032H
0045 5006 JNC ?C0011
0047 EE MOV A,R6
0048 C3 CLR C
0049 940A SUBB A,#0AH
004B 5007 JNC ?C0010
004D ?C0011:
; SOURCE LINE # 112
; SOURCE LINE # 114
004D 7800 R MOV R0,#LOW bat_level
004F A607 MOV @R0,AR7
; SOURCE LINE # 115
0051 18 DEC R0
0052 761E MOV @R0,#01EH
; SOURCE LINE # 116
0054 ?C0010:
; SOURCE LINE # 127
0054 7800 R MOV R0,#LOW bat_level
0056 E6 MOV A,@R0
0057 FF MOV R7,A
0058 D3 SETB C
0059 9401 SUBB A,#01H
005B 5003 JNC ?C0012
; SOURCE LINE # 128
; SOURCE LINE # 129
005D D200 R SETB F_batlevel_low
; SOURCE LINE # 130
005F 22 RET
C51 COMPILER V9.57.0.0 BAT 06/14/2024 11:08:38 PAGE 6
0060 ?C0012:
; SOURCE LINE # 131
0060 EF MOV A,R7
0061 D3 SETB C
0062 9402 SUBB A,#02H
0064 4002 JC ?C0015
; SOURCE LINE # 132
; SOURCE LINE # 133
0066 C200 R CLR F_batlevel_low
; SOURCE LINE # 134
; SOURCE LINE # 135
0068 ?C0015:
0068 22 RET
; FUNCTION check_bat_level (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 116 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 20 ----
IDATA SIZE = 2 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@ -0,0 +1,555 @@
C51 COMPILER V9.57.0.0 CHARGER_MODULE 06/14/2024 11:08:35 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE CHARGER_MODULE
OBJECT MODULE PLACED IN .\Objects\charger_module.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\charger\charger_module.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE
-INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\in
-c;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\user
-app;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\L
-istings\charger_module.lst) TABS(2) OBJECT(.\Objects\charger_module.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file charger_module.c
5 * @brief charger module
6 *
7 *
8 * @version 1.0
9 * @date 2022/07/12 17:35:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/07/12 Alex build this file
18 ******************************************************************************
19 */
20 /*_____ I N C L U D E S ____________________________________________________*/
21 #include "charger_module.h"
22 #include "adc.h"
23 #include "sys_tim.h"
24 #include "discharge_module.h"
25 #include "system.h"
26 #include "vox_module.h"
27 #include "led.h"
28
29 bit Charger_Done = 0;
30
31 #if CHARGER_ENABLE
32 /******************************************************************************\
33 Macro definitions
34 \******************************************************************************/
35 #define NTC_PRO_DEBOUNCE_TIM 10
36
37 /******************************************************************************\
38 Variables definitions
39 \******************************************************************************/
40
41 //idata TE_CHG_STA ChgStatus; // 系统状态定义
42
43
44
45 #ifdef ADC_NTC_ENABLE
46
47 bit NTC_Low_Pro_Flag = 0;
48 bit NTC_High_Pro_Flag = 0;
49
50 #endif
51 /******************************************************************************\
C51 COMPILER V9.57.0.0 CHARGER_MODULE 06/14/2024 11:08:35 PAGE 2
52 Functions definitions
53 \******************************************************************************/
54
55 /*
56 *******************************************************************************
57 * void Charger_init(void)
58 *
59 * Description : Charger Initialization
60 *
61 * Arguments : NONE
62
63 * Returns : NONE
64
65 * Notes : NONE
66 *
67 *******************************************************************************
68 */
69 #if 0
void Charger_Init(void)
{
SFRADDR = PMU_CTL1;
SFRDATA |= 0x07; //电池低压检测 enable 信号电池低压检测档位选择3.3V
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
81
82 /*
83 *******************************************************************************
84 * void Charger_Current_Set(void)
85 *
86 * Description : Charger Initialization
87 *
88 * Arguments : NONE
89
90 * Returns : NONE
91
92 * Notes : NONE
93 *
94 *******************************************************************************
95 */
96 #if 0
void Charger_Current_Set(void)
{
uint16_t Charger_CurADC_Value = 0;
/* 通过外部电阻ADC1值设置充电电流值 */
Charger_CurADC_Value = ADC_Chn_Value(ADC_CH1);
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
111
112 /*
113 *******************************************************************************
C51 COMPILER V9.57.0.0 CHARGER_MODULE 06/14/2024 11:08:35 PAGE 3
114 * uint8_t Charger_NTC_Control(uint8_t Charge_sta)
115 *
116 * Description : Charger NTC Control
117 * NTC 支持 103 和 104 电阻NTC 温度检测由软件通过 ADC 采集 NTC 引脚电压。
118 * 如果支持电量计温度检测线性化,支持电量计方案 103 的 NTC 需要并一个 8.2k
119
120 * 电阻20uA 电流103 NTC 需要串联 10k 电阻104 的 NTC 并联 82k 电阻。
121 * 在使能充电前软件先检测NTC 温度,如果 NTC 浮空,屏蔽 NTC 功能,
122 * 并锁定;如果 NTC 下拉到 0V关闭充电和放电。NTC 保护后,软件关闭充电,
123 * 温度恢复正常并持续 100ms再继续充电。
124 *
125 * Arguments : NTC_Protect_Type_e NTC_Type:Shield 、JEITA or IEC;Charge_sta:Charge or not
126
127 * Returns :NTC_Flag (0:Shield; 1:JEITA; 2:IEC)
128
129 * Notes : NONE
130 *
131 *******************************************************************************
132 */
133 #ifdef ADC_NTC_ENABLE
134 uint8_t PMU_NTC_Control(void)
135 {
136 1 uint16_t NTC_Adc = 0;
137 1 uint8_t NTC_Flag = TRUE;
138 1
139 1 NTC_Adc = ADC_NTC_Value();
140 1
141 1 if(NTC_Adc >= 3700) ////屏蔽NTC功能NTC浮空屏蔽 NTC 功能,并锁定。
142 1 {
143 2 return TRUE;
144 2 }
145 1
146 1 if(CHIP_STA4 & 0x80)
147 1 {
148 2 if(NTC_Adc <= T_0C && NTC_Adc > T_45C) //正常充电
149 2 {
150 3 if(NTC_Low_Pro_Flag)
151 3 {
152 4 if( NTC_Adc < T_3C )
153 4 {
154 5 NTC_Low_Pro_Flag = 0;
155 5 NTC_Flag = TRUE;
156 5 }
157 4 else
158 4 {
159 5 NTC_Flag = FALSE;
160 5 }
161 4 }
162 3
163 3 if(NTC_High_Pro_Flag)
164 3 {
165 4 if( NTC_Adc > T_42C )
166 4 {
167 5 NTC_High_Pro_Flag = 0;
168 5 NTC_Flag = TRUE;
169 5 }
170 4 else
171 4 {
172 5 NTC_Flag = FALSE;
173 5 }
174 4 }
175 3 }
C51 COMPILER V9.57.0.0 CHARGER_MODULE 06/14/2024 11:08:35 PAGE 4
176 2 else //异常不充电
177 2 {
178 3
179 3 if(NTC_Adc > T_0C)
180 3 {
181 4 NTC_Low_Pro_Flag = 1;
182 4 }
183 3 else
184 3 if(NTC_Adc < T_45C)
185 3 {
186 4 NTC_High_Pro_Flag = 1;
187 4 }
188 3
189 3 CHG_CTL &= ~0x01; //Disable Charger.
190 3
191 3 NTC_Flag = FALSE;
192 3 }
193 2 }
194 1
195 1 return NTC_Flag;
196 1 }
197 #endif
198 /*
199 *******************************************************************************
200 * void Charger_Handler(void)
201 *
202 * Description : Charger Handle. ---- 充电过程除了根据 NTC 动态调节充电电流和截止电压外其他由硬件控制。<E588B6>
-涞绻<E6B69E><E7BBBB>
203 发生异常,硬件进行相应处理,并发送标志位,软件可以进行相应处理。
204 *
205 * Arguments : NONE
206
207 * Returns : NONE
208
209 * Notes : NONE
210 *
211 *******************************************************************************
212 */
213 /*
214 1、充电超时充电超时后软件关闭充电使能等待VIN拔出。
215 */
216 void Charger_Handler(void)
217 {
218 1 #if 1
219 1 if( !(CHIP_STA4 & 0x80) ) //未检测到Power good,则关闭Charger使能后返回。
220 1 {
221 2 CHG_CTL &= ~0x01; //Disable Charger
222 2 IRQ_FLAG9 = 0x10; //未充电需清Charg complete interrupt中断
223 2 Charger_Done = 0;
224 2 return;
225 2 }
226 1
227 1 /*各项保护都无需软件处理只处理充电超时超时后需要等VBUS重新插拔后才重新开始Charger流程。*/
228 1 if ( IRQ_FLAG9 & 0x0C ) //充电超时,Tricle charg and Fast charge timeout
229 1 {
230 2 CHG_CTL &= ~0x01; //Disable Charger
231 2 if ( IRQ_FLAG10 & 0xC0 ) //Plugin\Plugout interrupt
232 2 {
233 3 IRQ_FLAG9 = 0x0C;
234 3 IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
235 3 }
236 2 return;
C51 COMPILER V9.57.0.0 CHARGER_MODULE 06/14/2024 11:08:35 PAGE 5
237 2 }
238 1 else /*充电未超时存在Plug则清Plugin\Plugout int*/
239 1 {
240 2 if( IRQ_FLAG10 & 0xC0 )
241 2 {
242 3 IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
243 3 }
244 2 }
245 1
246 1 #ifdef ADC_NTC_ENABLE
247 1 /*NTC Handle*/ //使能Charger前先检测NTC温度异常就不开充电。(CHIP_STA4 & 0x80):PG
248 1 if( PMU_NTC_Control() == FALSE ) //NTC保护不充电。
249 1 {
250 2 return;
251 2 }
252 1 #endif
253 1
254 1 if( IRQ_FLAG9 & 0x10 ) //Charg complete interrupt
255 1 {
256 2 #if ADC_ENABLE
257 2
258 2 #ifdef _DEBUG_CHARGER
printf("Chg Done\r\n");
#endif
261 2 if( Vbat_Adc < BAT_RECHARG )
262 2 {
263 3 //CHG_CTL |= 0x01; //Enable Charger
264 3 IRQ_FLAG9 = 0x10;
265 3 #ifdef _DEBUG_CHARGER
printf("En Chg\r\n");
#endif
268 3 }
269 2 else
270 2 {
271 3 CHG_CTL &= ~0x01; //Disable Charger
272 3 #ifdef _DEBUG_CHARGER
printf("Dis Chg\r\n");
#endif
275 3 }
276 2 Charger_Done = 1;
277 2
278 2 #endif
279 2 }
280 1 else
281 1 {
282 2 CHG_CTL |= 0x01; //Enable Charger
283 2 Charger_Done = 0;
284 2 }
285 1 #endif
286 1 }
287
288 #endif
289
C51 COMPILER V9.57.0.0 CHARGER_MODULE 06/14/2024 11:08:35 PAGE 6
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION PMU_NTC_Control (BEGIN)
; SOURCE LINE # 134
; SOURCE LINE # 135
; SOURCE LINE # 136
;---- Variable 'NTC_Adc' assigned to Register 'R6/R7' ----
0000 E4 CLR A
0001 FF MOV R7,A
0002 FE MOV R6,A
; SOURCE LINE # 137
0003 750001 R MOV NTC_Flag,#01H
; SOURCE LINE # 139
0006 120000 E LCALL ADC_NTC_Value
; SOURCE LINE # 141
0009 C3 CLR C
000A EF MOV A,R7
000B 9474 SUBB A,#074H
000D EE MOV A,R6
000E 940E SUBB A,#0EH
0010 4003 JC ?C0001
; SOURCE LINE # 142
; SOURCE LINE # 143
0012 7F01 MOV R7,#01H
0014 22 RET
; SOURCE LINE # 144
0015 ?C0001:
; SOURCE LINE # 146
0015 E5E6 MOV A,CHIP_STA4
0017 30E757 JNB ACC.7,?C0003
; SOURCE LINE # 147
; SOURCE LINE # 148
001A D3 SETB C
001B EF MOV A,R7
001C 9436 SUBB A,#036H
001E EE MOV A,R6
001F 9405 SUBB A,#05H
0021 5030 JNC ?C0004
0023 EF MOV A,R7
0024 9422 SUBB A,#022H
0026 EE MOV A,R6
0027 9402 SUBB A,#02H
0029 4028 JC ?C0004
; SOURCE LINE # 149
; SOURCE LINE # 150
002B 300012 R JNB NTC_Low_Pro_Flag,?C0005
; SOURCE LINE # 151
; SOURCE LINE # 152
002E EF MOV A,R7
002F 9414 SUBB A,#014H
0031 EE MOV A,R6
0032 9405 SUBB A,#05H
0034 5007 JNC ?C0006
; SOURCE LINE # 153
; SOURCE LINE # 154
0036 C200 R CLR NTC_Low_Pro_Flag
; SOURCE LINE # 155
0038 750001 R MOV NTC_Flag,#01H
; SOURCE LINE # 156
003B 8003 SJMP ?C0005
003D ?C0006:
C51 COMPILER V9.57.0.0 CHARGER_MODULE 06/14/2024 11:08:35 PAGE 7
; SOURCE LINE # 158
; SOURCE LINE # 159
003D E4 CLR A
003E F500 R MOV NTC_Flag,A
; SOURCE LINE # 160
; SOURCE LINE # 161
0040 ?C0005:
; SOURCE LINE # 163
0040 30002E R JNB NTC_High_Pro_Flag,?C0003
; SOURCE LINE # 164
; SOURCE LINE # 165
0043 D3 SETB C
0044 EF MOV A,R7
0045 9444 SUBB A,#044H
0047 EE MOV A,R6
0048 9402 SUBB A,#02H
004A 4022 JC ?C0026
; SOURCE LINE # 166
; SOURCE LINE # 167
004C C200 R CLR NTC_High_Pro_Flag
; SOURCE LINE # 168
004E 750001 R MOV NTC_Flag,#01H
; SOURCE LINE # 169
0051 801E SJMP ?C0003
0053 ?C0004:
; SOURCE LINE # 177
; SOURCE LINE # 179
0053 D3 SETB C
0054 EF MOV A,R7
0055 9436 SUBB A,#036H
0057 EE MOV A,R6
0058 9405 SUBB A,#05H
005A 4004 JC ?C0012
; SOURCE LINE # 180
; SOURCE LINE # 181
005C D200 R SETB NTC_Low_Pro_Flag
; SOURCE LINE # 182
005E 800B SJMP ?C0013
0060 ?C0012:
; SOURCE LINE # 184
0060 C3 CLR C
0061 EF MOV A,R7
0062 9422 SUBB A,#022H
0064 EE MOV A,R6
0065 9402 SUBB A,#02H
0067 5002 JNC ?C0013
; SOURCE LINE # 185
; SOURCE LINE # 186
0069 D200 R SETB NTC_High_Pro_Flag
; SOURCE LINE # 187
006B ?C0013:
; SOURCE LINE # 189
006B 53B3FE ANL CHG_CTL,#0FEH
; SOURCE LINE # 191
006E ?C0026:
006E E4 CLR A
006F F500 R MOV NTC_Flag,A
; SOURCE LINE # 192
; SOURCE LINE # 193
0071 ?C0003:
; SOURCE LINE # 195
0071 AF00 R MOV R7,NTC_Flag
C51 COMPILER V9.57.0.0 CHARGER_MODULE 06/14/2024 11:08:35 PAGE 8
; SOURCE LINE # 196
0073 ?C0002:
0073 22 RET
; FUNCTION PMU_NTC_Control (END)
; FUNCTION Charger_Handler (BEGIN)
; SOURCE LINE # 216
; SOURCE LINE # 217
; SOURCE LINE # 219
0000 E5E6 MOV A,CHIP_STA4
0002 20E709 JB ACC.7,?C0015
; SOURCE LINE # 220
; SOURCE LINE # 221
0005 53B3FE ANL CHG_CTL,#0FEH
; SOURCE LINE # 222
0008 75F210 MOV IRQ_FLAG9,#010H
; SOURCE LINE # 223
000B C200 R CLR Charger_Done
000D 22 RET
; SOURCE LINE # 225
000E ?C0015:
; SOURCE LINE # 228
000E E5F2 MOV A,IRQ_FLAG9
0010 540C ANL A,#0CH
0012 6010 JZ ?C0017
; SOURCE LINE # 229
; SOURCE LINE # 230
0014 53B3FE ANL CHG_CTL,#0FEH
; SOURCE LINE # 231
0017 E5F3 MOV A,IRQ_FLAG10
0019 54C0 ANL A,#0C0H
001B 6037 JZ ?C0016
; SOURCE LINE # 232
; SOURCE LINE # 233
001D 75F20C MOV IRQ_FLAG9,#0CH
; SOURCE LINE # 234
0020 75F3C0 MOV IRQ_FLAG10,#0C0H
; SOURCE LINE # 235
0023 22 RET
; SOURCE LINE # 237
0024 ?C0017:
; SOURCE LINE # 239
; SOURCE LINE # 240
0024 E5F3 MOV A,IRQ_FLAG10
0026 54C0 ANL A,#0C0H
0028 6003 JZ ?C0019
; SOURCE LINE # 241
; SOURCE LINE # 242
002A 75F3C0 MOV IRQ_FLAG10,#0C0H
; SOURCE LINE # 243
; SOURCE LINE # 244
002D ?C0019:
; SOURCE LINE # 248
002D 120000 R LCALL PMU_NTC_Control
0030 EF MOV A,R7
0031 6021 JZ ?C0016
; SOURCE LINE # 249
; SOURCE LINE # 251
; SOURCE LINE # 254
0033 E5F2 MOV A,IRQ_FLAG9
0035 30E417 JNB ACC.4,?C0022
; SOURCE LINE # 255
C51 COMPILER V9.57.0.0 CHARGER_MODULE 06/14/2024 11:08:35 PAGE 9
; SOURCE LINE # 261
0038 C3 CLR C
0039 7800 E MOV R0,#LOW Vbat_Adc+01H
003B E6 MOV A,@R0
003C 94EB SUBB A,#0EBH
003E 18 DEC R0
003F E6 MOV A,@R0
0040 940F SUBB A,#0FH
0042 5005 JNC ?C0023
; SOURCE LINE # 262
; SOURCE LINE # 264
0044 75F210 MOV IRQ_FLAG9,#010H
; SOURCE LINE # 268
0047 8003 SJMP ?C0024
0049 ?C0023:
; SOURCE LINE # 270
; SOURCE LINE # 271
0049 53B3FE ANL CHG_CTL,#0FEH
; SOURCE LINE # 275
004C ?C0024:
; SOURCE LINE # 276
004C D200 R SETB Charger_Done
; SOURCE LINE # 279
004E 22 RET
004F ?C0022:
; SOURCE LINE # 281
; SOURCE LINE # 282
004F 43B301 ORL CHG_CTL,#01H
; SOURCE LINE # 283
0052 C200 R CLR Charger_Done
; SOURCE LINE # 284
; SOURCE LINE # 286
0054 ?C0016:
0054 22 RET
; FUNCTION Charger_Handler (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 201 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@ -0,0 +1,313 @@
C51 COMPILER V9.57.0.0 DISCHARGE_MODULE 06/14/2024 11:08:36 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE DISCHARGE_MODULE
OBJECT MODULE PLACED IN .\Objects\discharge_module.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\discharge\discharge_module.c ROM(COMPACT) OPTIMIZE(9,SIZE) BRO
-WSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrIn
-c\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\
-userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT
-(.\Listings\discharge_module.lst) TABS(2) OBJECT(.\Objects\discharge_module.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file discharge_module.c
5 * @brief discharge module
6 *
7 *
8 * @version 1.0
9 * @date 2022/07/12 17:35:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/07/12 Alex build this file
18 ******************************************************************************
19 */
20 #include "discharge_module.h"
21 #include "vox_module.h"
22 #include "adc.h"
23 #include "charger_module.h"
24 #include "sys_tim.h"
25 #include "system.h"
26 #include "led.h"
27
28 bit gBoost_Prepared_Flag = 0; //Boost满足开启条件。
29
30 #if DISCHARGE_ENABLE
31 /******************************************************************************\
32 Macro definitions
33 \******************************************************************************/
34
35 /******************************************************************************\
36 Variables definitions
37 \******************************************************************************/
38
39
40
41 bit gBoost_UVLO_Flag = 0;
42
43 /******************************************************************************\
44 Functions definitions
45 \******************************************************************************/
46
47 #if 0
/*
*******************************************************************************
* void DisCharge_Boost_Open(void)
*
C51 COMPILER V9.57.0.0 DISCHARGE_MODULE 06/14/2024 11:08:36 PAGE 2
* Description : Boost Open
* VIN 存在时Boost 在电池电压高于 UVLO硬件关闭 2.8/3.0V,硬件清 boost 使能。开
* 软件实现,有 VIN3.6V,无 VIN3.3V)和电池存在的情况下才能开启。
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void DisCharge_Boost_Open(void)
{
if( gBoost_Prepared_Flag ) //Boost需满足开启条件
{
BST_EN = 1; //Boost Enable异常时由硬件主动关闭。
#ifdef _DEBUG_DISCHARGE
printf("Bst Open\r\n");
#endif
}
}
/*
*******************************************************************************
* void DisCharge_Boost_Close(void)
*
* Description : Boost Close主要是出现异常时由硬件主动关闭软件在电池LOW电量状态下是否需要关闭boost输<74>
-觯<>
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void DisCharge_Boost_Close(void)
{
if( (BST_EN & 0x01) && gBoost_Prepared_Flag )
{
BST_EN = 0; //Boost Disable
gBoost_Prepared_Flag = 0;
#ifdef _DEBUG_DISCHARGE
printf("Bst Close\r\n");
#endif
}
}
#endif
103 /*
104 *******************************************************************************
105 * void DisCharge_Handler(void)
106 *
107 * Description : Boost放电的保护功能包括输出短路保护电池 UVLO 保护,放电过流保护,过温保护。
108 *
109 * Arguments :
110
111 * Returns :
112
C51 COMPILER V9.57.0.0 DISCHARGE_MODULE 06/14/2024 11:08:36 PAGE 3
113 * Notes :
114 *
115 *******************************************************************************
116 */
117
118 void DisCharge_Handler(void)
119 {
120 1 /*放电过流保护 --- 硬件实现*/
121 1 #if 0
gBoost_Prepared_Flag = 1;
#else
124 1 /*过温保护 --- 硬件实现*/
125 1 if( CHIP_STA3 & 0x02 )
126 1 {
127 2 gBoost_Prepared_Flag = 0;
128 2 return;
129 2 }
130 1
131 1 /*Boost Input UVLO 硬件实现*/
132 1 if( (CHIP_STA0 & 0x80) ) //用于清软件标志位。
133 1 {
134 2 gBoost_Prepared_Flag = 0;
135 2 gBoost_UVLO_Flag = 1;
136 2 return;
137 2 }
138 1
139 1 /*输出短路保护 (使用中断标志位Boost短路中断发生后会锁存需要写1清零。)-- 短路保护后一直打嗝或者打嗝BOO
-ST_HICCUP_TIM次之后disable boost打嗝时间 250ms软件实现。*/
140 1 if( IRQ_FLAG0 & 0x01 )
141 1 {
142 2 #ifdef _DEBUG_DISCHARGE
printf("Boost Pro Output Short!\r\n");
#endif
145 2 gBoost_Prepared_Flag = 0;
146 2
147 2 //一直打嗝
148 2 if( F_sys_tim_250ms )
149 2 {
150 3 F_sys_tim_250ms = 0;
151 3 IRQ_FLAG0 = 0x01;
152 3
153 3 BST_EN = 1; //250ms定时开一次Boost
154 3 }
155 2 return;
156 2 }
157 1
158 1 gBoost_Prepared_Flag = 1;
159 1
160 1 #if ADC_ENABLE
161 1 /*
162 1 VIN 存在时Boost 在电池电压高于 UVLO硬件关闭 2.8/3.0V,硬件清 boost 使能。开
163 1 软件实现,有 VIN3.6V,无 VIN3.3V)和电池存在的情况下才能开启。
164 1 软件上只作有 VIN3.6V开boost无 VIN3.3V开boost逻辑。
165 1 只关注VIN存在时的UVLO恢复Boost情况。无VIN情况下由硬件处理。
166 1 */
167 1 if ( gBoost_UVLO_Flag )
168 1 {
169 2 if( CHIP_STA4 & 0x80 ) //Power GOOD
170 2 {
171 3 if( Vbat_Adc >= OPEN_BOOST_VIN )
172 3 {
173 4 gBoost_Prepared_Flag = 1;
C51 COMPILER V9.57.0.0 DISCHARGE_MODULE 06/14/2024 11:08:36 PAGE 4
174 4 gBoost_UVLO_Flag = 0;
175 4 }
176 3 else
177 3 {
178 4 BST_EN = 0; //Boost Disable
179 4 gBoost_Prepared_Flag = 0;
180 4 }
181 3 }
182 2 }
183 1
184 1 #endif
185 1 #endif
186 1 }
187
188 #endif
189
C51 COMPILER V9.57.0.0 DISCHARGE_MODULE 06/14/2024 11:08:36 PAGE 5
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION DisCharge_Handler (BEGIN)
; SOURCE LINE # 118
; SOURCE LINE # 119
; SOURCE LINE # 125
0000 E5E5 MOV A,CHIP_STA3
0002 30E103 JNB ACC.1,?C0001
; SOURCE LINE # 126
; SOURCE LINE # 127
0005 C200 R CLR gBoost_Prepared_Flag
0007 22 RET
; SOURCE LINE # 129
0008 ?C0001:
; SOURCE LINE # 132
0008 E5E2 MOV A,CHIP_STA0
000A 30E705 JNB ACC.7,?C0003
; SOURCE LINE # 133
; SOURCE LINE # 134
000D C200 R CLR gBoost_Prepared_Flag
; SOURCE LINE # 135
000F D200 R SETB gBoost_UVLO_Flag
0011 22 RET
; SOURCE LINE # 137
0012 ?C0003:
; SOURCE LINE # 140
0012 E5E8 MOV A,IRQ_FLAG0
0014 30E00E JNB ACC.0,?C0004
; SOURCE LINE # 141
; SOURCE LINE # 145
0017 C200 R CLR gBoost_Prepared_Flag
; SOURCE LINE # 148
0019 300029 E JNB F_sys_tim_250ms,?C0002
; SOURCE LINE # 149
; SOURCE LINE # 150
001C C200 E CLR F_sys_tim_250ms
; SOURCE LINE # 151
001E 75E801 MOV IRQ_FLAG0,#01H
; SOURCE LINE # 153
0021 75B501 MOV BST_EN,#01H
; SOURCE LINE # 154
0024 22 RET
; SOURCE LINE # 156
0025 ?C0004:
; SOURCE LINE # 158
0025 D200 R SETB gBoost_Prepared_Flag
; SOURCE LINE # 167
0027 30001B R JNB gBoost_UVLO_Flag,?C0002
; SOURCE LINE # 168
; SOURCE LINE # 169
002A E5E6 MOV A,CHIP_STA4
002C 30E716 JNB ACC.7,?C0002
; SOURCE LINE # 170
; SOURCE LINE # 171
002F C3 CLR C
0030 7800 E MOV R0,#LOW Vbat_Adc+01H
0032 E6 MOV A,@R0
0033 9410 SUBB A,#010H
0035 18 DEC R0
0036 E6 MOV A,@R0
0037 940E SUBB A,#0EH
C51 COMPILER V9.57.0.0 DISCHARGE_MODULE 06/14/2024 11:08:36 PAGE 6
0039 4005 JC ?C0008
; SOURCE LINE # 172
; SOURCE LINE # 173
003B D200 R SETB gBoost_Prepared_Flag
; SOURCE LINE # 174
003D C200 R CLR gBoost_UVLO_Flag
; SOURCE LINE # 175
003F 22 RET
0040 ?C0008:
; SOURCE LINE # 177
; SOURCE LINE # 178
0040 E4 CLR A
0041 F5B5 MOV BST_EN,A
; SOURCE LINE # 179
0043 C200 R CLR gBoost_Prepared_Flag
; SOURCE LINE # 180
; SOURCE LINE # 181
; SOURCE LINE # 182
; SOURCE LINE # 186
0045 ?C0002:
0045 22 RET
; FUNCTION DisCharge_Handler (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 70 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

100
Project/Listings/gpio.lst Normal file
View File

@ -0,0 +1,100 @@
C51 COMPILER V9.57.0.0 GPIO 06/14/2024 11:08:36 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE GPIO
OBJECT MODULE PLACED IN .\Objects\gpio.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\gpio\gpio.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\Usr
-Inc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\k
-ey;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc
-\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\gpio.
-lst) TABS(2) OBJECT(.\Objects\gpio.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file gpio.c
5 * @brief gpio module
6 * @ic TP3102
7 *
8 * @version 1.0
9 * @date 2022/08/05 15:00:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/08/05 Alex build this file
18 ******************************************************************************/
19 /*_____ I N C L U D E S ____________________________________________________*/
20 #include "gpio.h"
21 #include "sleep.h"
22 #include "userapp.h"
23 #include "led.h"
24
25
26 /******************************************************************************\
27 Macro definitions
28 \******************************************************************************/
29
30 /******************************************************************************\
31 Variables definitions
32 \******************************************************************************/
33 //uint8_t System_Rst_Cnt = 0; //系统软复位定时器
34
35 /******************************************************************************\
36 Functions definitions
37 \******************************************************************************/
38
39 /*
40 *******************************************************************************
41 * void Gpio_Init(void)
42 *
43 * Description : gpio Initialization. --- 系统初始化调用。
44 *
45 * Arguments :
46
47 * Returns :
48
49 * Notes :
50 *
51 *******************************************************************************
C51 COMPILER V9.57.0.0 GPIO 06/14/2024 11:08:36 PAGE 2
52 */
53 #if 0
void GPIO_Init(void)
{
/* GPIO */
// SFRADDR = P0_OE;
// SFRDATA |= 0x1C; //P02,P03,P04设置成输出模式
SFRADDR = P1_OE;
SFRDATA = 0x01;
}
#endif
65
66
C51 COMPILER V9.57.0.0 GPIO 06/14/2024 11:08:36 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = ---- ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

257
Project/Listings/hall.lst Normal file
View File

@ -0,0 +1,257 @@
C51 COMPILER V9.57.0.0 HALL 06/14/2024 11:08:36 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE HALL
OBJECT MODULE PLACED IN .\Objects\hall.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\hall\hall.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\Usr
-Inc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\k
-ey;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc
-\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\hall.
-lst) TABS(2) OBJECT(.\Objects\hall.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file hall.c
5 * @brief hall module
6 *
7 *
8 * @version 1.0
9 * @date 2022/08/04 15:00:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/08/04 Alex build this file
18 ******************************************************************************/
19 /*_____ I N C L U D E S ____________________________________________________*/
20 #include "hall.h"
21 #include "key.h"
22 #include "led.h"
23 #include "vox_module.h"
24 #include "userapp.h"
25 #include "charger_module.h"
26
27
28
29 /******************************************************************************\
30 Macro definitions
31 \******************************************************************************/
32
33 /******************************************************************************\
34 Variables definitions
35 \******************************************************************************/
36 uint8_t Hall_Sta_bk = 0xff;
37
38 CoverStatus_E CoverStatus;
39
40 bit CoverEvent_Flg = 0; //Hall开关触发事件标志位
41 bit CoverEvent_Flg_led = 0;
42
43 #if KEY_HALL_ENABLE
44
45 /******************************************************************************\
46 Functions definitions
47 \******************************************************************************/
48
49 /*
50 *******************************************************************************
51 * void Hall_Init(void)
C51 COMPILER V9.57.0.0 HALL 06/14/2024 11:08:36 PAGE 2
52 *
53 * Description : Hall Initialization
54 *
55 * Arguments :
56
57 * Returns :
58
59 * Notes :
60 *
61 *******************************************************************************
62 */
63 #if 0
void Hall_Init(void)
{
while ( !(CHIP_STA0 & 0x10) ); //Hall analog first detection complete status,hall flag valid only after
-this bit sets.
if(CHIP_STA0 & 0x08) //获取HALL初始状态
{
#if HALL_OPEN_LEV_SET
CoverStatus = CLOSE;
#else
CoverStatus = OPEN;
#endif
}
else
{
#if HALL_OPEN_LEV_SET
CoverStatus = OPEN;
#else
CoverStatus = CLOSE;
#endif
}
//Hall_Sta_bk = (CHIP_STA0 & 0x08);
}
#endif
90 /*
91 *******************************************************************************
92 * void Hall_Handle(void)
93 *
94 * Description : Hall Handle --- 主循环中调用调用周期10ms。CoverStatus --- 充电仓盖子状态。
95 *
96 * Arguments : NONE
97
98 * Returns : NONE
99
100 * Notes : NONE
101 *
102 *******************************************************************************
103 */
104
105 void Hall_Handler(void)
106 {
107 1 uint8_t Hall_Sta = 0;
108 1 if( CHIP_STA0 & 0x10 )
109 1 {
110 2 Hall_Sta = CHIP_STA0 & 0x08;
111 2 if( Hall_Sta != Hall_Sta_bk)
112 2 {
C51 COMPILER V9.57.0.0 HALL 06/14/2024 11:08:36 PAGE 3
113 3 if(CHIP_STA0 & 0x08) //Hall 高电平
114 3 {
115 4 //P10 = 1;
116 4 #if HALL_OPEN_LEV_SET
117 4 CoverStatus = OPEN;
118 4 #else
CoverStatus = CLOSE;
led_blink_1time_flag = 0;
#endif
122 4
123 4 #ifdef _DEBUG_HALL
#if HALL_OPEN_LEV_SET
printf("Open Hall Status:0x%x,sta0:0x%x\r\n",(uint16_t)CoverStatus,(uint16_t)CHIP_STA0);
#else
printf("Close Hall Status:0x%x\r\n",(uint16_t)CoverStatus);
#endif
#endif
132 4 }
133 3 else
134 3 {
135 4 //P10 = 0;
136 4 #if HALL_OPEN_LEV_SET
137 4 CoverStatus = CLOSE;
138 4 led_blink_1time_flag = 0;
139 4 #else
CoverStatus = OPEN;
#endif
142 4
143 4 #ifdef _DEBUG_HALL
#if HALL_OPEN_LEV_SET
printf("Close Hall Status:0x%x,sta0:0x%x\r\n",(uint16_t)CoverStatus,(uint16_t)CHIP_STA0);
#else
printf("Open Hall Status:0x%x\r\n",(uint16_t)CoverStatus);
#endif
#endif
152 4 }
153 3
154 3 CoverEvent_Flg = 1;
155 3 CoverEvent_Flg_led = 1;
156 3 LED_On_Timer = 0;
157 3 //LED_On_Timer1 = 0;
158 3 Vox_TX_Timer = 0;
159 3 Hall_Sta_bk = Hall_Sta;
160 3 }
161 2 }
162 1 }
163
164 #endif
165
C51 COMPILER V9.57.0.0 HALL 06/14/2024 11:08:36 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION Hall_Handler (BEGIN)
; SOURCE LINE # 105
; SOURCE LINE # 106
; SOURCE LINE # 107
;---- Variable 'Hall_Sta' assigned to Register 'R7' ----
; SOURCE LINE # 108
0000 E5E2 MOV A,CHIP_STA0
0002 30E425 JNB ACC.4,?C0005
; SOURCE LINE # 109
; SOURCE LINE # 110
0005 E5E2 MOV A,CHIP_STA0
0007 5408 ANL A,#08H
0009 FF MOV R7,A
; SOURCE LINE # 111
000A 6500 R XRL A,Hall_Sta_bk
000C 601C JZ ?C0005
; SOURCE LINE # 112
; SOURCE LINE # 113
000E E5E2 MOV A,CHIP_STA0
0010 30E305 JNB ACC.3,?C0003
; SOURCE LINE # 114
; SOURCE LINE # 117
0013 750001 R MOV CoverStatus,#01H
; SOURCE LINE # 132
0016 8005 SJMP ?C0004
0018 ?C0003:
; SOURCE LINE # 134
; SOURCE LINE # 137
0018 E4 CLR A
0019 F500 R MOV CoverStatus,A
; SOURCE LINE # 138
001B C200 E CLR led_blink_1time_flag
; SOURCE LINE # 152
001D ?C0004:
; SOURCE LINE # 154
001D D200 R SETB CoverEvent_Flg
; SOURCE LINE # 155
001F D200 R SETB CoverEvent_Flg_led
; SOURCE LINE # 156
0021 E4 CLR A
0022 F500 E MOV LED_On_Timer,A
; SOURCE LINE # 158
0024 F500 E MOV Vox_TX_Timer,A
0026 F500 E MOV Vox_TX_Timer+01H,A
; SOURCE LINE # 159
0028 8F00 R MOV Hall_Sta_bk,R7
; SOURCE LINE # 160
; SOURCE LINE # 161
; SOURCE LINE # 162
002A ?C0005:
002A 22 RET
; FUNCTION Hall_Handler (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 43 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
C51 COMPILER V9.57.0.0 HALL 06/14/2024 11:08:36 PAGE 5
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

212
Project/Listings/key.lst Normal file
View File

@ -0,0 +1,212 @@
C51 COMPILER V9.57.0.0 KEY 06/14/2024 11:09:11 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN .\Objects\key.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\key\key.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\UsrIn
-c\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key
-;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\v
-ox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\key.lst
-) TABS(2) OBJECT(.\Objects\key.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file key.c
5 * @brief key module
6 *
7 *
8 * @version 1.0
9 * @date 2022/08/04 15:00:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/08/04 Alex build this file
18 ******************************************************************************/
19 /*_____ I N C L U D E S ____________________________________________________*/
20 #include "key.h"
21 #include "system.h"
22 #include "led.h"
23 #include "sleep.h"
24 #include "adc.h"
25 #include "bat.h"
26 #include "vox_module.h"
27
28 #if 1
29 /******************************************************************************\
30 Macro definitions
31 \******************************************************************************/
32
33 /******************************************************************************\
34 Variables definitions
35 \******************************************************************************/
36
37 bit Key_Press_short_irq = 0;
38 bit Key_Press_l_irq = 0;
39 bit Key_Press_ll_irq = 0;
40
41 bit Key_l_Flag = 0;
42
43 idata KEY_EVENT_E Event_key = 0;
44
45 /******************************************************************************\
46 Functions definitions
47 \******************************************************************************/
48
49 /*
50 *******************************************************************************
51 * void Key_Init(void)
C51 COMPILER V9.57.0.0 KEY 06/14/2024 11:09:11 PAGE 2
52 *
53 * Description : Hey Initialization
54 *
55 * Arguments :
56
57 * Returns :
58
59 * Notes :
60 *
61 *******************************************************************************
62 */
63 #if 0
void Key_Init(void)
{
SFRADDR = MFP_CTL1; //Set P05 as key Function
SFRDATA &= ~0x3C;
SFRDATA |= 0x14;
SFRADDR = PMU_CTL0;
SFRDATA |= 0x02; //Key Detect Enable
//KEY_CTL = 0x04; //Set all of the functions about KEY are enable.
}
#endif
77
78
79 /*
80 *******************************************************************************
81 * void Key_Handler(void)
82 *
83 * Description : Key Handler --- 主循环中调用调用周期5ms。其中长按(按键时间大于2s)需要判断抬键动作才触发
-。
84 CoverStatus --- 充电仓盖子状态。本函数提供对应Key事件标志位后续应用待定
85 *
86 * Arguments : NONE
87
88 * Returns : NONE
89
90 * Notes : NONE
91 *
92 *******************************************************************************
93 */
94
95 void Key_Handler(void)
96 {
97 1 if( Key_l_Flag )
98 1 {
99 2 Key_Press_l_irq = 0;
100 2 Key_l_Flag = 0;
101 2 /*todo*/
102 2 Event_key = KEY_EVENT_L_2S;
103 2 /*耳机配对*/
104 2
105 2 #ifdef _DEBUG_KEY
printf("long press\r\n");
#endif
108 2 }
109 1
110 1 if( Key_Press_ll_irq )
111 1 {
112 2 Key_Press_ll_irq = 0;
C51 COMPILER V9.57.0.0 KEY 06/14/2024 11:09:11 PAGE 3
113 2 /*todo*/
114 2 Event_key = KEY_EVENT_LL_8S;
115 2 // Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
116 2
117 2 #ifdef _DEBUG_KEY
printf("supper long press\r\n");
#endif
120 2 }
121 1
122 1 if( Key_Press_short_irq )
123 1 {
124 2 Key_Press_short_irq = 0;
125 2 /*todo*/
126 2 Event_key = KEY_EVENT_SHORT;
127 2
128 2 #ifdef _DEBUG_KEY
printf("short press\r\n");
#endif
131 2
132 2 }
133 1 }
134
135
136 #endif
C51 COMPILER V9.57.0.0 KEY 06/14/2024 11:09:11 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION Key_Handler (BEGIN)
; SOURCE LINE # 95
; SOURCE LINE # 96
; SOURCE LINE # 97
0000 300008 R JNB Key_l_Flag,?C0001
; SOURCE LINE # 98
; SOURCE LINE # 99
0003 C200 R CLR Key_Press_l_irq
; SOURCE LINE # 100
0005 C200 R CLR Key_l_Flag
; SOURCE LINE # 102
0007 7800 R MOV R0,#LOW Event_key
0009 7602 MOV @R0,#02H
; SOURCE LINE # 108
000B ?C0001:
; SOURCE LINE # 110
000B 300006 R JNB Key_Press_ll_irq,?C0002
; SOURCE LINE # 111
; SOURCE LINE # 112
000E C200 R CLR Key_Press_ll_irq
; SOURCE LINE # 114
0010 7800 R MOV R0,#LOW Event_key
0012 7603 MOV @R0,#03H
; SOURCE LINE # 120
0014 ?C0002:
; SOURCE LINE # 122
0014 300006 R JNB Key_Press_short_irq,?C0004
; SOURCE LINE # 123
; SOURCE LINE # 124
0017 C200 R CLR Key_Press_short_irq
; SOURCE LINE # 126
0019 7800 R MOV R0,#LOW Event_key
001B 7601 MOV @R0,#01H
; SOURCE LINE # 132
; SOURCE LINE # 133
001D ?C0004:
001D 22 RET
; FUNCTION Key_Handler (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 30 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 1 ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

333
Project/Listings/led.lst Normal file
View File

@ -0,0 +1,333 @@
C51 COMPILER V9.57.0.0 LED 06/14/2024 11:08:36 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE LED
OBJECT MODULE PLACED IN .\Objects\led.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\led\led.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\UsrIn
-c\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key
-;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\v
-ox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\led.lst
-) TABS(2) OBJECT(.\Objects\led.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file led.c
5 * @brief led module
6 * @ic TP3102
7 *
8 * @version 1.0
9 * @date 2022/08/04 15:00:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/08/04 Alex build this file
18 ******************************************************************************/
19 /*_____ I N C L U D E S ____________________________________________________*/
20
21 #include "led.h"
22
23
24 #ifdef LED_DISPLAY
25
26 /******************************************************************************\
27 Macro definitions
28 \******************************************************************************/
29
30 /******************************************************************************\
31 Variables definitions
32 \******************************************************************************/
33 static idata TS_LED_INFO LED;
34
35 idata uint8_t Display_Sta = LED_OFF; // 显示状态
36
37 /******************************************************************************\
38 Functions definitions
39 \******************************************************************************/
40 #if 0
/*
* 函数名称 : LED_Init
* 功能描述 : LED初始化
* 参 数 : NONE
* 返回值 : NONE
*/
/******************************************************************************/
void LED_Init(void)
/******************************************************************************/
{
SFRADDR = P0_OE;
C51 COMPILER V9.57.0.0 LED 06/14/2024 11:08:36 PAGE 2
SFRDATA |= 0x08;
SFRADDR = P0_DRV;
SFRDATA = 0x0C;
pin_LED_1 = 0;
}
#endif
60 /*
61 * 函数名称 : LED_Set
62 * 功能描述 : LED工作方式设置
63 * 参 数 : State工作方式 / Period:闪烁周期(频率单位ms) / Times:闪烁次数当次数等于0xff时<EFBC8C>
-鄙痢<E98499>
64 * 返回值 : NONE
65 */
66 /******************************************************************************/
67 void LED_Set(uint8_t State,uint8_t Period,uint8_t Times)
68 /******************************************************************************/
69 {
70 1 LED.State = State;
71 1 LED.Flash_Duty = Period / 2;
72 1 LED.Flash_Period = Period;
73 1 LED.Flash_Times = Times;
74 1 LED.Timer = 0;
75 1 }
76
77 /*
78 * 函数名称 : LED_Service
79 * 功能描述 : LED驱动需放在100ms时间片中
80 * 参 数 : NONE
81 * 返回值 : NONE
82 */
83 /******************************************************************************/
84 void LED_Drv(void)
85 /******************************************************************************/
86 {
87 1 switch(LED.State)
88 1 {
89 2 case LED_ON:
90 2 LEDR_ON();
91 2 break;
92 2
93 2 case LED_OFF:
94 2 LEDR_OFF();
95 2 break;
96 2
97 2 case LED_FLASH:
98 2 if( LED.Timer < LED.Flash_Duty )
99 2 {
100 3 LEDR_ON();
101 3 }
102 2 else
103 2 {
104 3 LEDR_OFF();
105 3 }
106 2
107 2 if( LED.Timer >= LED.Flash_Period )//LED.Timer[i]表示累加的时间
108 2 {
109 3 LED.Timer = 0;
110 3
111 3 if( LED.Flash_Times == 0xff )
112 3 {
C51 COMPILER V9.57.0.0 LED 06/14/2024 11:08:36 PAGE 3
113 4 //LED.State = LED_KEEP_FLASHING;
114 4 break;
115 4 }
116 3 else
117 3 {
118 4 if( LED.Flash_Times > 0 )
119 4 {
120 5 LED.Flash_Times--;
121 5 }
122 4
123 4 if( LED.Flash_Times == 0 )
124 4 {
125 5 LED.State = LED_OFF;
126 5 }
127 4 }
128 3 }
129 2
130 2 break;
131 2 #if 0
case LED_KEEP_FLASHING:
if( LED.Timer <= LED.Flash_Duty )
{
LEDR_ON();
}
else
{
LEDR_OFF();
}
if( LED.Timer >= LED.Flash_Period )
{
LED.Timer = 0;
}
break;
#endif
147 2 default:
148 2 LEDR_OFF();
149 2 break;
150 2
151 2 }
152 1
153 1 Display_Sta = LED.State; // 获取当前LED工作状态。
154 1
155 1 LED.Timer += LED_PLUS_TIME;
156 1 }
157
158 #endif
159
160
C51 COMPILER V9.57.0.0 LED 06/14/2024 11:08:36 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _LED_Set (BEGIN)
; SOURCE LINE # 67
;---- Variable 'Period' assigned to Register 'R5' ----
;---- Variable 'Times' assigned to Register 'R3' ----
;---- Variable 'State' assigned to Register 'R7' ----
; SOURCE LINE # 69
; SOURCE LINE # 70
0000 7800 R MOV R0,#LOW LED
0002 A607 MOV @R0,AR7
; SOURCE LINE # 71
0004 ED MOV A,R5
0005 C3 CLR C
0006 13 RRC A
0007 08 INC R0
0008 F6 MOV @R0,A
; SOURCE LINE # 72
0009 08 INC R0
000A A605 MOV @R0,AR5
; SOURCE LINE # 73
000C 08 INC R0
000D A603 MOV @R0,AR3
; SOURCE LINE # 74
000F E4 CLR A
0010 08 INC R0
0011 F6 MOV @R0,A
; SOURCE LINE # 75
0012 22 RET
; FUNCTION _LED_Set (END)
; FUNCTION LED_Drv (BEGIN)
; SOURCE LINE # 84
; SOURCE LINE # 86
; SOURCE LINE # 87
0000 7800 R MOV R0,#LOW LED
0002 E6 MOV A,@R0
0003 603D JZ ?C0013
0005 24FE ADD A,#0FEH
0007 6007 JZ ?C0005
0009 04 INC A
000A 7036 JNZ ?C0013
; SOURCE LINE # 88
; SOURCE LINE # 89
000C ?C0003:
; SOURCE LINE # 90
000C D283 SETB pin_LED_1
; SOURCE LINE # 91
000E 8034 SJMP ?C0002
; SOURCE LINE # 93
; SOURCE LINE # 97
0010 ?C0005:
; SOURCE LINE # 98
0010 7800 R MOV R0,#LOW LED+04H
0012 E6 MOV A,@R0
0013 FF MOV R7,A
0014 C3 CLR C
0015 7800 R MOV R0,#LOW LED+01H
0017 96 SUBB A,@R0
0018 5004 JNC ?C0006
; SOURCE LINE # 99
C51 COMPILER V9.57.0.0 LED 06/14/2024 11:08:36 PAGE 5
; SOURCE LINE # 100
001A D283 SETB pin_LED_1
; SOURCE LINE # 101
001C 8002 SJMP ?C0007
001E ?C0006:
; SOURCE LINE # 103
; SOURCE LINE # 104
001E C283 CLR pin_LED_1
; SOURCE LINE # 105
0020 ?C0007:
; SOURCE LINE # 107
0020 EF MOV A,R7
0021 C3 CLR C
0022 7800 R MOV R0,#LOW LED+02H
0024 96 SUBB A,@R0
0025 401D JC ?C0002
; SOURCE LINE # 108
; SOURCE LINE # 109
0027 E4 CLR A
0028 7800 R MOV R0,#LOW LED+04H
002A F6 MOV @R0,A
; SOURCE LINE # 111
002B 18 DEC R0
002C E6 MOV A,@R0
002D FF MOV R7,A
002E F4 CPL A
002F 6013 JZ ?C0002
; SOURCE LINE # 112
; SOURCE LINE # 114
; SOURCE LINE # 115
; SOURCE LINE # 117
; SOURCE LINE # 118
0031 EF MOV A,R7
0032 D3 SETB C
0033 9400 SUBB A,#00H
0035 4001 JC ?C0011
; SOURCE LINE # 119
; SOURCE LINE # 120
0037 16 DEC @R0
; SOURCE LINE # 121
0038 ?C0011:
; SOURCE LINE # 123
0038 7800 R MOV R0,#LOW LED+03H
003A E6 MOV A,@R0
003B 7007 JNZ ?C0002
; SOURCE LINE # 124
; SOURCE LINE # 125
003D 7800 R MOV R0,#LOW LED
003F F6 MOV @R0,A
; SOURCE LINE # 126
; SOURCE LINE # 127
; SOURCE LINE # 128
; SOURCE LINE # 130
0040 8002 SJMP ?C0002
; SOURCE LINE # 147
0042 ?C0013:
; SOURCE LINE # 148
0042 C283 CLR pin_LED_1
; SOURCE LINE # 149
; SOURCE LINE # 151
0044 ?C0002:
; SOURCE LINE # 153
C51 COMPILER V9.57.0.0 LED 06/14/2024 11:08:36 PAGE 6
0044 7800 R MOV R0,#LOW LED
0046 E6 MOV A,@R0
0047 7800 R MOV R0,#LOW Display_Sta
0049 F6 MOV @R0,A
; SOURCE LINE # 155
004A 18 DEC R0
004B 06 INC @R0
; SOURCE LINE # 156
004C 22 RET
; FUNCTION LED_Drv (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 96 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 6 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

124
Project/Listings/main.lst Normal file
View File

@ -0,0 +1,124 @@
C51 COMPILER V9.57.0.0 MAIN 06/14/2024 11:08:35 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Objects\main.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\main.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\UsrInc\a
-dc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..
-\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;
-..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\main.lst)
-TABS(2) OBJECT(.\Objects\main.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file main.c
5 * @brief main module
6 *
7 *
8 * @version 1.0
9 * @date 2022/07/12 17:35:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/07/12 Alex build this file
18 ******************************************************************************
19 */
20 /*_____ I N C L U D E S ____________________________________________________*/
21 #include "define.h"
22 #include "userapp.h"
23 #include "watchdog.h"
24 #include "sys_tim.h"
25 #include "system.h"
26 #include "led.h"
27 #include "charger_module.h"
28 #include "adc.h"
29 #include "vox_module.h"
30
31
32 /******************************************************************************\
33 Macro definitions
34 \******************************************************************************/
35
36 /******************************************************************************\
37 Variables definitions
38 \******************************************************************************/
39
40 #ifdef _DEBUG_MAIN
const uint8_t Ver[] = "V100";
/*程序版本第一个数代表在硬件存在改动不能兼容之前版本时加1
第二个数在功能存在改动时加1第三个数在软件调试出现不同的
测试版本时改动;高位数字变动时,低位数字清零。*/
#endif
46
47 /******************************************************************************\
48 Functions definitions
49 \******************************************************************************/
50
51 void main(void )
C51 COMPILER V9.57.0.0 MAIN 06/14/2024 11:08:35 PAGE 2
52 {
53 1 System_Init(); //系统初始化
54 1
55 1 #ifdef _DEBUG_MAIN
printf("System Init(Ver:%s)\r\n",Ver);
#endif
58 1
59 1 while(1)
60 1 {
61 2
62 2 #if WTG_ENABLE
63 2 WDT = 1;
64 2 SWDT = 1;
65 2 #endif
66 2 Sys_Tim_Handler(); //定时器
67 2
68 2 UserAPP();
69 2 }
70 1 }
C51 COMPILER V9.57.0.0 MAIN 06/14/2024 11:08:35 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION main (BEGIN)
; SOURCE LINE # 51
; SOURCE LINE # 52
; SOURCE LINE # 53
0000 120000 E LCALL System_Init
0003 ?C0001:
; SOURCE LINE # 59
; SOURCE LINE # 60
; SOURCE LINE # 63
0003 D2AE SETB WDT
; SOURCE LINE # 64
0005 D2BE SETB SWDT
; SOURCE LINE # 66
0007 120000 E LCALL Sys_Tim_Handler
; SOURCE LINE # 68
000A 120000 E LCALL UserAPP
; SOURCE LINE # 69
000D 80F4 SJMP ?C0001
; FUNCTION main (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 15 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

1826
Project/Listings/mcu.m51 Normal file

File diff suppressed because it is too large Load Diff

132
Project/Listings/sleep.lst Normal file
View File

@ -0,0 +1,132 @@
C51 COMPILER V9.57.0.0 SLEEP 06/14/2024 11:08:37 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE SLEEP
OBJECT MODULE PLACED IN .\Objects\sleep.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\sleep\sleep.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\U
-srInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc
-\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrI
-nc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\sle
-ep.lst) TABS(2) OBJECT(.\Objects\sleep.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file sleep.c
5 * @brief sleep module
6 *
7 *
8 * @version 1.0
9 * @date 2023/03/22 17:35:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2023/03/22 Alex build this file
18 ******************************************************************************
19 */
20 #include "sleep.h"
21 #include "system.h"
22 #include "vox_module.h"
23
24 #if SLEEP_ENABLE
25
26 /******************************************************************************\
27 Macro definitions
28 \******************************************************************************/
29
30 /******************************************************************************\
31 Variables definitions
32 \******************************************************************************/
33
34 uint8_t Decnt_SleepDelay = 0;
35
36 bit Enter_Sleep_Cnt_Restart_Flag = 0;
37
38 /******************************************************************************\
39 Functions definitions
40 \******************************************************************************/
41
42
43 /*
44 *******************************************************************************
45 * bool Check_Require_Sleep(void )
46 *
47 * Description : 查询休眠唤醒源标志位函数。
48 *
49 * Arguments : None
50
51 * Returns : None
C51 COMPILER V9.57.0.0 SLEEP 06/14/2024 11:08:37 PAGE 2
52
53 * Notes : bool Flag
54 *
55 *******************************************************************************
56 */
57 bit Check_Require_Sleep(void )
58 {
59 1 if( ( CHIP_STA4 & 0x80 ) || ( ON == Vox_Vout_Enable ) || Enter_Sleep_Cnt_Restart_Flag ) /*VBUS Power Go
-od存在、有中断、耳机处于充电状态情况下Boost重载输出系统不进休眠模式。 */
60 1 {
61 2 #ifdef _DEBUG_SLEEP
printf("Protect\r\n");
#endif
64 2 Enter_Sleep_Cnt_Restart_Flag = 0;
65 2 /*处理对应的保护和中断唤醒事件。*/
66 2 return false;
67 2 }
68 1
69 1 return true;
70 1 }
71
72 #endif
73
C51 COMPILER V9.57.0.0 SLEEP 06/14/2024 11:08:37 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION Check_Require_Sleep (BEGIN)
; SOURCE LINE # 57
; SOURCE LINE # 58
; SOURCE LINE # 59
0000 E5E6 MOV A,CHIP_STA4
0002 20E706 JB ACC.7,?C0002
0005 200003 E JB Vox_Vout_Enable,?C0002
0008 300004 R JNB Enter_Sleep_Cnt_Restart_Flag,?C0001
000B ?C0002:
; SOURCE LINE # 60
; SOURCE LINE # 64
000B C200 R CLR Enter_Sleep_Cnt_Restart_Flag
; SOURCE LINE # 66
000D C3 CLR C
000E 22 RET
; SOURCE LINE # 67
000F ?C0001:
; SOURCE LINE # 69
000F D3 SETB C
; SOURCE LINE # 70
0010 ?C0003:
0010 22 RET
; FUNCTION Check_Require_Sleep (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 17 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@ -0,0 +1,541 @@
C51 COMPILER V9.57.0.0 SYS_TIM 06/14/2024 11:08:38 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE SYS_TIM
OBJECT MODULE PLACED IN .\Objects\sys_tim.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\timer\sys_tim.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..
-\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrI
-nc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\Us
-rInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\s
-ys_tim.lst) TABS(2) OBJECT(.\Objects\sys_tim.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file sys_tim.c
5 * @brief Timer module
6 *
7 *
8 * @version 1.0
9 * @date 2022/09/05 15:00:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/09/05 Alex build this file
18 ******************************************************************************/
19 /*_____ I N C L U D E S ____________________________________________________*/
20
21 #include "sys_tim.h"
22 #include "vox_module.h"
23 #include "system.h"
24 #include "charger_module.h"
25 #include "led.h"
26
27 /******************************************************************************\
28 Macro definitions
29 \******************************************************************************/
30
31 /******************************************************************************\
32 Variables definitions
33 \******************************************************************************/
34 uint8_t cnt_sys_tim_5ms = 0;
35 uint8_t cnt_sys_tim_10ms = 0;
36 uint8_t cnt_sys_tim_250ms = 0;
37 uint8_t cnt_sys_tim_100ms = 0;
38 uint8_t cnt_sys_tim_1s = 0;
39
40 bit F_sys_tim_5ms = 0;
41 bit F_sys_tim_10ms = 0;
42 bit F_sys_tim_250ms = 0;
43 bit F_sys_tim_100ms = 0;
44 bit F_sys_tim_1s = 0;
45
46 uint8_t F_sys_tim0_tick = 0;
47
48 uint8_t cnt_sys_tim0_5ms = 0;
49 bit BES_Puls_Start = 0; //开启BES Reset脉冲信号
50
51 #if TIMER1_ENABLE
C51 COMPILER V9.57.0.0 SYS_TIM 06/14/2024 11:08:38 PAGE 2
bit F_sys_tim1_tick = 0;
#endif
55
56 #ifdef VOX_TX_RST_PATTERN
57 uint8_t BES_Puls_Cnt = 0; //BES Reset脉冲计数
58 //bit BES_Puls_Start = 0; //开启BES Reset脉冲信号
59 #endif
60
61 /******************************************************************************\
62 Functions definitions
63 \******************************************************************************/
64
65
66 /*
67 *******************************************************************************
68 * void Sys_Tim_Handler(void )
69 *
70 * Description : Timer Handle
71 *
72 * Arguments : NONE
73
74 * Returns : NONE
75
76 * Notes : NONE
77 *
78 *******************************************************************************
79 */
80 void Sys_Tim_Handler(void)
81 {
82 1 if(F_sys_tim0_tick == 0)
83 1 return;
84 1 F_sys_tim0_tick = 0;
85 1 //system tick
86 1
87 1 //---------------5ms----------------------------------------
88 1 cnt_sys_tim_5ms++;
89 1 if(cnt_sys_tim_5ms >= 5)
90 1 {
91 2 cnt_sys_tim_5ms = 0;
92 2 F_sys_tim_5ms = 1;
93 2 }
94 1
95 1 //---------------10ms----------------------------------------
96 1 cnt_sys_tim_10ms++;
97 1 if(cnt_sys_tim_10ms >= 10)
98 1 {
99 2 cnt_sys_tim_10ms = 0;
100 2 F_sys_tim_10ms = 1;
101 2
102 2 }
103 1
104 1 //---------------100ms----------------------------------------
105 1 cnt_sys_tim_100ms++;
106 1 if(cnt_sys_tim_100ms >= 100)
107 1 {
108 2 cnt_sys_tim_100ms = 0;
109 2 F_sys_tim_100ms = 1;
110 2 }
111 1
112 1 //-------------------------------------------------
113 1 cnt_sys_tim_250ms++;
C51 COMPILER V9.57.0.0 SYS_TIM 06/14/2024 11:08:38 PAGE 3
114 1 if(cnt_sys_tim_250ms>=250)
115 1 {
116 2 cnt_sys_tim_250ms = 0;
117 2 F_sys_tim_250ms = 1;
118 2 // P10 = !P10;
119 2 //-----------------250ms-------------------------
120 2 cnt_sys_tim_1s++;
121 2 if(cnt_sys_tim_1s >= 4)
122 2 {
123 3 cnt_sys_tim_1s = 0;
124 3 F_sys_tim_1s = 1;
125 3 #if VOX_ENABLE
126 3 Boost_Open_Atleast_Tim_Cnt++;
127 3 #endif
128 3 }
129 2 }
130 1 }
131
132 /*
133 *******************************************************************************
134 * void Delay10ms(void) //@11.0592MHz
135 *
136 * Description : 10ms软定时函数
137 *
138 * Arguments : NONE
139
140 * Returns : NONE
141
142 * Notes : NONE
143 *
144 *******************************************************************************
145 */
146 #if 0
void Delay10ms(void) //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
#endif
159
160 /**
161 * @brief This function handles sys_tim Handler.
162 * @param None
163 * @retval None
164 * 1ms
165 */
166 void tim0_Interrupt(void) interrupt Interrupt_Vector_TF0 //interrupt address is 0x000B
167 {
168 1 //1ms
169 1 TH0 += C_TIM0_Reload >> 8;
170 1 TL0 += C_TIM0_Reload & 0xFF;
171 1
172 1 F_sys_tim0_tick = 1;
173 1
174 1 #ifdef VOX_TX_RST_PATTERN
175 1
C51 COMPILER V9.57.0.0 SYS_TIM 06/14/2024 11:08:38 PAGE 4
176 1 //---------------5ms----------------------------------------
177 1 cnt_sys_tim0_5ms++;
178 1 if(cnt_sys_tim0_5ms >= 5)
179 1 {
180 2 cnt_sys_tim0_5ms = 0;
181 2 //BES_Reset_Puls();
182 2 /*在中断中调用函数,会占用很多内存!*/
183 2 if(BES_Puls_Start)
184 2 {
185 3 if(BES_Puls_Cnt <= 4) //持续5个低电平后加一高电平
186 3 {
187 4 COM_CTRL = OFF;
188 4 }
189 3 else
190 3 {
191 4 if(BES_Puls_Cnt%2)
192 4 {
193 5
194 5 if(BES_Puls_Cnt == 13)
195 5 {
196 6 COM_CTRL = OFF;
197 6 }
198 5 else
199 5 {
200 6 COM_CTRL = ON;
201 6 }
202 5 }
203 4 else
204 4 {
205 5
206 5 if(BES_Puls_Cnt == 14)
207 5 {
208 6 COM_CTRL = ON;
209 6 }
210 5 else
211 5 {
212 6 COM_CTRL = OFF;
213 6 }
214 5 }
215 4 }
216 3
217 3 BES_Puls_Cnt++;
218 3
219 3 if(BES_Puls_Cnt >= 23)
220 3 {
221 4 BES_Puls_Start = 0;
222 4 BES_Puls_Cnt = 0;
223 4 }
224 3 }
225 2 }
226 1 #endif
227 1 }
228
229 /*
230 *******************************************************************************
231 * void Sys_Tim0_Init(void)
232 *
233 * Description : TImer0 Mode1 16bit timer Initialization
234 *
235 * Arguments : NONE
236
237 * Returns : NONE
C51 COMPILER V9.57.0.0 SYS_TIM 06/14/2024 11:08:38 PAGE 5
238
239 * Notes : NONE
240 *
241 *******************************************************************************
242 */
243 #if 0
void Sys_Tim0_Init(void)
{
TMOD &= 0xF0;
TMOD |= 0x01; //mode 1, 16bit timer
TH0 = C_TIM0_Reload >> 8;
TL0 = C_TIM0_Reload & 0xFF;
ET0 = 1; //enable time0 interrupt
TR0 = 1; //time0 run
}
#endif
256 #if TIMER1_ENABLE
/**
* @brief This function handles sys_tim Handler.
* @param None
* @retval None
* 1ms
*/
void tim1_Interrupt(void) interrupt Interrupt_Vector_TF1//interrupt address is 0x000B
{
//1ms
TF1 = 0;
TH1 += C_TIM1_Reload >> 8;
TL1 += C_TIM1_Reload & 0xFF;
F_sys_tim1_tick = 1;
}
/*
*******************************************************************************
* void Sys_Tim1_Init(void)
*
* Description : TImer1 Mode1 16bit timer Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Sys_Tim1_Init(void)
{
TMOD &= 0x0F;
TMOD |= 0x10; //mode 1, 16bit timer
TH1 = C_TIM1_Reload >> 8;
TL1 = C_TIM1_Reload & 0xFF;
ET1 = 1; //enable time1 interrupt
TR1 = 1; //time1 run
C51 COMPILER V9.57.0.0 SYS_TIM 06/14/2024 11:08:38 PAGE 6
}
#endif
#endif
304
C51 COMPILER V9.57.0.0 SYS_TIM 06/14/2024 11:08:38 PAGE 7
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION Sys_Tim_Handler (BEGIN)
; SOURCE LINE # 80
; SOURCE LINE # 81
; SOURCE LINE # 82
0000 E500 R MOV A,F_sys_tim0_tick
0002 6050 JZ ?C0002
; SOURCE LINE # 84
0004 E4 CLR A
0005 F500 R MOV F_sys_tim0_tick,A
; SOURCE LINE # 88
0007 0500 R INC cnt_sys_tim_5ms
; SOURCE LINE # 89
0009 E500 R MOV A,cnt_sys_tim_5ms
000B C3 CLR C
000C 9405 SUBB A,#05H
000E 4005 JC ?C0003
; SOURCE LINE # 90
; SOURCE LINE # 91
0010 E4 CLR A
0011 F500 R MOV cnt_sys_tim_5ms,A
; SOURCE LINE # 92
0013 D200 R SETB F_sys_tim_5ms
; SOURCE LINE # 93
0015 ?C0003:
; SOURCE LINE # 96
0015 0500 R INC cnt_sys_tim_10ms
; SOURCE LINE # 97
0017 E500 R MOV A,cnt_sys_tim_10ms
0019 C3 CLR C
001A 940A SUBB A,#0AH
001C 4005 JC ?C0004
; SOURCE LINE # 98
; SOURCE LINE # 99
001E E4 CLR A
001F F500 R MOV cnt_sys_tim_10ms,A
; SOURCE LINE # 100
0021 D200 R SETB F_sys_tim_10ms
; SOURCE LINE # 102
0023 ?C0004:
; SOURCE LINE # 105
0023 0500 R INC cnt_sys_tim_100ms
; SOURCE LINE # 106
0025 E500 R MOV A,cnt_sys_tim_100ms
0027 C3 CLR C
0028 9464 SUBB A,#064H
002A 4005 JC ?C0005
; SOURCE LINE # 107
; SOURCE LINE # 108
002C E4 CLR A
002D F500 R MOV cnt_sys_tim_100ms,A
; SOURCE LINE # 109
002F D200 R SETB F_sys_tim_100ms
; SOURCE LINE # 110
0031 ?C0005:
; SOURCE LINE # 113
0031 0500 R INC cnt_sys_tim_250ms
; SOURCE LINE # 114
0033 E500 R MOV A,cnt_sys_tim_250ms
0035 C3 CLR C
C51 COMPILER V9.57.0.0 SYS_TIM 06/14/2024 11:08:38 PAGE 8
0036 94FA SUBB A,#0FAH
0038 401A JC ?C0002
; SOURCE LINE # 115
; SOURCE LINE # 116
003A E4 CLR A
003B F500 R MOV cnt_sys_tim_250ms,A
; SOURCE LINE # 117
003D D200 R SETB F_sys_tim_250ms
; SOURCE LINE # 120
003F 0500 R INC cnt_sys_tim_1s
; SOURCE LINE # 121
0041 E500 R MOV A,cnt_sys_tim_1s
0043 9404 SUBB A,#04H
0045 400D JC ?C0002
; SOURCE LINE # 122
; SOURCE LINE # 123
0047 E4 CLR A
0048 F500 R MOV cnt_sys_tim_1s,A
; SOURCE LINE # 124
004A D200 R SETB F_sys_tim_1s
; SOURCE LINE # 126
004C 0500 E INC Boost_Open_Atleast_Tim_Cnt+01H
004E E500 E MOV A,Boost_Open_Atleast_Tim_Cnt+01H
0050 7002 JNZ ?C0020
0052 0500 E INC Boost_Open_Atleast_Tim_Cnt
0054 ?C0020:
; SOURCE LINE # 128
; SOURCE LINE # 129
; SOURCE LINE # 130
0054 ?C0002:
0054 22 RET
; FUNCTION Sys_Tim_Handler (END)
; FUNCTION tim0_Interrupt (BEGIN)
0000 C0E0 PUSH ACC
0002 C0D0 PUSH PSW
; SOURCE LINE # 166
; SOURCE LINE # 169
0004 74FC MOV A,#0FCH
0006 258C ADD A,TH0
0008 F58C MOV TH0,A
; SOURCE LINE # 170
000A 7417 MOV A,#017H
000C 258A ADD A,TL0
000E F58A MOV TL0,A
; SOURCE LINE # 172
0010 750001 R MOV F_sys_tim0_tick,#01H
; SOURCE LINE # 177
0013 0500 R INC cnt_sys_tim0_5ms
; SOURCE LINE # 178
0015 E500 R MOV A,cnt_sys_tim0_5ms
0017 C3 CLR C
0018 9405 SUBB A,#05H
001A 403A JC ?C0019
; SOURCE LINE # 179
; SOURCE LINE # 180
001C 750000 R MOV cnt_sys_tim0_5ms,#00H
; SOURCE LINE # 183
001F 300034 R JNB BES_Puls_Start,?C0019
; SOURCE LINE # 184
; SOURCE LINE # 185
0022 E500 R MOV A,BES_Puls_Cnt
C51 COMPILER V9.57.0.0 SYS_TIM 06/14/2024 11:08:38 PAGE 9
0024 D3 SETB C
0025 9404 SUBB A,#04H
0027 5004 JNC ?C0010
; SOURCE LINE # 186
; SOURCE LINE # 187
0029 C282 CLR COM_CTRL
; SOURCE LINE # 188
002B 801B SJMP ?C0011
002D ?C0010:
; SOURCE LINE # 190
; SOURCE LINE # 191
002D E500 R MOV A,BES_Puls_Cnt
002F 30E00B JNB ACC.0,?C0012
; SOURCE LINE # 192
; SOURCE LINE # 194
0032 B40D04 CJNE A,#0DH,?C0013
; SOURCE LINE # 195
; SOURCE LINE # 196
0035 C282 CLR COM_CTRL
; SOURCE LINE # 197
0037 800F SJMP ?C0011
0039 ?C0013:
; SOURCE LINE # 199
; SOURCE LINE # 200
0039 D282 SETB COM_CTRL
; SOURCE LINE # 201
; SOURCE LINE # 202
003B 800B SJMP ?C0011
003D ?C0012:
; SOURCE LINE # 204
; SOURCE LINE # 206
003D E500 R MOV A,BES_Puls_Cnt
003F B40E04 CJNE A,#0EH,?C0016
; SOURCE LINE # 207
; SOURCE LINE # 208
0042 D282 SETB COM_CTRL
; SOURCE LINE # 209
0044 8002 SJMP ?C0011
0046 ?C0016:
; SOURCE LINE # 211
; SOURCE LINE # 212
0046 C282 CLR COM_CTRL
; SOURCE LINE # 213
; SOURCE LINE # 214
; SOURCE LINE # 215
0048 ?C0011:
; SOURCE LINE # 217
0048 0500 R INC BES_Puls_Cnt
; SOURCE LINE # 219
004A E500 R MOV A,BES_Puls_Cnt
004C C3 CLR C
004D 9417 SUBB A,#017H
004F 4005 JC ?C0019
; SOURCE LINE # 220
; SOURCE LINE # 221
0051 C200 R CLR BES_Puls_Start
; SOURCE LINE # 222
0053 750000 R MOV BES_Puls_Cnt,#00H
; SOURCE LINE # 223
; SOURCE LINE # 224
; SOURCE LINE # 225
; SOURCE LINE # 227
C51 COMPILER V9.57.0.0 SYS_TIM 06/14/2024 11:08:38 PAGE 10
0056 ?C0019:
0056 D0D0 POP PSW
0058 D0E0 POP ACC
005A 32 RETI
; FUNCTION tim0_Interrupt (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 176 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
IDATA SIZE = ---- ----
BIT SIZE = 6 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

468
Project/Listings/system.lst Normal file
View File

@ -0,0 +1,468 @@
C51 COMPILER V9.57.0.0 SYSTEM 06/14/2024 11:08:37 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE SYSTEM
OBJECT MODULE PLACED IN .\Objects\system.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\system\system.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..
-\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrI
-nc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\Us
-rInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\s
-ystem.lst) TABS(2) OBJECT(.\Objects\system.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file system.c
5 * @brief system module
6 *
7 *
8 * @version 1.0
9 * @date 2022/08/04 15:00:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/08/15 Alex build this file
18 * Attention:1、由于同一个Byte的中断标志位会分配在不同的中断中对于清中断标志位写1清不能用 |= <>
-枰<><E69EB0> =
19 例如IRQ_FLAG10 = 0x02; //Clear bit0,bit1 interrupt flag
20 2、外部中断0主要是用于系统唤醒功能中断处理函数中无需作逻辑功能处理必需预留接口
21 ******************************************************************************/
22 /*_____ I N C L U D E S ____________________________________________________*/
23
24 #include "system.h"
25 #include "gpio.h"
26 #include "adc.h"
27 #include "hall.h"
28 #include "key.h"
29 #include "sleep.h"
30 #include "uart.h"
31 #include "bat.h"
32 #include "sys_tim.h"
33 #include "charger_module.h"
34 #include "discharge_module.h"
35 #include "led.h"
36 #include "vox_module.h"
37 #include "watchdog.h"
38 #include "userapp.h"
39
40 /******************************************************************************\
41 Macro definitions
42 \******************************************************************************/
43
44 /******************************************************************************\
45 Variables definitions
46 \******************************************************************************/
47
48 /******************************************************************************\
49 Functions definitions
50 \******************************************************************************/
C51 COMPILER V9.57.0.0 SYSTEM 06/14/2024 11:08:37 PAGE 2
51
52
53 /*
54 *******************************************************************************
55 * void System_Init(void)
56 *
57 * Description : System Initialization
58 *
59 * Arguments : NONE
60
61 * Returns : NONE
62
63 * Notes : NONE
64 *
65 *******************************************************************************
66 */
67 void System_Init(void)
68 {
69 1 CLKPRE = 0x00; //frequency division: 2^0, 12M 后续根据系统功耗情况调整。
70 1
71 1 /* test开启IO LDO bias和增加100uA负载。*/
72 1 SFRADDR = 0x89;
73 1 SFRDATA |= 0x80;
74 1
75 1 /*test*/
76 1 SFRADDR = P0_PD;
77 1 SFRDATA &= ~0x03;
78 1
79 1 #if UART0_ENABLE
80 1
81 1 SFRADDR = P0_PU;
82 1 SFRDATA = 0x03;
83 1
84 1 //UART0_Init();
85 1 SFRADDR = MFP_CTL0;
86 1 SFRDATA = 0x05; //P01 as UART's TX,P00 as UART's RX
87 1
88 1 BD = 1; //Select additional Baudrate generator
89 1 PCON |= 0x80; //Baudrate double enable
90 1
91 1 //baudrate set
92 1 S0RELH = HIBYTE(S0REL_VALUE);
93 1 S0RELL = LOBYTE(S0REL_VALUE);//s0rel=1023, baudrate = fclk/32 = 187.5k
94 1
95 1 S0CON = 0xD0; //SCON: MODE 3, 9-bit UART, RI enable, EVEN Parity
96 1
97 1 TI0 = 1;
98 1 RI0 = 1;
99 1 ES0 = 1; //Enable UART0 IRQ
100 1
101 1 #endif
102 1
103 1 #if VOX_ENABLE
104 1 //Vox_init(); //上电后尽快初始化VOX为自动识别模式为后续识别VOX是否有LOADON做好准备。
105 1 VOX_CTL0 = 0xC3; //VOX 负载接入、存在识别功能使能负载自动识别。打开Vox vds钳压环使能主要用于VOX 5V
-输出)。
106 1 /*
107 1 SFRADDR = VOX_CON0; //设置VOX输出500mA负载识别电流2.5uA。
108 1 SFRDATA &= 0xE0;
109 1 SFRDATA |= (VOX_IOUT_500MA << 3) | VOX_ADT_Cur_2_5UA;
110 1 */
111 1 #endif
C51 COMPILER V9.57.0.0 SYSTEM 06/14/2024 11:08:37 PAGE 3
112 1
113 1 //Sys_Tim0_Init();
114 1 //TMOD &= 0xF0;
115 1 TMOD = 0x01; //mode 1, 16bit timer
116 1
117 1 TH0 = C_TIM0_Reload >> 8;
118 1 TL0 = C_TIM0_Reload & 0xFF;
119 1
120 1 ET0 = 1; //enable time0 interrupt
121 1 TR0 = 1; //time0 run
122 1
123 1 #if TIMER1_ENABLE
//Sys_Tim1_Init();
TMOD |= 0x10; //mode 1, 16bit timer
TH1 = C_TIM1_Reload >> 8;
TL1 = C_TIM1_Reload & 0xFF;
ET1 = 1; //enable time1 interrupt
TR1 = 1; //time1 run
#endif
136 1 /*test,set P1.0 output*/
137 1 #if 0
SFRADDR = P1_OE;
SFRDATA = 0x01;
P10 = 0;
#endif
142 1 /*COM_CTRL Set*/
143 1 SFRADDR = P0_OE;
144 1 SFRDATA = 0x0C; //COM_CTRL(P02)、LED(P03)配置为GPIO输出
145 1
146 1 // COM_CTRL = ON; //P02设置高用于VOUT设置低用于UART。
147 1
148 1 #ifdef LED_DISPLAY
149 1 // LED_Init(); // LED pin 配置为GPIO输出
150 1
151 1 SFRADDR = P0_DRV;
152 1 SFRDATA = 0x0C;
153 1
154 1 pin_LED_1 = 0;
155 1 #endif
156 1
157 1 #if WTG_ENABLE
158 1 /* 65ms */
159 1 WDTREL = 0x00; //WDTPS = 0,wdt_f = wdt_f1/2;WDTPS = 1,wdt_f = wdt_f1/32;
160 1 /* 1s */
161 1 // WDTREL = 0x80; //WDTPS = 0,wdt_f = wdt_f1/2;WDTPS = 1,wdt_f = wdt_f1/32;
162 1 #endif
163 1
164 1 #ifdef ADC_NTC_ENABLE
165 1
166 1 SFRADDR = MFP_CTL1; //Set P07 Pinmux As AD4 Function
167 1 SFRDATA |= 0x80;
168 1
169 1 SFRADDR = ADCCS_CTL0; //AD0~AD4 GPIO constant 20uA current source enable.
170 1 SFRDATA = 0x10;
171 1
172 1 #endif
173 1
C51 COMPILER V9.57.0.0 SYSTEM 06/14/2024 11:08:37 PAGE 4
174 1 /* Interrupt Enable 根据应用选择必要的中断 */
175 1 SFRADDR = IRQ_EN3; //INT2 --- VOX EDGE LOADON
176 1 SFRDATA = 0x3C;
177 1
178 1 SFRADDR = IRQ_EN10; //INT4 --- Hall interrupt enable.
179 1 SFRDATA = 0x0C;
180 1
181 1 /* 开外部中断使能 */
182 1 EX0 = 1;
183 1 EX2 = 1;
184 1 EX4 = 1;
185 1
186 1 EAL = 1; //开总中断。
187 1
188 1 IRQ_FLAG9 = 0x1C; //清 Charge complete Int、Tricle/Fast Charge Time expire Int
189 1 IRQ_FLAG10 = 0xC0; //清 VBUS Plugin\Plugout Int
190 1 IRQ_FLAG0 = 0x0C; //Vox短路保护
191 1
192 1 #if CHARGER_ENABLE
193 1
194 1 SFRADDR = PMU_CTL7; //合封芯片关闭VBUS OV检测使能
195 1 SFRDATA &= ~0x20;
196 1
197 1 CHG_CTL |= 0x10; //开启充电超时使能
198 1
199 1 SFRADDR = REG_CHG0;
200 1 SFRDATA |= 0x04; //关VDPM环
201 1
202 1 #endif
203 1
204 1 #if SLEEP_ENABLE
205 1 Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
206 1 #endif
207 1
208 1 }
209
210 /*
211 *******************************************************************************
212 * void EX0_isr(void ) interrupt Interrupt_Vector_IE0
213 *
214 * Description : System External Intterupt 0
215 *
216 * Arguments : NONE
217
218 * Returns : NONE
219
220 * Notes : NONE
221 *
222 *******************************************************************************
223 */
224 void EX0_isr(void) interrupt Interrupt_Vector_IE0
225 {
226 1
227 1 }
228
229 /*
230 *******************************************************************************
231 * void EX2_isr(void) interrupt Interrupt_Vector_IE2
232 *
233 * Description : System External Intterupt 2
234 *
235 * Arguments : NONE
C51 COMPILER V9.57.0.0 SYSTEM 06/14/2024 11:08:37 PAGE 5
236
237 * Returns : NONE
238
239 * Notes : NONE
240 *
241 *******************************************************************************
242 */
243
244 void EX2_isr(void) interrupt Interrupt_Vector_IE2
245 {
246 1 IRQ_FLAG3 = 0x3C;
247 1
248 1 #if SLEEP_ENABLE
249 1 // if( !Enter_Sleep_Cnt_Restart_Flag )
250 1 {
251 2 Enter_Sleep_Cnt_Restart_Flag = 1;
252 2 }
253 1 #endif
254 1 }
255
256 /*
257 *******************************************************************************
258 * void EX4_isr(void) interrupt Interrupt_Vector_IE4
259 *
260 * Description : System External Intterupt 4
261 *
262 * Arguments : NONE
263
264 * Returns : NONE
265
266 * Notes : NONE
267 *
268 *******************************************************************************
269 */
270 void EX4_isr(void) interrupt Interrupt_Vector_IE4
271 {
272 1
273 1 IRQ_FLAG10 = 0x0C;
274 1
275 1 #if SLEEP_ENABLE
276 1
277 1 //if( !Enter_Sleep_Cnt_Restart_Flag )
278 1 {
279 2 Enter_Sleep_Cnt_Restart_Flag = 1;
280 2 }
281 1
282 1 #endif
283 1 }
284
C51 COMPILER V9.57.0.0 SYSTEM 06/14/2024 11:08:37 PAGE 6
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION System_Init (BEGIN)
; SOURCE LINE # 67
; SOURCE LINE # 68
; SOURCE LINE # 69
0000 E4 CLR A
0001 F5D2 MOV CLKPRE,A
; SOURCE LINE # 72
0003 75FE89 MOV SFRADDR,#089H
; SOURCE LINE # 73
0006 43FF80 ORL SFRDATA,#080H
; SOURCE LINE # 76
0009 75FE01 MOV SFRADDR,#01H
; SOURCE LINE # 77
000C 53FFFC ANL SFRDATA,#0FCH
; SOURCE LINE # 81
000F F5FE MOV SFRADDR,A
; SOURCE LINE # 82
0011 75FF03 MOV SFRDATA,#03H
; SOURCE LINE # 85
0014 75FE0E MOV SFRADDR,#0EH
; SOURCE LINE # 86
0017 75FF05 MOV SFRDATA,#05H
; SOURCE LINE # 88
001A D2DF SETB BD
; SOURCE LINE # 89
001C 438780 ORL PCON,#080H
; SOURCE LINE # 92
001F 75BA03 MOV S0RELH,#03H
; SOURCE LINE # 93
0022 75AAFD MOV S0RELL,#0FDH
; SOURCE LINE # 95
0025 7598D0 MOV S0CON,#0D0H
; SOURCE LINE # 97
0028 D299 SETB TI0
; SOURCE LINE # 98
002A D298 SETB RI0
; SOURCE LINE # 99
002C D2AC SETB ES0
; SOURCE LINE # 105
002E 75B7C3 MOV VOX_CTL0,#0C3H
; SOURCE LINE # 115
0031 758901 MOV TMOD,#01H
; SOURCE LINE # 117
0034 758CFC MOV TH0,#0FCH
; SOURCE LINE # 118
0037 758A17 MOV TL0,#017H
; SOURCE LINE # 120
003A D2A9 SETB ET0
; SOURCE LINE # 121
003C D28C SETB TR0
; SOURCE LINE # 143
003E 75FE06 MOV SFRADDR,#06H
; SOURCE LINE # 144
0041 75FF0C MOV SFRDATA,#0CH
; SOURCE LINE # 151
0044 75FE03 MOV SFRADDR,#03H
; SOURCE LINE # 152
0047 75FF0C MOV SFRDATA,#0CH
; SOURCE LINE # 154
C51 COMPILER V9.57.0.0 SYSTEM 06/14/2024 11:08:37 PAGE 7
004A C283 CLR pin_LED_1
; SOURCE LINE # 159
004C F586 MOV WDTREL,A
; SOURCE LINE # 166
004E 75FE0F MOV SFRADDR,#0FH
; SOURCE LINE # 167
0051 43FF80 ORL SFRDATA,#080H
; SOURCE LINE # 169
0054 75FE4F MOV SFRADDR,#04FH
; SOURCE LINE # 170
0057 75FF10 MOV SFRDATA,#010H
; SOURCE LINE # 175
005A 75FE17 MOV SFRADDR,#017H
; SOURCE LINE # 176
005D 75FF3C MOV SFRDATA,#03CH
; SOURCE LINE # 178
0060 75FE1E MOV SFRADDR,#01EH
; SOURCE LINE # 179
0063 75FF0C MOV SFRDATA,#0CH
; SOURCE LINE # 182
0066 D2A8 SETB EX0
; SOURCE LINE # 183
0068 D2B9 SETB EX2
; SOURCE LINE # 184
006A D2BB SETB EX4
; SOURCE LINE # 186
006C D2AF SETB EAL
; SOURCE LINE # 188
006E 75F21C MOV IRQ_FLAG9,#01CH
; SOURCE LINE # 189
0071 75F3C0 MOV IRQ_FLAG10,#0C0H
; SOURCE LINE # 190
0074 75E80C MOV IRQ_FLAG0,#0CH
; SOURCE LINE # 194
0077 75FE87 MOV SFRADDR,#087H
; SOURCE LINE # 195
007A 53FFDF ANL SFRDATA,#0DFH
; SOURCE LINE # 197
007D 43B310 ORL CHG_CTL,#010H
; SOURCE LINE # 199
0080 75FE70 MOV SFRADDR,#070H
; SOURCE LINE # 200
0083 43FF04 ORL SFRDATA,#04H
; SOURCE LINE # 205
0086 75000A E MOV Decnt_SleepDelay,#0AH
; SOURCE LINE # 208
0089 22 RET
; FUNCTION System_Init (END)
; FUNCTION EX0_isr (BEGIN)
; SOURCE LINE # 224
; SOURCE LINE # 227
0000 32 RETI
; FUNCTION EX0_isr (END)
; FUNCTION EX2_isr (BEGIN)
; SOURCE LINE # 244
; SOURCE LINE # 246
0000 75EB3C MOV IRQ_FLAG3,#03CH
; SOURCE LINE # 250
; SOURCE LINE # 251
0003 D200 E SETB Enter_Sleep_Cnt_Restart_Flag
C51 COMPILER V9.57.0.0 SYSTEM 06/14/2024 11:08:37 PAGE 8
; SOURCE LINE # 252
; SOURCE LINE # 254
0005 32 RETI
; FUNCTION EX2_isr (END)
; FUNCTION EX4_isr (BEGIN)
; SOURCE LINE # 270
; SOURCE LINE # 273
0000 75F30C MOV IRQ_FLAG10,#0CH
; SOURCE LINE # 278
; SOURCE LINE # 279
0003 D200 E SETB Enter_Sleep_Cnt_Restart_Flag
; SOURCE LINE # 280
; SOURCE LINE # 283
0005 32 RETI
; FUNCTION EX4_isr (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 151 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

610
Project/Listings/uart.lst Normal file
View File

@ -0,0 +1,610 @@
C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\Objects\uart.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\uart\uart.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\Usr
-Inc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\k
-ey;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc
-\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\uart.
-lst) TABS(2) OBJECT(.\Objects\uart.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file uart.c
5 * @brief uart module
6 *
7 *
8 * @version 1.0
9 * @date 2022/12/14 15:00:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/12/14 Alex build this file
18 ******************************************************************************/
19 /*_____ I N C L U D E S ____________________________________________________*/
20 #include "uart.h"
21 #include "system.h"
22 #include "vox_module.h"
23
24
25 #if UART0_ENABLE
26
27 /******************************************************************************\
28 Macro definitions
29 \******************************************************************************/
30 #define NONE_PARITY 0 //无校验
31 #define ODD_PARITY 1 //奇校验
32 #define EVEN_PARITY 2 //偶校验
33 #define MARK_PARITY 3 //标记校验
34 #define SPACE_PARITY 4 //空白校验
35
36 #define PARITYBIT EVEN_PARITY //定义校验位
37
38 /******************************************************************************\
39 Variables definitions
40 \******************************************************************************/
41
42 bit busy0;
43
44 #ifdef VOX_RX
45 idata uint8_t RX0_Buffer[COM0_Data_Lenth] = 0; //接收缓冲
46 bit Uart0_RX_Finish_Flag = 0;
47 #endif
48
49 #endif
50
51 #ifdef _DEBUG_ALL
C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 2
char putchar(char c)
{
while(!TI0);
TI0 = 0;
return (S0BUF = c);
// Uart0SendData(c);
// return(c);
}
#endif
63
64 #if UART0_ENABLE
65
66 /*
67 *******************************************************************************
68 * void UART0_Init(void)
69 *
70 * Description : UART0 Initialization UART0用于debug、打印、透传功能
71 *
72 * Arguments : NONE
73
74 * Returns : NONE
75
76 * Notes : NONE
77 *
78 *******************************************************************************
79 */
80 #if 0
void UART0_Init(void)
{
SFRADDR = MFP_CTL0;
SFRDATA &= ~0x0C;
SFRDATA |= 0x04; //P01 as UART's TX
BD = 1; //Select additional Baudrate generator
PCON |= 0x80; //Baudrate double enable
//baudrate set
S0RELH = HIBYTE(S0REL_VALUE);
S0RELL = LOBYTE(S0REL_VALUE);//s0rel=1023, baudrate = fclk/32 = 187.5k
S0CON = 0xD0; //SCON: MODE 3, 9-bit UART, RI enable, EVEN Parity
TI0 = 1;
RI0 = 1;
ES0 = 1; //Enable UART0 IRQ
}
#endif
101 /*
102 *******************************************************************************
103 * void Uart0SendData(uint8_t Txdata)
104 *
105 * Description : UART0 Send Data
106 *
107 * Arguments : NONE
108
109 * Returns : NONE
110
111 * Notes : NONE
112 *
113 *******************************************************************************
C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 3
114 */
115 #if 0
void Uart0SendData(uint8_t Txdata)
{
while(busy0);
ACC = Txdata;
if (P) //根据P来设置校验位
{
#if (PARITYBIT == ODD_PARITY)
TB80 = 0; //设置校验位为0
#elif (PARITYBIT == EVEN_PARITY)
TB80 = 1; //设置校验位为1
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
TB80 = 1; //设置校验位为1
#elif (PARITYBIT == EVEN_PARITY)
TB80 = 0; //设置校验位为0
#endif
}
busy0 = 1;
S0BUF = ACC;
}
#endif
140
141 /*
142 *******************************************************************************
143 * void Uart0SendPacket(uint8_t Length,uint8_t *TransBuf)
144 *
145 * Description : UART0 Send Packet
146 *
147 * Arguments : NONE
148
149 * Returns : NONE
150
151 * Notes : NONE
152 *
153 *******************************************************************************
154 */
155 #ifdef VOX_TX
156
157 void Uart0SendPacket(uint16_t Length,uint8_t *TransBuf)
158 {
159 1 uint8_t i = 0;
160 1 for(i=0;i<Length;i++)
161 1 {
162 2 //Uart0SendData(*TransBuf++);
163 2
164 2 while(busy0);
165 2 ACC = *TransBuf++;
166 2 busy0 = 1;
167 2 S0BUF = ACC;
168 2 }
169 1 }
170 #endif
171
172 #endif
173
174 #if UART0_ENABLE
175
C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 4
176 #if defined(QIANCHENG) //岍丞
#define Vox_Comm_Data_Len 5
#elif defined(ZHONGKELANXUN) //中科蓝讯
#define Vox_Comm_Data_Len 5
#elif defined(XIAOMI)
185
186 #define Vox_Comm_Data_Len 7
187
188 #endif
189
190
191 /*uart0中断处理函数*/
192 void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI
193 {
194 1 static uint8_t Rx0Status;
195 1 #ifdef XIAOMI
196 1
197 1 static uint16_t RX0_Cnt;
198 1 static uint16_t RX0DataLen;
199 1
200 1 #else
static uint8_t RX0_Cnt;
static uint8_t RX0DataLen;
#endif
206 1 /*处理UART0发送中断*/
207 1 if(TI0)
208 1 {
209 2 TI0 = 0;
210 2 busy0 = 0;
211 2 }
212 1
213 1 /*处理UART0接收中断*/
214 1 if(RI0)
215 1 {
216 2 RI0 = 0;
217 2
218 2 #ifdef VOX_RX
219 2
220 2 #if defined(QIANCHENG) //岍丞
switch(Rx0Status)
{
case 0:
if(S0BUF == 0xA5)
{
Rx0Status = 1;
RX0_Cnt = 0;
RX0_Buffer[RX0_Cnt] = S0BUF;
RX0_Cnt++;
}
else
{
Rx0Status = 0;
C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 5
RX0_Cnt = 0;
}
break;
case 1:
RX0_Buffer[RX0_Cnt] = S0BUF;
RX0_Cnt++;
if( RX0_Cnt == Vox_Comm_Data_Len )
{
RX0DataLen = RX0_Buffer[4] + 5; //获取数据长度
}
if( (RX0DataLen == RX0_Cnt) || (RX0_Cnt > COM0_Data_Lenth) ) //当接收到的data个数等于RX0DataLen<EFBC8C>
-崾<>敬未<E695AC><EFBFBD>
{
RX0_Cnt = 0;
Rx0Status = 0;
Uart0_RX_Finish_Flag = 1;
}
}
#elif defined(ZHONGKELANXUN) //中科蓝讯
switch(Rx0Status)
{
case 0:
if( S0BUF == (BOXHEADER >> 8) )
{
Rx0Status = 1;
RX0_Cnt = 0;
RX0_Buffer[RX0_Cnt] = S0BUF;
RX0_Cnt++;
}
else
{
Rx0Status = 0;
RX0_Cnt = 0;
}
break;
case 1:
if(S0BUF == BOXHEADER)
{
Rx0Status = 2;
RX0_Buffer[RX0_Cnt] = S0BUF;
RX0_Cnt++;
}
else
{
Rx0Status = 0;
RX0_Cnt = 0;
}
C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 6
break;
case 1:
RX0_Buffer[RX0_Cnt] = S0BUF;
if(RX0DataLen == RX0_Cnt - 6)
{
RX0_Cnt = 0;
Rx0Status = 0;
Uart0_RX_Finish_Flag = 1;
}
else
{
RX0_Cnt++;
if(RX0_Cnt == 5)
{
RX0DataLen = RX0_Buffer[4]; //获取数据长度 length,length不包括Checksum
}
}
}
#elif defined(XIAOMI) //小米
321 2
322 2 switch(Rx0Status)
323 2 {
324 3 case 0:
325 3
326 3 if(S0BUF == 0xAA)
327 3 {
328 4 Rx0Status = 1;
329 4
330 4 RX0_Cnt = 0;
331 4
332 4 RX0_Buffer[RX0_Cnt] = S0BUF;
333 4
334 4 RX0_Cnt++;
335 4 }
336 3 else
337 3 {
338 4 Rx0Status = 0;
339 4
340 4 RX0_Cnt = 0;
341 4 }
342 3 break;
343 3
344 3 case 1:
345 3
346 3 RX0_Buffer[RX0_Cnt] = S0BUF;
347 3
348 3 RX0_Cnt++;
349 3
350 3 if( RX0_Cnt == Vox_Comm_Data_Len )
351 3 {
352 4 RX0DataLen = RX0_Buffer[5] | (RX0_Buffer[6] << 8) + 9; //获取数据长度Headr(1Byte) + Trandsmit Dir(1
-Byte) + CMD(2Bytes) + datalen(2Bytes) + CRC16(2Bytes)
353 4 }
354 3
355 3 if( (RX0DataLen == RX0_Cnt) || (RX0_Cnt > COM0_Data_Lenth) ) //当接收到的data个数等于RX0DataLen这结
-束本次传输。
356 3 {
357 4 RX0_Cnt = 0;
358 4 Rx0Status = 0;
C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 7
359 4 Uart0_RX_Finish_Flag = 1;
360 4 }
361 3 }
362 2
363 2
364 2
365 2 #endif
366 2
367 2 #endif
368 2 }
369 1 }
370
371 #endif
372
373
C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 8
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION Com0015 (BEGIN)
0000 L?0022:
0000 7400 R MOV A,#LOW RX0_Buffer
0002 2500 R ADD A,RX0_Cnt+01H
0004 F8 MOV R0,A
0005 A699 MOV @R0,S0BUF
0007 0500 R INC RX0_Cnt+01H
0009 E500 R MOV A,RX0_Cnt+01H
000B 22 RET
000C L?0023:
000C L?0024:
000C 750000 R MOV RX0_Cnt,#00H
000F 750000 R MOV RX0_Cnt+01H,#00H
0012 22 RET
; FUNCTION Com0015 (END)
; FUNCTION _Uart0SendPacket (BEGIN)
; SOURCE LINE # 157
0000 8E00 R MOV Length,R6
0002 8F00 R MOV Length+01H,R7
0004 8B00 R MOV TransBuf,R3
0006 8A00 R MOV TransBuf+01H,R2
0008 8900 R MOV TransBuf+02H,R1
; SOURCE LINE # 158
; SOURCE LINE # 159
;---- Variable 'i' assigned to Register 'R7' ----
000A E4 CLR A
000B FF MOV R7,A
; SOURCE LINE # 160
000C ?C0001:
000C EF MOV A,R7
000D C3 CLR C
000E 9500 R SUBB A,Length+01H
0010 E4 CLR A
0011 9500 R SUBB A,Length
0013 5016 JNC ?C0006
; SOURCE LINE # 161
0015 ?C0004:
; SOURCE LINE # 164
0015 2000FD R JB busy0,?C0004
; SOURCE LINE # 165
0018 7800 R MOV R0,#LOW TransBuf
001A E4 CLR A
001B 75F001 MOV B,#01H
001E 120000 E LCALL ?C?PLDIIDATA
0021 120000 E LCALL ?C?CLDPTR
; SOURCE LINE # 166
0024 D200 R SETB busy0
; SOURCE LINE # 167
0026 F599 MOV S0BUF,A
; SOURCE LINE # 168
0028 0F INC R7
0029 80E1 SJMP ?C0001
; SOURCE LINE # 169
002B ?C0006:
002B 22 RET
; FUNCTION _Uart0SendPacket (END)
; FUNCTION uart0_Interrupt (BEGIN)
C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 9
0000 C0E0 PUSH ACC
0002 C0D0 PUSH PSW
0004 75D000 MOV PSW,#00H
0007 C000 PUSH AR0
0009 C005 PUSH AR5
000B C006 PUSH AR6
000D C007 PUSH AR7
; SOURCE LINE # 192
; SOURCE LINE # 207
000F 309904 JNB TI0,?C0007
; SOURCE LINE # 208
; SOURCE LINE # 209
0012 C299 CLR TI0
; SOURCE LINE # 210
0014 C200 R CLR busy0
; SOURCE LINE # 211
0016 ?C0007:
; SOURCE LINE # 214
0016 309867 JNB RI0,?C0017
; SOURCE LINE # 215
; SOURCE LINE # 216
0019 C298 CLR RI0
; SOURCE LINE # 322
001B E500 R MOV A,Rx0Status
001D 14 DEC A
001E 601F JZ ?C0013
0020 04 INC A
0021 705D JNZ ?C0017
; SOURCE LINE # 323
; SOURCE LINE # 324
0023 ?C0010:
; SOURCE LINE # 326
0023 E599 MOV A,S0BUF
0025 B4AA0F CJNE A,#0AAH,?C0011
; SOURCE LINE # 327
; SOURCE LINE # 328
0028 750001 R MOV Rx0Status,#01H
; SOURCE LINE # 330
002B 120000 R LCALL L?0023
; SOURCE LINE # 332
; SOURCE LINE # 334
002E 120000 R LCALL L?0022
0031 7002 JNZ ?C0018
0033 0500 R INC RX0_Cnt
0035 ?C0018:
; SOURCE LINE # 335
0035 8049 SJMP ?C0017
0037 ?C0011:
; SOURCE LINE # 337
; SOURCE LINE # 338
0037 750000 R MOV Rx0Status,#00H
; SOURCE LINE # 340
003A 120000 R LCALL L?0023
; SOURCE LINE # 341
; SOURCE LINE # 342
003D 8041 SJMP ?C0017
; SOURCE LINE # 344
003F ?C0013:
; SOURCE LINE # 346
; SOURCE LINE # 348
003F 120000 R LCALL L?0022
0042 7002 JNZ ?C0019
C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 10
0044 0500 R INC RX0_Cnt
0046 ?C0019:
; SOURCE LINE # 350
0046 6407 XRL A,#07H
0048 4500 R ORL A,RX0_Cnt
004A 7015 JNZ ?C0014
; SOURCE LINE # 351
; SOURCE LINE # 352
004C 7800 R MOV R0,#LOW RX0_Buffer+06H
004E E6 MOV A,@R0
004F FE MOV R6,A
0050 E4 CLR A
0051 2409 ADD A,#09H
0053 FF MOV R7,A
0054 E4 CLR A
0055 3E ADDC A,R6
0056 FE MOV R6,A
0057 18 DEC R0
0058 E6 MOV A,@R0
0059 FD MOV R5,A
005A EE MOV A,R6
005B F500 R MOV RX0DataLen,A
005D EF MOV A,R7
005E 4D ORL A,R5
005F F500 R MOV RX0DataLen+01H,A
; SOURCE LINE # 353
0061 ?C0014:
; SOURCE LINE # 355
0061 E500 R MOV A,RX0DataLen+01H
0063 6500 R XRL A,RX0_Cnt+01H
0065 7004 JNZ ?C0020
0067 E500 R MOV A,RX0DataLen
0069 6500 R XRL A,RX0_Cnt
006B ?C0020:
006B 600B JZ ?C0016
006D D3 SETB C
006E E500 R MOV A,RX0_Cnt+01H
0070 940B SUBB A,#0BH
0072 E500 R MOV A,RX0_Cnt
0074 9400 SUBB A,#00H
0076 4008 JC ?C0017
0078 ?C0016:
; SOURCE LINE # 356
; SOURCE LINE # 357
0078 120000 R LCALL L?0024
; SOURCE LINE # 358
007B 750000 R MOV Rx0Status,#00H
; SOURCE LINE # 359
007E D200 R SETB Uart0_RX_Finish_Flag
; SOURCE LINE # 360
; SOURCE LINE # 361
; SOURCE LINE # 368
; SOURCE LINE # 369
0080 ?C0017:
0080 D007 POP AR7
0082 D006 POP AR6
0084 D005 POP AR5
0086 D000 POP AR0
0088 D0D0 POP PSW
008A D0E0 POP ACC
008C 32 RETI
; FUNCTION uart0_Interrupt (END)
C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 11
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 204 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 5
IDATA SIZE = 11 ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@ -0,0 +1,744 @@
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE USERAPP
OBJECT MODULE PLACED IN .\Objects\userapp.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\userapp\userapp.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(
-..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\Us
-rInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\
-UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings
-\userapp.lst) TABS(2) OBJECT(.\Objects\userapp.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file UserApp.c
5 * @brief UserApp module
6 *
7 *
8 * @version 1.0
9 * @date 2023/03/27 15:00:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2023/03/27 Alex build this file
18 ******************************************************************************/
19 /*_____ I N C L U D E S ____________________________________________________*/
20
21 #include "userapp.h"
22 #include "gpio.h"
23 #include "adc.h"
24 #include "hall.h"
25 #include "key.h"
26 #include "sleep.h"
27 #include "system.h"
28 #include "bat.h"
29 #include "sys_tim.h"
30 #include "charger_module.h"
31 #include "discharge_module.h"
32 #include "led.h"
33 #include "vox_module.h"
34
35 /******************************************************************************\
36 Macro definitions
37 \******************************************************************************/
38
39 /******************************************************************************\
40 Variables definitions
41 \******************************************************************************/
42
43 uint8_t LED_On_Timer = 0; //led亮时间计时
44 //uint8_t LED_On_Timer1 = 0; //led亮时间计时
45
46 bit led_blink_1time_flag = 0;
47
48 /******************************************************************************\
49 Functions definitions
50 \******************************************************************************/
51
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 2
52 /*****************************************************************************
53 * Function : void LED_Display_App(void)
54 * Description : 5ms调用周期
55 * Input : None
56 * Output : None
57 * Return : None
58 * Note : None
59 *****************************************************************************/
60 /*
61 充电:
62 1、充电中无其它行为打断时开关盒状态下都显示充电常亮灯效1Hz闪烁
63 2、充满常亮可被其它灯效打断
64
65 非充电:
66 1、首次使用开盖灯效①高电亮4s后灭②低电1Hz闪4s后灭
67 2、非首次使用开盖灯效①耳机在盒亮4s后灭②耳机不在盒
68 ③充电中,开盖闪一下,如何闪?亮多久后灭?
69 3、关盖灯效高电亮4s后灭低电1Hz闪4s后灭
70 4、关盒状态下无灯效显示
71
72 */
73 #ifdef LED_DISPLAY
74
75 void LED_Display_App(void)
76 {
77 1 #if 0
if( CoverEvent_Flg_led ) //Hall开关盒状态发送改变非充电高电LED亮4s灭、低电闪4次1Hz充电
-LED闪一下后进入1Hz闪烁。
{
#if 1
if( F_batlevel_low ) //盒子电池低电闪4次后灭。说明在系统上电期间由于Bat_level初始化为0Bat_leve
-l要等于ADC对应的电量值需要5s的debounce因此在上电期间开关盖灯效会不正确。
{
LED_R_FLASH(100,4);
CoverEvent_Flg_led = 0;
}
else
#endif
{
/*配对状态灯效显示*/
if( (CoverStatus == OPEN) && ( (Vox_Pairing_State[VOL_CHAN] != VOX_PAIR_NONE) || (Vox_Pairing_State[VOR
-_CHAN] != VOX_PAIR_NONE) ) ) /* 开盖状态,有耳机在仓。显示配对灯效 */
{
if( (Vox_Pairing_State[VOL_CHAN] == VOX_PAIR_ING) || (Vox_Pairing_State[VOR_CHAN] == VOX_PAIR_ING) )
- /*配对中LED闪频率2Hz*/
{
if (Display_Sta != LED_FLASH)
{
LED_R_KEEP_FLASHING(50);
}
LED_On_Timer = 0;
}
else
if( (Vox_Pairing_State[VOL_CHAN] == VOX_PAIR_OK) && (Vox_Pairing_State[VOR_CHAN] == VOX_PAIR_OK) ) /*
-配对成功*/
{
if( LED_On_Timer < LED_ON_CNT ) //配对成功LED亮4s后灭。
{
LED_On_Timer++;
LED_R_ON();
}
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 3
else
{
LED_R_OFF();
// CoverEvent_Flg_led = 0;
}
}
}
else
{
if ( (CHIP_STA4 & 0x80) && (CoverStatus == OPEN) ) //盒子充电中开盖,灯闪一下,无论当前灯是什么状态,
-灭100ms后恢复原来的灯效。
{
if( !led_blink_1time_flag ) //问题充电中LED灯效为1Hz闪烁如果这个灭100ms在闪的高电平中有效果
-,如果在闪的低电平中,没效果。
{
led_blink_1time_flag = 1;
LED_R_OFF();
CoverEvent_Flg_led = 0;
return;
}
}
if( LED_On_Timer < LED_ON_CNT ) //开关盖盒子非低电LED亮4s后灭。
{
LED_On_Timer++;
LED_R_ON();
}
else
{
LED_R_OFF();
if( CoverStatus == CLOSE )
{
CoverEvent_Flg_led = 0;
}
}
}
}
}
else
{
// 有充电时, LED闪烁
// 充电LED指示
if (CHIP_STA4 & 0x80)
{
if (Display_Sta != LED_FLASH) // 充电中LED闪烁
{
LED_R_KEEP_FLASHING(100);
}
}
else // 未充电, 则将其熄灭
{
LED_R_OFF();
}
}
#endif
163 1
164 1 if (CHIP_STA4 & 0x80) //充电中
165 1 {
166 2 if ( Charger_Done ) // 充电完成LED常亮
167 2 {
168 3 LED_R_ON();
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 4
169 3 }
170 2 else
171 2 {
172 3 if ( CoverEvent_Flg_led && (CoverStatus == OPEN) ) //盒子充电中开盖灯闪一下无论当前灯是什么状态<E68081>
-<2D>100ms后恢复原来的灯效。
173 3 {
174 4 if( !led_blink_1time_flag ) //问题充电中LED灯效为1Hz闪烁如果这个灭100ms在闪的高电平中有效果<E69588>
-<2D><EFBFBD>谏恋牡偷缙街校<E8A197>恍Ч<E6818D><D0A7>
175 4 {
176 5 led_blink_1time_flag = 1;
177 5 LED_R_OFF();
178 5 CoverEvent_Flg_led = 0;
179 5 return;
180 5 }
181 4 }
182 3
183 3 if (Display_Sta != LED_FLASH) // 充电中LED闪烁
184 3 {
185 4 LED_R_KEEP_FLASHING(100);
186 4 }
187 3 }
188 2 }
189 1 else
190 1 {
191 2 if( F_batlevel_low ) //盒子电池低电闪4次后灭。说明在系统上电期间由于Bat_level初始化为0Bat_leve
-l要等于ADC对应的电量值需要5s的debounce因此在上电期间开关盖灯效会不正确。
192 2 {
193 3 if (CoverEvent_Flg_led) // 充电中LED闪烁
194 3 {
195 4 LED_R_FLASH(100,4);
196 4 CoverEvent_Flg_led = 0;
197 4 }
198 3 }
199 2 else
200 2 {
201 3 /*配对状态灯效显示*/
202 3 if( (CoverStatus == OPEN) && ( (Vox_Pairing_State[VOL_CHAN] != VOX_PAIR_NONE) || (Vox_Pairing_State[VOR
-_CHAN] != VOX_PAIR_NONE) ) ) /* 开盖状态,有耳机在仓。显示配对灯效 */
203 3 {
204 4 if( (Vox_Pairing_State[VOL_CHAN] == VOX_PAIR_ING) || (Vox_Pairing_State[VOR_CHAN] == VOX_PAIR_ING) )
-/*配对中LED闪频率2Hz*/
205 4 {
206 5 if (Display_Sta != LED_FLASH)
207 5 {
208 6 LED_R_KEEP_FLASHING(50);
209 6 }
210 5 LED_On_Timer = 0;
211 5 Enter_Sleep_Cnt_Restart_Flag = 1;
212 5
213 5 }
214 4 else
215 4 if( (Vox_Pairing_State[VOL_CHAN] == VOX_PAIR_OK) && (Vox_Pairing_State[VOR_CHAN] == VOX_PAIR_OK) ) /*
-配对成功*/
216 4 {
217 5 if( LED_On_Timer < LED_ON_CNT ) //配对成功LED亮4s后灭。
218 5 {
219 6 LED_On_Timer++;
220 6 LED_R_ON();
221 6 }
222 5 else
223 5 {
224 6 LED_R_OFF();
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 5
225 6 }
226 5 }
227 4 }
228 3 else
229 3 {
230 4 if( LED_On_Timer < LED_ON_CNT ) //开关盖盒子非低电LED亮4s后灭。
231 4 {
232 5 LED_On_Timer++;
233 5 LED_R_ON();
234 5 }
235 4 else
236 4 {
237 5 LED_R_OFF();
238 5 }
239 4 }
240 3 }
241 2 }
242 1 }
243
244 #endif
245 /*****************************************************************************
246 * Function : UserAPP
247 * Description : 5ms调用周期
248 * Input : None
249 * Output : None
250 * Return : None
251 * Note : None
252 *****************************************************************************/
253 void UserAPP(void)
254 {
255 1 if( F_sys_tim_5ms )
256 1 {
257 2 F_sys_tim_5ms = 0;
258 2
259 2 #if KEY_HALL_ENABLE
260 2 //Key_Handler(); //按键检测
261 2 Hall_Handler(); //开关盖检测
262 2 #endif
263 2
264 2 #if DISCHARGE_ENABLE
265 2 DisCharge_Handler(); //放电boost功能
266 2 #endif
267 2
268 2 }
269 1
270 1 #ifdef LED_DISPLAY
271 1
272 1 if(F_sys_tim_10ms)
273 1 {
274 2 F_sys_tim_10ms = 0;
275 2 LED_Drv();
276 2 }
277 1
278 1 #endif
279 1
280 1 if( F_sys_tim_100ms )
281 1 {
282 2 F_sys_tim_100ms = 0;
283 2
284 2 Key_Handler();
285 2
286 2 #if CHARGER_ENABLE
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 6
287 2 Charger_Handler(); //充电功能
288 2 #endif
289 2
290 2 #if ADC_ENABLE
291 2 Vbat_Adc = Vbat_Value(); //获取Bat电压
292 2 #endif
293 2
294 2 #if VOX_ENABLE
295 2 Vox_Det_Machine(); //开关盖盒子功能逻辑。
296 2 #endif
297 2
298 2 #ifdef LED_DISPLAY
299 2 LED_Display_App(); //LED 灯效
300 2 #endif
301 2
302 2 #if BAT_VALUE
303 2 check_bat_level(); //电量计
304 2 #endif
305 2
306 2 #ifdef VOX_RX
307 2 HandleVoxCommMsg();
308 2 #endif
309 2 }
310 1
311 1 if( F_sys_tim_1s )
312 1 {
313 2 F_sys_tim_1s = 0;
314 2
315 2 #if SLEEP_ENABLE
316 2
317 2 /*1、唤醒后工作Ns后进入Sleep Mode,N需要大于100ms。
318 2 2、有VIN存在的情况下系不会进入sleep mode。
319 2 */
320 2
321 2 if( Decnt_SleepDelay > 0 ) /*能否在数字中实现此功能?*/
322 2 {
323 3 Decnt_SleepDelay--;
324 3
325 3 /*倒数进Sleep Mode过程中出现了KEY\HALL\Loadon\IOFF中断则重新计时。*/
326 3 if( Enter_Sleep_Cnt_Restart_Flag )
327 3 {
328 4 Enter_Sleep_Cnt_Restart_Flag = 0;
329 4 Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
330 4 }
331 3
332 3 return;
333 3 }
334 2
335 2 if( Check_Require_Sleep() )
336 2 {
337 3 /* 唤醒中断使能设置 */
338 3
339 3 //SFRADDR = WKUP_EN0;
340 3 //SFRDATA = 0xE6; //wake0 up enable.
341 3
342 3 //SFRADDR = WKUP_EN3;
343 3 //SFRDATA = 0xFF; //wake3 up enable.VOX loadon wake up.
344 3
345 3 /* Enter Sleep */
346 3 /* InSleep Handler */ //Disable All IRQ
347 3 #if UART0_ENABLE
348 3 ES0 = 0; //UART0 IRQ Disable
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 7
349 3 #endif
350 3 EX4 = 0;
351 3 EX2 = 0;
352 3 ET0 = 0; //timer0 IRQ Disable
353 3 #if TIMER1_ENABLE
ET1 = 0; //timer1 IRQ Disable
#endif
356 3
357 3 SFRADDR = ADC_CTL0;
358 3 SFRDATA &= ~0x80; //ADC Disable.
359 3
360 3 PCON |= 0x02; //Enter StandbyMode, Only int0 or int1 can wake up system
361 3
362 3 /* OutSleep Handler */ //Enable IRQ
363 3 #if UART0_ENABLE
364 3 ES0 = 1; //UART0 IRQ
365 3 #endif
366 3 EX4 = 1;
367 3 EX2 = 1;
368 3 ET0 = 1; //timer0 IRQ
369 3 #if TIMER1_ENABLE
ET1 = 1; //timer1 IRQ
#endif
372 3 Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
373 3 }
374 2 else
375 2 {
376 3 Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
377 3 }
378 2 #endif
379 2 }
380 1 }
381
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 8
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION LED_Display_App (BEGIN)
; SOURCE LINE # 75
; SOURCE LINE # 76
; SOURCE LINE # 164
0000 E5E6 MOV A,CHIP_STA4
0002 30E729 JNB ACC.7,?C0001
; SOURCE LINE # 165
; SOURCE LINE # 166
0005 300002 E JNB Charger_Done,?C0002
; SOURCE LINE # 167
; SOURCE LINE # 168
; SOURCE LINE # 169
0008 807A SJMP ?C0033
000A ?C0002:
; SOURCE LINE # 171
; SOURCE LINE # 172
000A 300010 E JNB CoverEvent_Flg_led,?C0004
000D E500 E MOV A,CoverStatus
000F B4010B CJNE A,#01H,?C0004
; SOURCE LINE # 173
; SOURCE LINE # 174
0012 200008 R JB led_blink_1time_flag,?C0004
; SOURCE LINE # 175
; SOURCE LINE # 176
0015 D200 R SETB led_blink_1time_flag
; SOURCE LINE # 177
0017 E4 CLR A
0018 FB MOV R3,A
0019 FD MOV R5,A
001A FF MOV R7,A
; SOURCE LINE # 178
001B 801D SJMP ?C0034
; SOURCE LINE # 180
; SOURCE LINE # 181
001D ?C0004:
; SOURCE LINE # 183
001D 7800 E MOV R0,#LOW Display_Sta
001F E6 MOV A,@R0
0020 6402 XRL A,#02H
0022 7002 JNZ $ + 4H
0024 0100 R AJMP ?C0006
; SOURCE LINE # 184
; SOURCE LINE # 185
0026 7BFF MOV R3,#0FFH
0028 7D64 MOV R5,#064H
002A 7F02 MOV R7,#02H
; SOURCE LINE # 186
; SOURCE LINE # 187
; SOURCE LINE # 188
002C 8077 SJMP ?C0038
002E ?C0001:
; SOURCE LINE # 190
; SOURCE LINE # 191
002E 30000F E JNB F_batlevel_low,?C0009
; SOURCE LINE # 192
; SOURCE LINE # 193
0031 300074 E JNB CoverEvent_Flg_led,?C0006
; SOURCE LINE # 194
; SOURCE LINE # 195
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 9
0034 7B04 MOV R3,#04H
0036 7D64 MOV R5,#064H
0038 7F02 MOV R7,#02H
003A ?C0034:
003A 120000 E LCALL _LED_Set
; SOURCE LINE # 196
003D C200 E CLR CoverEvent_Flg_led
; SOURCE LINE # 197
; SOURCE LINE # 198
003F 22 RET
0040 ?C0009:
; SOURCE LINE # 200
; SOURCE LINE # 202
0040 E500 E MOV A,CoverStatus
0042 6401 XRL A,#01H
0044 704B JNZ ?C0012
0046 E500 E MOV A,Vox_Pairing_State+024H
0048 7004 JNZ ?C0013
004A E500 E MOV A,Vox_Pairing_State+025H
004C 6043 JZ ?C0012
004E ?C0013:
; SOURCE LINE # 203
; SOURCE LINE # 204
004E E500 E MOV A,Vox_Pairing_State+024H
0050 6401 XRL A,#01H
0052 6005 JZ ?C0015
0054 E500 E MOV A,Vox_Pairing_State+025H
0056 B40116 CJNE A,#01H,?C0014
0059 ?C0015:
; SOURCE LINE # 205
; SOURCE LINE # 206
0059 7800 E MOV R0,#LOW Display_Sta
005B E6 MOV A,@R0
005C 6402 XRL A,#02H
005E 6009 JZ ?C0016
; SOURCE LINE # 207
; SOURCE LINE # 208
0060 7BFF MOV R3,#0FFH
0062 7D32 MOV R5,#032H
0064 7F02 MOV R7,#02H
0066 120000 E LCALL _LED_Set
; SOURCE LINE # 209
0069 ?C0016:
; SOURCE LINE # 210
0069 E4 CLR A
006A F500 R MOV LED_On_Timer,A
; SOURCE LINE # 211
006C D200 E SETB Enter_Sleep_Cnt_Restart_Flag
; SOURCE LINE # 213
006E 22 RET
006F ?C0014:
; SOURCE LINE # 215
006F E500 E MOV A,Vox_Pairing_State+024H
0071 6402 XRL A,#02H
0073 7033 JNZ ?C0006
0075 E500 E MOV A,Vox_Pairing_State+025H
0077 6402 XRL A,#02H
0079 702D JNZ ?C0006
; SOURCE LINE # 216
; SOURCE LINE # 217
007B E500 R MOV A,LED_On_Timer
007D C3 CLR C
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 10
007E 9428 SUBB A,#028H
0080 5009 JNC ?C0019
; SOURCE LINE # 218
; SOURCE LINE # 219
0082 0500 R INC LED_On_Timer
; SOURCE LINE # 220
0084 ?C0033:
0084 E4 CLR A
0085 FB MOV R3,A
0086 FD MOV R5,A
0087 7F01 MOV R7,#01H
0089 ?C0035:
; SOURCE LINE # 221
0089 801A SJMP ?C0038
008B ?C0019:
; SOURCE LINE # 223
; SOURCE LINE # 224
008B E4 CLR A
008C FB MOV R3,A
008D FD MOV R5,A
008E FF MOV R7,A
008F ?C0036:
; SOURCE LINE # 225
; SOURCE LINE # 226
; SOURCE LINE # 227
008F 8014 SJMP ?C0038
0091 ?C0012:
; SOURCE LINE # 229
; SOURCE LINE # 230
0091 E500 R MOV A,LED_On_Timer
0093 C3 CLR C
0094 9428 SUBB A,#028H
0096 5009 JNC ?C0022
; SOURCE LINE # 231
; SOURCE LINE # 232
0098 0500 R INC LED_On_Timer
; SOURCE LINE # 233
009A E4 CLR A
009B FB MOV R3,A
009C FD MOV R5,A
009D 7F01 MOV R7,#01H
009F ?C0037:
; SOURCE LINE # 234
009F 8004 SJMP ?C0038
00A1 ?C0022:
; SOURCE LINE # 236
; SOURCE LINE # 237
00A1 E4 CLR A
00A2 FB MOV R3,A
00A3 FD MOV R5,A
00A4 FF MOV R7,A
00A5 ?C0038:
00A5 120000 E LCALL _LED_Set
; SOURCE LINE # 238
; SOURCE LINE # 239
; SOURCE LINE # 240
; SOURCE LINE # 241
; SOURCE LINE # 242
00A8 ?C0006:
00A8 22 RET
; FUNCTION LED_Display_App (END)
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 11
; FUNCTION UserAPP (BEGIN)
; SOURCE LINE # 253
; SOURCE LINE # 254
; SOURCE LINE # 255
0000 300008 E JNB F_sys_tim_5ms,?C0024
; SOURCE LINE # 256
; SOURCE LINE # 257
0003 C200 E CLR F_sys_tim_5ms
; SOURCE LINE # 261
0005 120000 E LCALL Hall_Handler
; SOURCE LINE # 265
0008 120000 E LCALL DisCharge_Handler
; SOURCE LINE # 268
000B ?C0024:
; SOURCE LINE # 272
000B 300005 E JNB F_sys_tim_10ms,?C0025
; SOURCE LINE # 273
; SOURCE LINE # 274
000E C200 E CLR F_sys_tim_10ms
; SOURCE LINE # 275
0010 120000 E LCALL LED_Drv
; SOURCE LINE # 276
0013 ?C0025:
; SOURCE LINE # 280
0013 30001E E JNB F_sys_tim_100ms,?C0026
; SOURCE LINE # 281
; SOURCE LINE # 282
0016 C200 E CLR F_sys_tim_100ms
; SOURCE LINE # 284
0018 120000 E LCALL Key_Handler
; SOURCE LINE # 287
001B 120000 E LCALL Charger_Handler
; SOURCE LINE # 291
001E 120000 E LCALL Vbat_Value
0021 7800 E MOV R0,#LOW Vbat_Adc
0023 A606 MOV @R0,AR6
0025 08 INC R0
0026 A607 MOV @R0,AR7
; SOURCE LINE # 295
0028 120000 E LCALL Vox_Det_Machine
; SOURCE LINE # 299
002B 120000 R LCALL LED_Display_App
; SOURCE LINE # 303
002E 120000 E LCALL check_bat_level
; SOURCE LINE # 307
0031 120000 E LCALL HandleVoxCommMsg
; SOURCE LINE # 309
0034 ?C0026:
; SOURCE LINE # 311
0034 300035 E JNB F_sys_tim_1s,?C0030
; SOURCE LINE # 312
; SOURCE LINE # 313
0037 C200 E CLR F_sys_tim_1s
; SOURCE LINE # 321
0039 E500 E MOV A,Decnt_SleepDelay
003B D3 SETB C
003C 9400 SUBB A,#00H
003E 4009 JC ?C0028
; SOURCE LINE # 322
; SOURCE LINE # 323
0040 1500 E DEC Decnt_SleepDelay
; SOURCE LINE # 326
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 12
0042 300027 E JNB Enter_Sleep_Cnt_Restart_Flag,?C0030
; SOURCE LINE # 327
; SOURCE LINE # 328
0045 C200 E CLR Enter_Sleep_Cnt_Restart_Flag
; SOURCE LINE # 329
; SOURCE LINE # 330
0047 8020 SJMP ?C0040
; SOURCE LINE # 333
0049 ?C0028:
; SOURCE LINE # 335
0049 120000 E LCALL Check_Require_Sleep
004C 501B JNC ?C0031
; SOURCE LINE # 336
; SOURCE LINE # 348
004E C2AC CLR ES0
; SOURCE LINE # 350
0050 C2BB CLR EX4
; SOURCE LINE # 351
0052 C2B9 CLR EX2
; SOURCE LINE # 352
0054 C2A9 CLR ET0
; SOURCE LINE # 357
0056 75FE29 MOV SFRADDR,#029H
; SOURCE LINE # 358
0059 53FF7F ANL SFRDATA,#07FH
; SOURCE LINE # 360
005C 438702 ORL PCON,#02H
; SOURCE LINE # 364
005F D2AC SETB ES0
; SOURCE LINE # 366
0061 D2BB SETB EX4
; SOURCE LINE # 367
0063 D2B9 SETB EX2
; SOURCE LINE # 368
0065 D2A9 SETB ET0
; SOURCE LINE # 372
0067 ?C0039:
; SOURCE LINE # 373
0067 8000 SJMP ?C0040
0069 ?C0031:
; SOURCE LINE # 375
; SOURCE LINE # 376
0069 ?C0040:
0069 75000A E MOV Decnt_SleepDelay,#0AH
; SOURCE LINE # 377
; SOURCE LINE # 379
; SOURCE LINE # 380
006C ?C0030:
006C 22 RET
; FUNCTION UserAPP (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 278 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILER V9.57.0.0 USERAPP 06/14/2024 11:10:29 PAGE 13
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,130 @@
C51 COMPILER V9.57.0.0 WATCHDOG 06/14/2024 11:08:38 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE WATCHDOG
OBJECT MODULE PLACED IN .\Objects\watchdog.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\watchdog\watchdog.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDI
-R(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\
-UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;.
-.\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listin
-gs\watchdog.lst) TABS(2) OBJECT(.\Objects\watchdog.obj)
line level source
1 /*
2 ******************************************************************************
3 *
4 * @file watchdog.c
5 * @brief watchdog module
6 *
7 *
8 * @version 1.0
9 * @date 2022/08/04 15:00:40
10 * @author Alex Xu
11 *
12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
13 * All Rights Reserved
14 *
15 * History:
16 * Revision Date Author Desc
17 * 1.0.0 2022/08/04 Alex build this file
18 ******************************************************************************/
19 /*_____ I N C L U D E S ____________________________________________________*/
20 #include "watchdog.h"
21 #if 0
/*_____ D E F I N I T I O N S ______________________________________________*/
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*_____ F U N C T I O N S __________________________________________________*/
/*
*******************************************************************************
* void Watchdog_Init(uint8_t watchdog_time)
*
* Description : watchdog Initialization. WDT_TM = 0则看门狗时钟为系统时钟的12分频否则为系统时钟。
wdtrel.7=1 则看门狗计数器时钟为Sys_Fre/12*32wdtrel.7=0 则看门狗计数器时钟为Sys_Fre/12*2.
Sys_Fre = 12MHzwdtrel.7=0时定时器范围
(1/Sys_Fre)*12*2*256~(1/Sys_Fre)*12*2*256*128 = 5ms~65ms
Sys_Fre = 12MHzwdtrel.7=1时定时器范围
(1/Sys_Fre)*12*32*256~(1/Sys_Fre)*12*32*256*128 = 80ms~1s
C51 COMPILER V9.57.0.0 WATCHDOG 06/14/2024 11:08:38 PAGE 2
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void Watchdog_Init(uint8_t watchdog_time)
{
switch(watchdog_time)
{
case _WDT_TIME_65ms_:
WDTREL = 0x00; //WDTPS = 0,wdt_f = wdt_f1/2;WDTPS = 1,wdt_f = wdt_f1/32;
break;
case _WDT_TIME_1s_:
WDTREL = 0x80; //WDTPS = 0,wdt_f = wdt_f1/2;WDTPS = 1,wdt_f = wdt_f1/32;
break;
}
SWDT = 1; //Watchdog Start
}
/*
*******************************************************************************
* void Watchdog_Clear(void)
*
* Description : Feed watchdog 在系统初始化时未进行看门狗初始化,则不能在程序中进行喂狗操作!!!
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void Watchdog_Clear(void)
{
WDT = 1;
SWDT = 1;
}
#endif
C51 COMPILER V9.57.0.0 WATCHDOG 06/14/2024 11:08:38 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = ---- ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@ -0,0 +1,2 @@
[EXTDLL]
Count=0

BIN
Project/Objects/STARTUP.obj Normal file

Binary file not shown.

1
Project/Objects/adc.__i Normal file
View File

@ -0,0 +1 @@
"..\UsrSrc\adc\adc.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\adc.lst) TABS (2) OBJECT(.\Objects\adc.obj)

BIN
Project/Objects/adc.obj Normal file

Binary file not shown.

1
Project/Objects/bat.__i Normal file
View File

@ -0,0 +1 @@
"..\UsrSrc\bat\bat.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\bat.lst) TABS (2) OBJECT(.\Objects\bat.obj)

BIN
Project/Objects/bat.obj Normal file

Binary file not shown.

0
Project/Objects/bin.bin Normal file
View File

View File

@ -0,0 +1 @@
"..\UsrSrc\charger\charger_module.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\charger_module.lst) TABS (2) OBJECT(.\Objects\charger_module.obj)

Binary file not shown.

View File

@ -0,0 +1,14 @@
@echo off
ECHO Add CRC16 At the end of the document
ECHO -------------------------------------
SET SREC_PATH=D:\Keil_v5\SREC
for /f %%i in ('dir /s /b .\Objects\bin.bin') do (
set indexdx=%%~zi
)
ECHO --- size= %indexdx% Byte----
ECHO %SREC_PATH%\srec_cat.exe .\Objects\bin.bin -Binary -crop 0 %indexdx% -CRC16_Big_Endian %indexdx% -XMODEM -o .\Objects\bin_crc.bin -Binary
%SREC_PATH%\srec_cat.exe .\Objects\bin.bin -Binary -crop 0 %indexdx% -CRC16_Big_Endian %indexdx% -XMODEM -o .\Objects\bin_crc.bin -Binary

View File

@ -0,0 +1 @@
"..\UsrSrc\discharge\discharge_module.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\discharge_module.lst) TABS (2) OBJECT(.\Objects\discharge_module.obj)

Binary file not shown.

1
Project/Objects/gpio.__i Normal file
View File

@ -0,0 +1 @@
"..\UsrSrc\gpio\gpio.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\gpio.lst) TABS (2) OBJECT(.\Objects\gpio.obj)

BIN
Project/Objects/gpio.obj Normal file

Binary file not shown.

1
Project/Objects/hall.__i Normal file
View File

@ -0,0 +1 @@
"..\UsrSrc\hall\hall.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\hall.lst) TABS (2) OBJECT(.\Objects\hall.obj)

BIN
Project/Objects/hall.obj Normal file

Binary file not shown.

Binary file not shown.

1
Project/Objects/key.__i Normal file
View File

@ -0,0 +1 @@
"..\UsrSrc\key\key.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\key.lst) TABS (2) OBJECT(.\Objects\key.obj)

BIN
Project/Objects/key.obj Normal file

Binary file not shown.

1
Project/Objects/led.__i Normal file
View File

@ -0,0 +1 @@
"..\UsrSrc\led\led.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\led.lst) TABS (2) OBJECT(.\Objects\led.obj)

BIN
Project/Objects/led.obj Normal file

Binary file not shown.

1
Project/Objects/main.__i Normal file
View File

@ -0,0 +1 @@
"..\UsrSrc\main.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\main.lst) TABS (2) OBJECT(.\Objects\main.obj)

BIN
Project/Objects/main.obj Normal file

Binary file not shown.

BIN
Project/Objects/mcu Normal file

Binary file not shown.

View File

@ -0,0 +1,43 @@
<html>
<body>
<pre>
<h1>µVision Build Log</h1>
<h2>Tool Versions:</h2>
IDE-Version: ¦ÌVision V5.30.0.0
Copyright (C) 2020 ARM Ltd and ARM Germany GmbH. All rights reserved.
License Information: Alex Xu, 11111, LIC=D0MW3-APQZV-3AGDP-M9Z84-PG19P-UP7ZC
Tool Versions:
Toolchain: PK51 Prof. Developers Kit Version: 9.57.0.0
Toolchain Path: D:\Keil_v5\C51\BIN
C Compiler: C51.exe V9.57.0.0
Assembler: A51.exe V8.2.7.0
Linker/Locator: BL51.exe V6.22.2.0
Library Manager: LIB51.exe V4.30.1.0
Hex Converter: OH51.exe V2.7.0.0
CPU DLL: S8051.DLL V3.113.0.0
Dialog DLL: DCore51.DLL V2.81.6.0
Target DLL: SY8831.dll V1.00
Dialog DLL: TCore51.DLL V2.66.4.0
<h2>Project:</h2>
E:\todaywork\20240325_tp3310\Both_Way_Comm_SY8833\zklxun_SY8833\Project\TP3102_Demo.uvproj
Project File Date: 06/14/2024
<h2>Output:</h2>
Build target 'Target 1'
compiling userapp.c...
linking...
Program Size: data=159.0 xdata=0 code=3796
creating hex file from ".\Objects\mcu"...
User command #2: .\Objects\hex2bin_TP.exe .\Objects\mcu.hex .\Objects\bin.bin 3 0
Traceback (most recent call last):
File "main.py", line 76, in <module>
File "main.py", line 56, in hex2bin
IndexError: list assignment index out of range
[25276] Failed to execute script 'main' due to unhandled exception!
".\Objects\mcu" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:01
</pre>
</body>
</html>

285
Project/Objects/mcu.hex Normal file
View File

@ -0,0 +1,285 @@
:030000000208985B
:10089800758E3075D20078FFE4F6D8FD75819D021B
:0208A80008E561
:0F0EBE001209B7D2AED2BE120C34120A4180F420
:0405EF00029900006D
:020D6B00AD07D2
:100D6D00E4FCFBFAF527F52875FE2975FF8BEDC41C
:100D7D0054F04401F5A5E5A520E0FBAFA1AB07AF0D
:100D8D00A2EFFEEEFAEB2528F528EA3527F5270C1C
:100D9D00BC08DBE528AE277803CEC313CE13D8F9F4
:010DAD00FF46
:010DAE002222
:100DAF00E4F524F5257F05120D6B8E248F257F0624
:100DBF00120D6BE4FCFDC004A905AA06AB07AE2417
:100DCF00AF257C077DD0120271D0001201A98E24AD
:020DDF008F255E
:010DE10022EF
:100DE200E4F525F5267F04120D6B8E258F267F06EE
:100DF200120D6BE4FCFDC004A905AA06AB07AE25E3
:100E0200AF267C037DE8120271D0001201A98E2563
:020E12008F2629
:010E140022BB
:0605F300C114C116C11580
:10078900E4FFFE752401120DE2C3EF9474EE940E9A
:1007990040037F0122E5E630E757D3EF9436EE9424
:1007A900055030EF9422EE94024028301612EF944F
:1007B90014EE94055007C2167524018003E4F5244C
:1007C90030152ED3EF9444EE94024022C2157524BD
:1007D90001801ED3EF9436EE94054004D216800BA7
:1007E900C3EF9422EE94025002D21553B3FEE4F5FE
:0307F90024AF2406
:0107FC0022DA
:100BDF00E5E620E70953B3FE75F210C21422E5F2E1
:100BEF00540C601053B3FEE5F354C0603775F20C2C
:100BFF0075F3C022E5F354C0600375F3C012078983
:100C0F00EF6021E5F230E417C3789AE694EB18E62B
:100C1F00940F500575F210800353B3FED214224384
:050C2F00B301C2142214
:0405F900C117C1184D
:100D2500E5E530E103C21722E5E230E705C217D257
:100D35001822E5E830E00EC217300B29C20B75E822
:100D45000175B50122D21730181BE5E630E716C349
:100D5500789AE6941018E6940E4005D217C2182228
:060D6500E4F5B5C21722FF
:0705FD00011DFFC119C11A25
:100E4100E5E230E425E5E25408FF651D601CE5E2BA
:100E510030E305751C018005E4F51CC21ED219D2D0
:0A0E61001AE4F51FF540F5418F1D5E
:010E6B002264
:0B060400C113C111C110C112019D0003
:100E6C00301208C211C212789D7602301006C210E0
:0E0E7C00789D7603301306C213789D7601220E
:03060F000198004F
:10000E007893A607EDC31308F608A60508A603E421
:03001E0008F622BF
:100CD8007893E6603D24FE6007047036D283803442
:100CE8007897E6FFC37894965004D2838002C28333
:100CF800EFC3789596401DE47897F618E6FFF46000
:100D080013EFD394004001167896E670077893F6AF
:0D0D18008002C2837893E67898F6180622D0
:05061200011E00C11DE6
:100E9D00E5E620E706200903301D04C21DC322D359
:010EAD002222
:1009B700E4F5D275FE8943FF8075FE0153FFFCF510
:1009C700FE75FF0375FE0E75FF05D2DF4387807541
:1009D700BA0375AAFD7598D0D299D298D2AC75B7DB
:1009E700C3758901758CFC758A17D2A9D28C75FEDF
:1009F7000675FF0C75FE0375FF0CC283F58675FE41
:100A07000F43FF8075FE4F75FF1075FE1775FF3C8E
:100A170075FE1E75FF0CD2A8D2B9D2BBD2AF75F244
:100A27001C75F3C075E80C75FE8753FFDF43B310E1
:0A0A370075FE7043FF04751E0A22CD
:03000300020006F2
:0100060032C7
:03004B00020ED8CA
:060ED80075EB3CD21D3257
:03005B00020EDEB4
:060EDE0075F30CD21D3279
:0F0617000B880000000000000000000000C11C64
:100E8A0074882553F8A6990553E5532275520075BF
:030E9A00530022E0
:0A0E15008E358F368B378A38893905
:100E1F00E4FFEFC39536E495355016201BFD783768
:100E2F00E475F00112023B120154D21BF5990F80A9
:010E3F00E1D1
:010E4000228F
:0300230002092AA5
:0F092A00C0E0C0D075D000C000C005C006C00737
:10093900309904C299C21B309867C298E551146076
:100949001F04705DE599B4AA0F755101120E961234
:100959000E8A700205528049755100120E96804127
:10096900120E8A70020552640745527015788EE698
:10097900FEE42409FFE43EFE18E6FDEEF554EF4DD2
:10098900F555E55565537004E5546552600BD3E59B
:1009990053940BE55294004008120E96755100D2FB
:0109A9001C31
:0D09AA00D007D006D005D000D0D0D0E0326C
:05062600011F00C11ED0
:1006E000E5E630E729301402807A301A10E51CB4B0
:1006F000010B201E08D21EE4FBFDFF801D7898E64A
:1007000064027002E1887BFF7D647F028077301F86
:100710000F301A747B047D647F0212000EC21A220D
:10072000E51C6401704BE56B7004E56C6043E56BA0
:1007300064016005E56CB401167898E6640260090E
:100740007BFF7D327F0212000EE4F51FD21D22E5F1
:100750006B64027033E56C6402702DE51FC394284E
:100760005009051FE4FBFD7F01801AE4FBFDFF80BB
:1007700014E51FC394285009051FE4FBFD7F018089
:0907800004E4FBFDFF12000E224F
:100A4100300C08C20C120E41120D25300F05C20FD9
:100A5100120CD8300A1EC20A120E6C120BDF120DD4
:100A6100AF7899A60608A60712029E1206E0120B9D
:100A71001B120C89300D35C20DE51ED394004009BF
:100A8100151E301D27C21D8020120E9D501BC2ACA9
:100A9100C2BBC2B9C2A975FE2953FF7F438702D2E7
:0D0AA100ACD2BBD2B9D2A98000751E0A22CA
:0B004E000000000000000000000000A7
:10062B00C109C105C108C102C104C100C106014213
:10063B000002450000014400014300C101024700D4
:10064B0000027000000672000000000000087A0033
:10065B0000000000000000028400000256000002AF
:10066B00780000028600000282000002580000168B
:10067B005A00000000000000000000000000000015
:10068B0000000000000000013F00C1030240000019
:02069B00C10795
:10002600FF547FF6EFC4131313540122C208D20102
:10003600E4F544D20522FF5401F6EFC3135401221E
:100EAE00D282EF700753B7CF43B7302253B7CF225A
:10029E00E5E8540C60110542E542C394024008E4BF
:1002AE00F54275E80C8109301960301758200606A2
:1002BE0075B501D20622E4F56BF56CC205C200F5E8
:1002CE0045F546E51C7011D202C204C219D209C20C
:1002DE0006C28243B7308032C202C208C3E54194DF
:1002EE0002E5409400500FE4FF120EAE0541E541C9
:1002FE00701805408014E4F5B5D204C219C206F593
:10030E0040F54180057F01120EAE30042AC3E5414F
:10031E009458E5409402501AE54120E0047D248073
:10032E00027D257F0D12048F0541E54170090540C0
:10033E008005E4FF120EAE2002052000028184C368
:10034E00E5419432E54094005031E54120E00F3014
:10035E0000047D24800DE51C70187D24800F300074
:10036E00067D257F058008E51C70077D257F0D1213
:10037E00048F0541E541700205402230000DC20098
:10038E00C202C209E4F5B57F0181192002028184FF
:10039E00E5E354AC64AC6003301F12C3E5469458D9
:1003AE00E54594024007D200E4F540F54120072EC2
:1003BE00C3E5419464E5409400501AE54120E00401
:1003CE007D2480027D257F0E12048F0541E541704C
:1003DE000D05408009D207D208E4F540F5413008FA
:1003EE0050E544C3940150097D2412048508F6801B
:1003FE0030E543D394054006120032FF800D789409
:10040E00E6601208E66007120032FF020EAE7D258E
:10041E00120485800C7895E660077D247F0A12040D
:10042E008FE544D3941E40070543E4F5448002054E
:10043E00443005210541E54170020540D39414E591
:10044E004094004010C205E4F544F543D2827D216C
:10045E007F1202048F30011EE544C3946450097567
:10046E00FE7843FF03054422C201E4F54475FE788D
:10047E0053FFFC43FF01227F0A12048FE47894F6A7
:01048E00224B
:0A0AAE008B358A3689378C388D3974
:100AB800E4FDFC753A10753B21F53CE5391539AE76
:100AC80038700215384E60467835E475F001120228
:100AD8003B120154F53CFEEE6204E4F53DF53EC3DD
:100AE800E53E9408E53D940050D1EC30E70FED2544
:100AF800E0FFEC33653AFCE53B6FFD8007ED25E050
:100B0800FDEC33FC053EE53E70D5053D80D1AE04D5
:020B1800AF0527
:010B1A0022B8
:04048F008F248D2504
:1004930078267C007D007BFF7A00794E7E007F0BFF
:1004A30012012EE4F531F532F533F5347526AA85BC
:1004B3002527852428F529851C2AE52412024B05C6
:1004C3000C0504E10A05190B05200D054F0E058FD8
:1004D3000F051911059A120519370000059D752B93
:1004E3000EE4F52CFF74722FF8E6FE742D2FF8A698
:1004F300060FBF06F0E4FF747A2FF8E6FE74332F7D
:10050300F8A6060FBF08F0A19D752B01E4F52CA2F8
:100513000333F52DA19DE4F52BF52C807D752B057B
:10052300E4F52C752D10F52D752E01E5E654807834
:100533009C46F52FE525B4240478848007E525B48B
:1005430025057885E6F530E4F531804E752B0AE410
:10055300F52C853F2DFFEFFDE53F2DFDE433FCD367
:10056300ED9416EC648094804008742E2FF876FF87
:10057300800EE53F2F245AF8E6FE742E2FF8A606C8
:100583000FBF09D27409253FF53F800E752B01E497
:10059300F52C752D018003D20E22E52CFEE42407F1
:1005A300FFE43EF533EF452BF5347B007A007926E3
:1005B300FDAC33120AAE8E318F32AD3474272DF871
:1005C300A607E531FF74282DF8A607C28275FE0E33
:1005D30043FF04E534240AFFE43533FE7B007A004D
:0B05E3007926120E1575FE0E53FFF373
:0105EE0022EA
:100800007889E6C4540FFD540360020197EF24F683
:10081000602524FD602F14607124D7707AE4FE787F
:100820008DE6FFEEC39F506F748F2EF8E6FF747253
:100830002EF8A6070E80E8788FE6BD04047870F6DF
:10084000227871F622ED64047891701FE6788412A4
:1008500000267856F67892E6F54708E67878120092
:100860003C7886F67894E67882F622E6788512005F
:10087000267857F67892E6F54808E6787912003C33
:100880007887F67894E67883F622788FE6BD0404BC
:070890007858F6227859F6B2
:01089700223E
:100C8900E4F524F525F526301C44C21C788EE6FED1
:100C9900E42407FFE43EFE18E6FDEEF524EF4DF5EA
:100CA900257B007A007988FDAC24120AAEAC06AD2A
:100CB90007AB25748A2BF8E6FE74892BF8E6FBEB63
:0E0CC900B5050BEEB50407788AE6FF120800A9
:010CD70022FA
:10069D00019C00C11F019B1E14080BB80C1C0CE41F
:0E06AD000D480DAC0E420ED80F3C0FD2106857
:0B0ECD00EF25E02408F8E6FC08E62210
:100B1B00E4FFE5E630E715120ECD2432FDE43CFC94
:100B2B00C3789AE69D18E69C50108012120ECDFDEC
:100B3B00C3789AE69D18E69C40040FBF0AD4789CB4
:100B4B00E6FEEFD39E400418068003789B16789B35
:100B5B00E6FED394325006EEC3940A5007789CA657
:100B6B000718761E789CE6FFD394015003D21F2200
:080B7B00EFD394024002C21FF7
:010B8300224F
:1006BB00014B00014D00014A00014900014C00C1F2
:1006CB000CC10FC10BC10AC10D015000014E00C17D
:0406DB000E014F00BD
:100C3400E5506050E4F550054BE54BC39405400581
:100C4400E4F54BD20C054DE54DC3940A4005E4F59B
:100C54004DD20F0549E549C394644005E4F549D2F2
:100C64000A054AE54AC394FA401AE4F54AD20B0548
:100C74004CE54C9404400DE4F54CD20D0546E54694
:050C840070020545228D
:03000B00020B8461
:100B8400C0E0C0D074FC258CF58C7417258AF58AD6
:100B9400755001054EE54EC39405403A754E00303C
:100BA4000E34E54FD394045004C282801BE54F30C9
:100BB400E00BB40D04C282800FD282800BE54FB4E7
:100BC4000E04D2828002C282054FE54FC3941740BF
:0B0BD40005C20E754F00D0D0D0E032FB
:1008AA00020EBEE493A3F8E493A34003F68001F298
:1008BA0008DFF48029E493A3F85407240CC8C3334F
:1008CA00C4540F4420C8834004F456800146F6DF1E
:1008DA00E4800B01020408102040809005EFE47EBA
:1008EA00019360BCA3FF543F30E509541FFEE49313
:1008FA00A360010ECF54C025E060A840B8E493A3DA
:10090A00FAE493A3F8E493A3C8C582C8CAC583CA04
:10091A00F0A3C8C582C8CAC583CADFE9DEE780BEBC
:0106DF00001A
:10005E00E709F608DFFA8046E709F208DFFA803E84
:10006E0088828C83E709F0A3DFFA8032E309F60871
:10007E00DFFA8078E309F208DFFA807088828C83D9
:10008E00E309F0A3DFFA806489828A83E0A3F6088D
:10009E00DFFA805889828A83E0A3F208DFFA804C67
:1000AE0080D280FA80C680D4806980F2803380103E
:1000BE0080A680EA809A80A880DA80E280CA8033A7
:1000CE0089828A83ECFAE493A3C8C582C8CCC5831F
:1000DE00CCF0A3C8C582C8CCC583CCDFE9DEE780EF
:1000EE000D89828A83E493A3F608DFF9ECFAA9F06E
:1000FE00EDFB2289828A83ECFAE0A3C8C582C8CCC4
:10010E00C583CCF0A3C8C582C8CCC583CCDFEADEDC
:10011E00E880DB89828A83E493A3F208DFF980CC3E
:10012E0088F0EF60010E4E60C388F0ED2402B40437
:10013E000050B9F582EB2402B4040050AF232345DE
:06014E0082239000AE7355
:10015400BB010689828A83E0225002E722BBFE02A9
:09016400E32289828A83E49322DC
:10016D0075F008758200EF2FFFEE33FECD33CDCC49
:10017D0033CCC58233C5829BED9AEC99E5829840CC
:10018D000CF582EE9BFEED9AFDEC99FC0FD5F0D6A9
:10019D00E4CEFBE4CDFAE4CCF9A88222B800C1B9D3
:1001AD000059BA002DEC8BF084CFCECDFCE5F0CB11
:1001BD00F97818EF2FFFEE33FEED33FDEC33FCEB4A
:1001CD0033FB10D703994004EB99FB0FD8E5E4F905
:1001DD00FA227818EF2FFFEE33FEED33FDEC33FCF2
:1001ED00C933C910D7059BE99A4007EC9BFCE99AE6
:1001FD00F90FD8E0E4C9FAE4CCFB2275F010EF2F2B
:10020D00FFEE33FEED33FDCC33CCC833C810D7072A
:10021D009BEC9AE899400AED9BFDEC9AFCE899F865
:0E022D000FD5F0DAE4CDFBE4CCFAE4C8F922F8
:10023B00FAE6FB0808E6F925F0F618E6CA3AF622C4
:10024B00D083D082F8E4937012740193700DA3A342
:10025B0093F8740193F5828883E473740293686056
:06026B00EFA3A3A380DF56
:10027100EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02D1A
:10028100FDE43CFCE8A42EC8C5F03DFDE43CFCEFD8
:0D029100A4FFE5F028FEE43DFDE43CFC2266
:00000001FF

19
Project/Objects/mcu.lnp Normal file
View File

@ -0,0 +1,19 @@
".\Objects\STARTUP.obj",
".\Objects\main.obj",
".\Objects\adc.obj",
".\Objects\charger_module.obj",
".\Objects\discharge_module.obj",
".\Objects\gpio.obj",
".\Objects\hall.obj",
".\Objects\key.obj",
".\Objects\led.obj",
".\Objects\sleep.obj",
".\Objects\system.obj",
".\Objects\uart.obj",
".\Objects\userapp.obj",
".\Objects\vox_module.obj",
".\Objects\watchdog.obj",
".\Objects\bat.obj",
".\Objects\sys_tim.obj"
TO ".\Objects\mcu"
PRINT(".\Listings\mcu.m51") RAMSIZE(256)

View File

@ -0,0 +1 @@
"..\UsrSrc\sleep\sleep.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\sleep.lst) TABS (2) OBJECT(.\Objects\sleep.obj)

BIN
Project/Objects/sleep.obj Normal file

Binary file not shown.

View File

@ -0,0 +1 @@
"..\UsrSrc\timer\sys_tim.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\sys_tim.lst) TABS (2) OBJECT(.\Objects\sys_tim.obj)

BIN
Project/Objects/sys_tim.obj Normal file

Binary file not shown.

View File

@ -0,0 +1 @@
"..\UsrSrc\system\system.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\system.lst) TABS (2) OBJECT(.\Objects\system.obj)

BIN
Project/Objects/system.obj Normal file

Binary file not shown.

99
Project/Objects/test.txt Normal file
View File

@ -0,0 +1,99 @@
:020000040000FA
:200000000203CB02000632000000000209D175B7C3750B02750C02220000000208987429A5
:200020002FF8A605EBC313FE742C2FF8A606742F2FF8A60374322FF8A61574352FF8E4F617
:2000400022000000000000000000000209B80000000000000000000000000002084A75F002
:2000600008758200EF2FFFEE33FECD33CDCC33CCC58233C5829BED9AEC99E58298400CF505
:2000800082EE9BFEED9AFDEC99FC0FD5F0D6E4CEFBE4CDFAE4CCF9A88222B800C1B90059D0
:2000A000BA002DEC8BF084CFCECDFCE5F0CBF97818EF2FFFEE33FEED33FDEC33FCEB33FB52
:2000C00010D703994004EB99FB0FD8E5E4F9FA227818EF2FFFEE33FEED33FDEC33FCC93315
:2000E000C910D7059BE99A4007EC9BFCE99AF90FD8E0E4C9FAE4CCFB2275F010EF2FFFEE2C
:2001000033FEED33FDCC33CCC833C810D7079BEC9AE899400AED9BFDEC9AFCE899F80FD5C5
:20012000F0DAE4CDFBE4CCFAE4C8F922EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02DFDE43CFC5C
:20014000E8A42EC8C5F03DFDE43CFCEFA4FFE5F028FEE43DFDE43CFC2220120302022CE5DF
:200160000C1460361470030202142402600302022FE5B720E505E4FF120A140508E508C3F8
:200180009402500302022FE4F508E5E35488FFBF8002D20A750C0102022FE5E3548864885D
:2001A0007045050FE50FC39428500302022FE4F50F300A107F01120A14D2067515057B6455
:2001C0007D02801ED208050AE50AC39496400AE4F50A7F01120A14C208E4F5157B327D037B
:2001E0007F0112001E8048E5E35488FFBF801AE4F50FF50AD20AF515FB7D017F0112001E95
:2002000030062CC20AC2068026E5E354887020750C02801B7F01120A14E4F50FF50AF5085C
:20022000C20AE5E330E708E4F50C8003750B02E5E830E3120510E510C394024009E4F5109A
:2002400075E808750C0222201203020317E50B1460361470030202FF2402600302031AE592
:20026000B720E405E4FF1209FF0511E511C39402500302031AE4F511E5E35424FFBF2002E0
:20028000D209750B0102031AE5E3542464247046050DE50DC39428500302031AE4F50D305A
:2002A00009127F011209FFD20B7515057B647D02E41F801DD2070509E509C39496400AE42F
:2002C000F5097F011209FFC207E4F5157B327D03FF12001E8044E5E35424FFBF2019E4F59F
:2002E0000DF509D209F515FB7D01FF12001E300B29C209C20B8023E5E35424701D80187FE3
:20030000011209FFE4F511F50DF509C209E5E330E508E4F50B8003750B02E5E830E2120549
:200320000EE50EC394024009E4F50E75E804750B0222E4FE74292EF8E6607624FE600E1429
:2003400060472402706BAF06120A298069742C2EF974352EF8E6C397AF065005120A29806D
:2003600003120A3D742F2EF974352EF8E6C3974045E4F674322EF8E6D39400400116E67023
:200380003574292EF8E4F6802D742C2EF974352EF8E6D397AF065005120A298003120A3DCD
:2003A000742F2EF974352EF8E6C3974009E4F68005AF06120A3D0EEE64036003020334E4CB
:2003C000FE74352EF8060EBE03F722758E3075D20078FFE4F6D8FD758139020418020A95D4
:2003E000E493A3F8E493A34003F68001F208DFF48029E493A3F85407240CC8C333C4540F1F
:200400004420C8834004F456800146F6DFE4800B01020408102040809005DCE47E019360CE
:20042000BCA3FF543F30E509541FFEE493A360010ECF54C025E060A840B8E493A3FAE49340
:20044000A3F8E493A3C8C582C8CAC583CAF0A3C8C582C8CAC583CADFE9DEE780BEE4FE75CC
:2004600012017F041204DEC3EF94FFEE94024003AF1222E5E630E763D3EF9436EE9405505B
:2004800030EF9422EE94024028301912EF9414EE94055007C2197512018003E4F5123018B2
:2004A0003AD3EF9444EE9402402EC218751201802A051FE51FD3940A4021E4F51FD3EF9422
:2004C00036EE94054004D219800BC3EF9422EE94025002D21853B3FEE4F512AF1222AD07F7
:2004E000E4FCF513F514F515F51675FE2975FF8BEDC454F04401F5A5E5A520E0FBAFA1753D
:2005000013008F14AFA2EFFEEE4213E5142516F516E5133515F515E4F513F5140CBC08D084
:20052000E516AE157803CEC313CE13D8F9F5148E131208E28E158F16AE13AF147C037DE8D6
:2005400012012CC006C007AE15AF16AB07AA06E4F9F8D007D00612009A8E138F1422E4F578
:20056000D275FE8943FF8075FE0153FFFC12000E120A63120A7475FE0D75FF01120A8575EF
:2005800015067B197D02E4FF12001E7515067B197D027F0112001E7515067B197D027F02A3
:2005A00012001EE4F58675FE0F43FF8075FE4F75FF10120A5175FE1775FF3C75FE1B75FF79
:2005C000FC75FE1E75FF0CD2A8D2B9D2BBD2AF75F21875F3C075E80C75280A2202380000E8
:2005E000C119C118011F00C113C112C114012600C105C101C100C104C103C10201250001C9
:200600002400C196C117C115012800C11AC10AC109010B02011100010D00010900C1070117
:200620000C02010800010F00010A00C108010E00011000C10BC106011B00011D00011A00B7
:20064000011900011C00C10EC110C10DC10CC10F011E00C11100E4FDF512F513F514F51564
:2006600075FE2975FF8B75A551E5A520E0FBAFA17512008F13AFA2EFFEEE4212E5132515C4
:20068000F515E5123514F514E4F512F5130DBD08D5E515AE147802CEC313CE13D8F9F513D9
:2006A0008E121208E28E148F15AE12AF137C037DE812012CC006C007AE14AF15AB07AA063E
:2006C000E4F9F8D007D00612009A8E128F1322300E0EC20E12096012099612073D1207A52C
:2006E000301005C210120332300C12C20C1206567838A60608A607120247120159300F3CBF
:20070000C20FE528D3940040091528301A2EC21A80271209E9EF602175FE2175FFE675FE3E
:200720002475FFFFC2BBC2B9C2A9C2AB438702D2BBD2B9D2A9D2AB800075280A22E5E53033
:20074000E105C213C21222E5E230E707C213C212D21422E5E830E010C213C212300D45C278
:200760000D75E80175B50122D21330141EE5E630E719C37839E6941018E6940E4006D213B6
:20078000C2148007E4F5B5C213C212301316E5B520E00375B5010526E526C3940A4005D2F6
:2007A00012E4F52622E5E620E70653B3FEC21522E5F2540C600FE5F354C0600675F20C7551
:2007C000F3C0C21522E5F354C0600375F3C012045DEF7003C21522E5F230E419C215C37812
:2007E00039E694EB18E6940F500743B30175F2102253B3FE2243B301D21522E51E604AE41C
:20080000F51E051BE51BC394054005E4F51BD20E051DE51DC3940A4005E4F51DD210051970
:20082000E519C394644005E4F519D20C051AE51AC394FA4014E4F51AD20DB290051CE51CF1
:2008400094044005E4F51CD20F22C0E0C0D075D000C006C007AFF38FF3AEEF8EEFEE30E481
:2008600002D205EE30E502D201EE30E604D200C201EE30E307300104C201D204EF30E3044E
:20088000D2028006EF30E202D203201A02D21AD007D006D0D0D0E032C0E0C0F0C083C082FA
:2008A000C0D075D000C000C001C002C003C004C005C006C007C28F158D749B258BF58B30E5
:2008C0001503120922D211D007D006D005D004D003D002D001D000D0D0D082D083D0F0D06F
:2008E000E032E4FDFBFAF517F51875FE2975FF8B75A561E5A520E0FBAFA1AB07AFA2EFFE1C
:20090000EEFAEB2518F518EA3517F517E4FAFB0DBD08DDE518AE177803CEC313CE13D8F95D
:20092000FF22E525D395245004D2848002C284E525C394AA400FE4F525301704152480052D
:20094000301602052474AAD395245006D217C216800BE524D394015004D216C21705252208
:20096000300410C201C2047515057B327D027F0212001E30000EC2007515087B327D027F01
:200980000212001E30050EC2057515037B327D027F0212001E2230030C752701C203E4F515
:2009A00015FBFD800D30020FE4F527C202F515FB7D017F0212001E22C0E0C0D075D000C00D
:2009C00007AFEB8FEB201A02D21AD007D0D0D0E032C0E0C0D074FC258CF58C7417258AF57A
:2009E0008A751E01D0D0D0E032E5E620E709200906200A03301A05C21A7F00227F0122EFC3
:200A000014600A04700D53B7EE43B7102253B7EF43B70122EF14600A04700D53B7DD43B7CE
:200A2000202253B7DF43B70222EF14600A14600A24027008D28322D28222D28422EF14601C
:200A40000A14600A24027008C28322C28222C28422E5E230E4FBE5E230E304E4F5272275F0
:200A60002701225389F0438901758CFC758A17D2A9D28C2253890F438910758DFF758B9B22
:200A8000D2ABD28E2275FE0675FF1C75FE0375FF3F5380E32212055ED2AED2BE1207FB12A2
:200AA00006CF80F400000000000000000000000000000000000000000000000000000000ED
:200AC000000000000000000000000000000000000000000000000000000000000000000016
:200AE0000000000000000000000000000000000000000000000000000000000000000000F6
:200B00000000000000000000000000000000000000000000000000000000000000000000D5
:200B20000000000000000000000000000000000000000000000000000000000000000000B5
:200B4000000000000000000000000000000000000000000000000000000000000000000095
:200B6000000000000000000000000000000000000000000000000000000000000000000075
:200B8000000000000000000000000000000000000000000000000000000000000000000055
:200BA000000000000000000000000000000000000000000000000000000000000000000035
:200BC000000000000000000000000000000000000000000000000000000000000000000015
:200BE0000000000000000000000000000000000000000000000000000000000000000000F5
:020C00000D8263
:00000001FF

1
Project/Objects/uart.__i Normal file
View File

@ -0,0 +1 @@
"..\UsrSrc\uart\uart.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\uart.lst) TABS (2) OBJECT(.\Objects\uart.obj)

BIN
Project/Objects/uart.obj Normal file

Binary file not shown.

View File

@ -0,0 +1 @@
"..\UsrSrc\userapp\userapp.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\userapp.lst) TABS (2) OBJECT(.\Objects\userapp.obj)

BIN
Project/Objects/userapp.obj Normal file

Binary file not shown.

View File

@ -0,0 +1 @@
"..\UsrSrc\vox\vox_module.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\vox_module.lst) TABS (2) OBJECT(.\Objects\vox_module.obj)

Binary file not shown.

View File

@ -0,0 +1 @@
"..\UsrSrc\watchdog\watchdog.c" ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE INCDIR(..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\watchdog.lst) TABS (2) OBJECT(.\Objects\watchdog.obj)

Binary file not shown.

3727
Project/TP3102_Demo.uvgui.GH Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

449
Project/TP3102_Demo.uvopt Normal file
View File

@ -0,0 +1,449 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<TargetOption>
<CLK51>12000000</CLK51>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim>
<RunTarget>0</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>0</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>120</PageWidth>
<PageLength>65</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\Listings\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>1</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>255</CpuCode>
<Books>
<Book>
<Number>0</Number>
<Title>Data Sheet</Title>
<Path>DATASHTS\CAST\CAST_R8051XC.PDF</Path>
</Book>
</Books>
<DebugOpt>
<uSim>1</uSim>
<uTrg>0</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>10</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\SY8831.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGDC51</Key>
<Name>(94=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(81=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(1201=-1,-1,-1,-1,0)(90=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(5045=-1,-1,-1,-1,0)(5046=-1,-1,-1,-1,0)(5031=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(5015=-1,-1,-1,-1,0)(5160=-1,-1,-1,-1,0)(5057=-1,-1,-1,-1,0)(5166=-1,-1,-1,-1,0)(5164=-1,-1,-1,-1,0)(5165=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>SY8831</Key>
<Name>-S14 -B921600 -O1799</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTC51</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>TP3102</Key>
<Name>-S14 -B921600 -O1799</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>n_ADC_Plus,0x0A</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>n_Vbat_Data,0x0A</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>F_sys_tim_1s</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>1</WinNumber>
<ItemText>Protect_Type_Flg</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>1</WinNumber>
<ItemText>Decnt_SleepDelay</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>X:0</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>1</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
</TargetOption>
</Target>
<Group>
<GroupName>Startup</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Src\startup\STARTUP.A51</PathWithFileName>
<FilenameWithoutPath>STARTUP.A51</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>UsrSrc</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\adc\adc.c</PathWithFileName>
<FilenameWithoutPath>adc.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\charger\charger_module.c</PathWithFileName>
<FilenameWithoutPath>charger_module.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\discharge\discharge_module.c</PathWithFileName>
<FilenameWithoutPath>discharge_module.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\gpio\gpio.c</PathWithFileName>
<FilenameWithoutPath>gpio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\hall\hall.c</PathWithFileName>
<FilenameWithoutPath>hall.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\key\key.c</PathWithFileName>
<FilenameWithoutPath>key.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\led\led.c</PathWithFileName>
<FilenameWithoutPath>led.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\sleep\sleep.c</PathWithFileName>
<FilenameWithoutPath>sleep.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\system\system.c</PathWithFileName>
<FilenameWithoutPath>system.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\uart\uart.c</PathWithFileName>
<FilenameWithoutPath>uart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\userapp\userapp.c</PathWithFileName>
<FilenameWithoutPath>userapp.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\vox\vox_module.c</PathWithFileName>
<FilenameWithoutPath>vox_module.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\watchdog\watchdog.c</PathWithFileName>
<FilenameWithoutPath>watchdog.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\bat\bat.c</PathWithFileName>
<FilenameWithoutPath>bat.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\timer\sys_tim.c</PathWithFileName>
<FilenameWithoutPath>sys_tim.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

490
Project/TP3102_Demo.uvproj Normal file
View File

@ -0,0 +1,490 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
<SchemaVersion>1.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>R8051XC</Device>
<Vendor>CAST, Inc.</Vendor>
<Cpu>IRAM(0-0xFF) CLOCK(24000000) MOD517DP MDU_R515</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>4129</DeviceId>
<RegisterFile>REG51XC.H</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile></SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath>Evatronix\</RegisterFilePath>
<DBRegisterFilePath>Evatronix\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>mcu</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\Listings\</ListingPath>
<HexFormatSelection>0</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
<nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
<nStopB2X>0</nStopB2X>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>1</RunUserProg2>
<UserProg1Name>.\HEXBIN.bat .\Objects\hex2bin_TP.exe mcu \Objects\</UserProg1Name>
<UserProg2Name>.\Objects\hex2bin_TP.exe .\Objects\mcu.hex .\Objects\bin.bin 3 0</UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
<BankNo>65535</BankNo>
</CommonProperty>
<DllOption>
<SimDllName>S8051.DLL</SimDllName>
<SimDllArguments>-PMW -DPC -BSE</SimDllArguments>
<SimDlgDll>DCore51.DLL</SimDlgDll>
<SimDlgDllArguments>-pR8051XC -o38081BDBFFF</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TCore51.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pR8051XC</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>0</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
<Simulator>
<UseSimulator>1</UseSimulator>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>1</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
<RestoreSysVw>1</RestoreSysVw>
</Simulator>
<Target>
<UseTarget>0</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<RestoreTracepoints>1</RestoreTracepoints>
<RestoreSysVw>1</RestoreSysVw>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>10</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
</SimDlls>
<TargetDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
<Driver>BIN\SY8831.dll</Driver>
</TargetDlls>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>0</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
<Capability>0</Capability>
<DriverSelection>-1</DriverSelection>
</Flash1>
<bUseTDR>0</bUseTDR>
<Flash2></Flash2>
<Flash3>"" ()</Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<Target51>
<Target51Misc>
<MemoryModel>0</MemoryModel>
<RTOS>0</RTOS>
<RomSize>1</RomSize>
<DataHold>0</DataHold>
<XDataHold>0</XDataHold>
<UseOnchipRom>0</UseOnchipRom>
<UseOnchipArithmetic>0</UseOnchipArithmetic>
<UseMultipleDPTR>0</UseMultipleDPTR>
<UseOnchipXram>0</UseOnchipXram>
<HadIRAM>1</HadIRAM>
<HadXRAM>0</HadXRAM>
<HadIROM>0</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>0</Modp2>
<Mod517dp>1</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
<useCB>0</useCB>
<useXB>0</useXB>
<useL251>0</useL251>
<useA251>0</useA251>
<Mx51>0</Mx51>
<ModC812>0</ModC812>
<ModCont>0</ModCont>
<Lp51>0</Lp51>
<useXBS>0</useXBS>
<ModDA>0</ModDA>
<ModAB2>0</ModAB2>
<Mx51P>0</Mx51P>
<hadXRAM2>0</hadXRAM2>
<uocXram2>0</uocXram2>
<hadXRAM3>0</hadXRAM3>
<ModC2>0</ModC2>
<ModH2>0</ModH2>
<Mdu_R515>1</Mdu_R515>
<Mdu_F120>0</Mdu_F120>
<Psoc>0</Psoc>
<hadIROM2>0</hadIROM2>
<hadIROM3>0</hadIROM3>
<ModSmx2>0</ModSmx2>
<cBanks>0</cBanks>
<xBanks>0</xBanks>
<OnChipMemories>
<RCB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0xffff</Size>
</RCB>
<RXB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</RXB>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocr1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr1>
<Ocr2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr2>
<Ocr3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr3>
<IRO>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA>
<XRA512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA512>
<IROM512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM512>
<XRA513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA513>
<IROM513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM513>
</OnChipMemories>
</Target51Misc>
<C51>
<RegisterColoring>0</RegisterColoring>
<VariablesInOrder>0</VariablesInOrder>
<IntegerPromotion>1</IntegerPromotion>
<uAregs>0</uAregs>
<UseInterruptVector>1</UseInterruptVector>
<Fuzzy>3</Fuzzy>
<Optimize>9</Optimize>
<WarningLevel>2</WarningLevel>
<SizeSpeed>0</SizeSpeed>
<ObjectExtend>1</ObjectExtend>
<ACallAJmp>0</ACallAJmp>
<InterruptVectorAddress>0</InterruptVectorAddress>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath>..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer</IncludePath>
</VariousControls>
</C51>
<Ax51>
<UseMpl>0</UseMpl>
<UseStandard>1</UseStandard>
<UseCase>0</UseCase>
<UseMod51>0</UseMod51>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Ax51>
<Lx51>
<useFile>0</useFile>
<linkonly>0</linkonly>
<UseMemoryFromTarget>1</UseMemoryFromTarget>
<CaseSensitiveSymbols>0</CaseSensitiveSymbols>
<WarningLevel>2</WarningLevel>
<DataOverlaying>1</DataOverlaying>
<OverlayString></OverlayString>
<MiscControls></MiscControls>
<DisableWarningNumbers></DisableWarningNumbers>
<LinkerCmdFile></LinkerCmdFile>
<Assign></Assign>
<ReserveString></ReserveString>
<CClasses></CClasses>
<UserClasses></UserClasses>
<CSection></CSection>
<UserSection></UserSection>
<CodeBaseAddress></CodeBaseAddress>
<XDataBaseAddress></XDataBaseAddress>
<PDataBaseAddress></PDataBaseAddress>
<BitBaseAddress></BitBaseAddress>
<DataBaseAddress></DataBaseAddress>
<IDataBaseAddress></IDataBaseAddress>
<Precede></Precede>
<Stack></Stack>
<CodeSegmentName></CodeSegmentName>
<XDataSegmentName></XDataSegmentName>
<BitSegmentName></BitSegmentName>
<DataSegmentName></DataSegmentName>
<IDataSegmentName></IDataSegmentName>
</Lx51>
</Target51>
</TargetOption>
<Groups>
<Group>
<GroupName>Startup</GroupName>
<Files>
<File>
<FileName>STARTUP.A51</FileName>
<FileType>2</FileType>
<FilePath>..\Src\startup\STARTUP.A51</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>UsrSrc</GroupName>
<Files>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\main.c</FilePath>
</File>
<File>
<FileName>adc.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\adc\adc.c</FilePath>
</File>
<File>
<FileName>charger_module.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\charger\charger_module.c</FilePath>
</File>
<File>
<FileName>discharge_module.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\discharge\discharge_module.c</FilePath>
</File>
<File>
<FileName>gpio.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\gpio\gpio.c</FilePath>
</File>
<File>
<FileName>hall.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\hall\hall.c</FilePath>
</File>
<File>
<FileName>key.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\key\key.c</FilePath>
</File>
<File>
<FileName>led.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\led\led.c</FilePath>
</File>
<File>
<FileName>sleep.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\sleep\sleep.c</FilePath>
</File>
<File>
<FileName>system.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\system\system.c</FilePath>
</File>
<File>
<FileName>uart.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\uart\uart.c</FilePath>
</File>
<File>
<FileName>userapp.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\userapp\userapp.c</FilePath>
</File>
<File>
<FileName>vox_module.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\vox\vox_module.c</FilePath>
</File>
<File>
<FileName>watchdog.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\watchdog\watchdog.c</FilePath>
</File>
<File>
<FileName>bat.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\bat\bat.c</FilePath>
</File>
<File>
<FileName>sys_tim.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\timer\sys_tim.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
<LayerInfo>
<Layers>
<Layer>
<LayName>&lt;Project Info&gt;</LayName>
<LayDesc></LayDesc>
<LayUrl></LayUrl>
<LayKeys></LayKeys>
<LayCat></LayCat>
<LayLic></LayLic>
<LayTarg>0</LayTarg>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project>

0
Project/test.txt Normal file
View File

205
Src/startup/STARTUP.A51 Normal file
View File

@ -0,0 +1,205 @@
$NOMOD51
;------------------------------------------------------------------------------
; This file is part of the C51 Compiler package
; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
; Version 8.01
;
; *** <<< Use Configuration Wizard in Context Menu >>> ***
;------------------------------------------------------------------------------
; STARTUP.A51: This code is executed after processor reset.
;
; To translate this file use A51 with the following invocation:
;
; A51 STARTUP.A51
;
; To link the modified STARTUP.OBJ file to your application use the following
; Lx51 invocation:
;
; Lx51 your object file list, STARTUP.OBJ controls
;
;------------------------------------------------------------------------------
;
; User-defined <h> Power-On Initialization of Memory
;
; With the following EQU statements the initialization of memory
; at processor reset can be defined:
;
; <o> IDATALEN: IDATA memory size <0x0-0x100>
; <i> Note: The absolute start-address of IDATA memory is always 0
; <i> The IDATA space overlaps physically the DATA and BIT areas.
IDATALEN EQU 100H
;
; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of XDATA memory
XDATASTART EQU 0
;
; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
; <i> The length of XDATA memory in bytes.
XDATALEN EQU 0H
;
; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of PDATA memory
PDATASTART EQU 0H
;
; <o> PDATALEN: PDATA memory size <0x0-0xFF>
; <i> The length of PDATA memory in bytes.
PDATALEN EQU 0H
;
;</h>
;------------------------------------------------------------------------------
;
;<h> Reentrant Stack Initialization
;
; The following EQU statements define the stack pointer for reentrant
; functions and initialized it:
;
; <h> Stack Space for reentrant functions in the SMALL model.
; <q> IBPSTACK: Enable SMALL model reentrant stack
; <i> Stack space for reentrant functions in the SMALL model.
IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
; <i> Set the top of the stack to the highest location.
IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
; </h>
;
; <h> Stack Space for reentrant functions in the LARGE model.
; <q> XBPSTACK: Enable LARGE model reentrant stack
; <i> Stack space for reentrant functions in the LARGE model.
XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
; <i> Set the top of the stack to the highest location.
XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
; </h>
;
; <h> Stack Space for reentrant functions in the COMPACT model.
; <q> PBPSTACK: Enable COMPACT model reentrant stack
; <i> Stack space for reentrant functions in the COMPACT model.
PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
;
; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
; <i> Set the top of the stack to the highest location.
PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
; </h>
;</h>
;------------------------------------------------------------------------------
;
; Memory Page for Using the Compact Model with 64 KByte xdata RAM
; <e>Compact Model Page Definition
;
; <i>Define the XDATA page used for PDATA variables.
; <i>PPAGE must conform with the PPAGE set in the linker invocation.
;
; Enable pdata memory page initalization
PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
;
; <o> PPAGE number <0x0-0xFF>
; <i> uppermost 256-byte address of the page used for PDATA variables.
PPAGE EQU 0
;
; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
; <i> most 8051 variants use P2 as uppermost address byte
PPAGE_SFR DATA 0A0H
;
; </e>
;------------------------------------------------------------------------------
; Standard SFR Symbols
ACC DATA 0E0H
B DATA 0F0H
SP DATA 81H
DPL DATA 82H
DPH DATA 83H
CKCON DATA 8EH
CLKPRE DATA 0D2H
PCON DATA 87H
NAME ?C_STARTUP
?C_C51STARTUP SEGMENT CODE
?STACK SEGMENT IDATA
RSEG ?STACK
DS 1
EXTRN CODE (?C_START)
PUBLIC ?C_STARTUP
CSEG AT 0
?C_STARTUP: LJMP STARTUP1
RSEG ?C_C51STARTUP
STARTUP1:
;Set Wait State to 0x30 and CPU CLK Prescaler to 1 to Accelerate Startup
;MOV PCON, #02H ;Enter Standby
MOV CKCON, #30H ;Wait State = 0x30
MOV CLKPRE, #0 ;CLK Prescaler = 1
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
IF XDATALEN <> 0
MOV DPTR,#XDATASTART
MOV R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
MOV R6,#(HIGH (XDATALEN)) +1
ELSE
MOV R6,#HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @DPTR,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
IF PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
IF PDATALEN <> 0
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIF
MOV SP,#?STACK-1
; This code is required if you use L51_BANK.A51 with Banking Mode 4
;<h> Code Banking
; <q> Select Bank 0 for L51_BANK.A51 Mode 4
#if 0
; <i> Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.
EXTRN CODE (?B_SWITCH0)
CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
#endif
;</h>
LJMP ?C_START
END

View File

@ -0,0 +1,54 @@
/*
******************************************************************************
*
* @file adc.h
* @brief adc module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __ADC_H__
#define __ADC_H__
#include "define.h"
#define VREF 1000
//extern idata uint16_t g_VREF_Value; //IREF ϵͳÉϵçʱ²É¼¯Ò»´Î¡£
typedef enum {
ADC_CH0 = 0x00,
ADC_CH1,
ADC_CH2,
ADC_CH3,
ADC_CH4,
}ADC_CHANNELS_E;
#if ADC_ENABLE
extern void Adc_Init(void);
extern uint16_t Vref_AdcValue(void);
extern uint16_t Vbat_Value(void);
extern uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn);
#endif
#endif

View File

@ -0,0 +1,175 @@
/*
******************************************************************************
*
* @file adc.c
* @brief adc module
* @ic TP3102
*
* @version 1.0
* @date 2024/03/26 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/04 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "adc.h"
#include "system.h"
#include "sys_tim.h"
#if ADC_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
idata uint16_t Vbat_Adc = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* uint16_t ADC_Chn_Data(ADC_CHANNELS_E adc_chn)
*
* Description : ADC值
*
* Arguments : NONE
* Returns : adc Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t ADC_Chn_Data(ADC_CHANNELS_E adc_chn)
{
uint8_t index = 0;
uint16_t adc_data = 0;
uint16_t adc_plus_data = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for(index=0; index<8; index++)
{
ADC_CTL1 = (adc_chn << 4) | 0x01; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
adc_data = ADC_DATL; //Read low byte first! Lock ADC Value.
adc_data |= (uint16_t)(ADC_DATH << 8);
adc_plus_data += adc_data;
#ifdef _DEBUG_ADC
printf("adc4:%d,plus:%d.\r\n",(uint16_t)adc_data,(uint16_t)adc_plus_data);
#endif
adc_data = 0;
}
adc_data = adc_plus_data >> 3;
#ifdef _DEBUG_ADC
printf("adc_chn1:%d.\r\n",(uint16_t)adc_data);
#endif
#ifdef _DEBUG_ADC
printf("Adc,Vadc:%d,Vref:%d.\r\n", (uint16_t)adc_data, (uint16_t)adc_plus_data);
#endif
return adc_data;
}
/*
*******************************************************************************
* uint16_t Vbat_Value(void)
*
* Description : Vbat Value.
*
* Arguments : NONE
* Returns : Vbat Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t Vbat_Value(void)
{
uint8_t index = 0;
uint16_t n_Vbat_Data = 0;
uint16_t n_ADC_Plus = 0;
n_Vbat_Data = ADC_Chn_Data(ADC_BAT);
#ifdef _DEBUG_ADC
printf("bat_Vbat1:%d.\r\n",(uint16_t)n_Vbat_Data);
#endif
n_ADC_Plus = ADC_Chn_Data(ADC_VREF); //获取VREF
n_Vbat_Data = (uint32_t)(n_Vbat_Data) * VREF * 2 / n_ADC_Plus; //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("bat,Vbat:%d,vref:%d.\r\n",(uint16_t)n_Vbat_Data, n_ADC_Plus);
#endif
return n_Vbat_Data;
}
/*
*******************************************************************************
* uint16_t ADC_NTC_Value(void)
*
* Description : NTC采样电压
* Arguments : NONE
* Returns : ADC Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
#ifdef ADC_NTC_ENABLE
uint16_t ADC_NTC_Value(void)
{
uint8_t index = 0;
uint16_t adc_data = 0;
uint16_t adc_plus_data = 0;
adc_data = ADC_Chn_Data(ADC_CH0);
#ifdef _DEBUG_ADC
printf("adc_chn1:%d.\r\n",(uint16_t)adc_data);
#endif
adc_plus_data = ADC_Chn_Data(ADC_VREF); //获取VREF
adc_data = (uint32_t)(adc_data) * VREF / adc_plus_data; //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("Adc,Vadc:%d,Vref:%d.\r\n", (uint16_t)adc_data, (uint16_t)adc_plus_data);
#endif
return adc_data;
}
#endif
#endif

View File

@ -0,0 +1,277 @@
/*
******************************************************************************
*
* @file adc.c
* @brief adc module
* @ic TP3102
*
* @version 1.0
* @date 2024/03/26 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/04 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "adc.h"
#include "system.h"
#include "sys_tim.h"
#if ADC_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
idata uint16_t g_VREF_Value = 0; //IREF 系统上电时采集一次。
idata uint16_t Vbat_Adc = 0;
idata uint16_t VNTC_Adc = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Adc_Init(void)
*
* Description : ADC Initialization. ---
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void Adc_Init(void)
{
#if ADC_CHN_ENABLE
SFRADDR = MFP_CTL1; //Set P07 Pinmux As AD4 Function
SFRDATA &= 0x3F;
SFRDATA |= 0x80;
SFRADDR = ADCCS_CTL0; //AD0~AD4 GPIO constant 20uA current source enable.
SFRDATA = 0x10;
#endif
//g_VREF_Value = Vref_AdcValue();
//g_VREF_Value = 311;
}
#if 1
/*
*******************************************************************************
* uint16_t Vref_AdcValue(void)
*
* Description : Vref Value.ADC值
*
* Arguments : NONE
* Returns : Iref Value (mA)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t Vref_AdcValue(void)
{
uint8_t index = 0;
uint16_t n_Vref_Data = 0;
uint16_t n_ADC_Plus = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B -- ADC EN; Single mode; ADC CLK divided by 24=460k
for( index=0; index<8; index++ )
{
ADC_CTL1 = 0x61; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
n_Vref_Data = ADC_DATL;
n_Vref_Data |= (uint16_t)(ADC_DATH << 8);
n_ADC_Plus += n_Vref_Data;
n_Vref_Data = 0;
}
n_Vref_Data = (n_ADC_Plus / 8);
return n_Vref_Data;
}
/*
*******************************************************************************
* uint16_t Vbat_Value(void)
*
* Description : Vbat Value.
*
* Arguments : NONE
* Returns : Vbat Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t Vbat_Value(void)
{
uint8_t index = 0;
uint16_t n_Vbat_Data = 0;
uint16_t n_ADC_Plus = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for( index=0; index<8; index++ )
{
ADC_CTL1 = 0x51; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
n_Vbat_Data = ADC_DATL;
n_Vbat_Data |= (uint16_t)(ADC_DATH << 8);
n_ADC_Plus += n_Vbat_Data;
#ifdef _DEBUG_ADC
printf("Vbat:%d,plus:%d.\r\n",(uint16_t)n_Vbat_Data,(uint16_t)n_ADC_Plus);
#endif
n_Vbat_Data = 0;
}
n_Vbat_Data = ( n_ADC_Plus / 4 ); //Vbat采样值为二分压值。
#ifdef _DEBUG_ADC
printf("bat_Vbat1:%d.\r\n",(uint16_t)n_Vbat_Data);
#endif
g_VREF_Value = Vref_AdcValue(); //获取VREF
n_Vbat_Data = (uint32_t)(n_Vbat_Data) * VREF / g_VREF_Value; //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("bat,Vbat:%d,vref:%d.\r\n",(uint16_t)n_Vbat_Data, g_VREF_Value);
#endif
return n_Vbat_Data;
}
/*
*******************************************************************************
* uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn)
*
* Description : ADC_Chn_Value. ADC0 ~ ADC4
* Arguments : NONE
* Returns : ADC Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
#if ADC_CHN_ENABLE
uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn)
{
uint8_t index = 0;
uint16_t adc_data = 0;
uint16_t adc_plus_data = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for(index=0; index<8; index++)
{
ADC_CTL1 = (adc_chn << 4) | 0x01; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
adc_data = ADC_DATL; //Read low byte first! Lock ADC Value.
adc_data |= (uint16_t)(ADC_DATH << 8);
adc_plus_data += adc_data;
#ifdef _DEBUG_ADC
printf("adc4:%d,plus:%d.\r\n",(uint16_t)adc_data,(uint16_t)adc_plus_data);
#endif
adc_data = 0;
}
adc_data = adc_plus_data / 8;
#ifdef _DEBUG_ADC
printf("adc_chn1:%d.\r\n",(uint16_t)adc_data);
#endif
g_VREF_Value = Vref_AdcValue(); //获取VREF
adc_plus_data = (uint32_t)(adc_data) * VREF / g_VREF_Value; //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("Adc,Vadc:%d,Vref:%d.\r\n", (uint16_t)adc_plus_data, (uint16_t)g_VREF_Value);
#endif
return adc_plus_data;
}
#endif
#else
void ADC_Value_Machine(void)
{
uint8_t i = 0;
uint8_t index = 0;
uint16_t adc_data[8] = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x83; //0x83--ADC EN; Successive mode; ADC CLK divided by 24=460k
for(i=0; i<7; i++)
{
ADC_CTL1 = (i << 4); //Channel set
ADC_CTL1 |= 1; //Start conversion
for(index=0; index<8; index++)
{
while( !(IRQ_FLAG10 & 0x01) ); //Wait for conversion complete
IRQ_FLAG10 = 1; //Write 1 to clear
adc_data[i] = ADC_DATL; //Read low byte first!
adc_data[i] = adc_data[i] + (u16)(ADC_DATH << 8);
}
ADC_CTL1 &= 0xFE; //Stop conversion
IRQ_FLAG10 = 1; //Write 1 to clear--Clear possible flag before stop conversion!!!
}
g_VREF_Value = adc_data[6] / 8;
Vbat_Adc = (uint32_t)(adc_data[5] / 4) * VREF / g_VREF_Value; //Vadx = VREF*DATAadx/DATAvref
VNTC_Adc = (uint32_t)(adc_data[4] / 8) * VREF / g_VREF_Value; //Vadx = VREF*DATAadx/DATAvref;
}
#endif
#endif

View File

@ -0,0 +1,173 @@
/*
******************************************************************************
*
* @file adc.c
* @brief adc module
* @ic TP3102
*
* @version 1.0
* @date 2024/03/26 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/04 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "adc.h"
#include "system.h"
#include "sys_tim.h"
#if ADC_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
idata uint16_t Vbat_Adc = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* uint16_t ADC_Chn_Data(ADC_CHANNELS_E adc_chn)
*
* Description : ADC值
*
* Arguments : NONE
* Returns : adc Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t ADC_Chn_Data(ADC_CHANNELS_E adc_chn)
{
uint8_t index = 0;
uint16_t adc_data = 0;
uint16_t adc_plus_data = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for(index=0; index<8; index++)
{
ADC_CTL1 = (adc_chn << 4) | 0x01; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
adc_data = ADC_DATL; //Read low byte first! Lock ADC Value.
adc_data |= (uint16_t)(ADC_DATH << 8);
adc_plus_data += adc_data;
#ifdef _DEBUG_ADC
printf("adc4:%d,plus:%d.\r\n",(uint16_t)adc_data,(uint16_t)adc_plus_data);
#endif
// adc_data = 0;
}
adc_data = adc_plus_data >> 3;
#ifdef _DEBUG_ADC
printf("adc_chn1:%d.\r\n",(uint16_t)adc_data);
#endif
#ifdef _DEBUG_ADC
printf("Adc,Vadc:%d,Vref:%d.\r\n", (uint16_t)adc_data, (uint16_t)adc_plus_data);
#endif
return adc_data;
}
/*
*******************************************************************************
* uint16_t Vbat_Value(void)
*
* Description : Vbat Value.
*
* Arguments : NONE
* Returns : Vbat Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t Vbat_Value(void)
{
uint16_t n_Vbat_Data = 0;
//uint16_t n_ADC_Plus = 0;
n_Vbat_Data = ADC_Chn_Data(ADC_BAT);
#ifdef _DEBUG_ADC
printf("bat_Vbat1:%d.\r\n",(uint16_t)n_Vbat_Data);
#endif
// n_ADC_Plus = ADC_Chn_Data(ADC_VREF); //获取VREF
n_Vbat_Data = (uint32_t)(n_Vbat_Data) * VREF * 2 / ADC_Chn_Data(ADC_VREF); //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("bat,Vbat:%d.\r\n",(uint16_t)n_Vbat_Data);
#endif
return n_Vbat_Data;
}
/*
*******************************************************************************
* uint16_t ADC_NTC_Value(void)
*
* Description : NTC采样电压
* Arguments : NONE
* Returns : ADC Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
#ifdef ADC_NTC_ENABLE
uint16_t ADC_NTC_Value(void)
{
uint16_t adc_data = 0;
// uint16_t adc_plus_data = 0;
adc_data = ADC_Chn_Data(ADC_CH0);
#ifdef _DEBUG_ADC
printf("adc_chn1:%d.\r\n",(uint16_t)adc_data);
#endif
// adc_plus_data = ADC_Chn_Data(ADC_VREF); //获取VREF
adc_data = (uint32_t)(adc_data) * VREF / ADC_Chn_Data(ADC_VREF); //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("Adc,Vadc:%d.\r\n", (uint16_t)adc_data);
#endif
return adc_data;
}
#endif
#endif

View File

@ -0,0 +1,203 @@
/*
******************************************************************************
*
* @file adc.c
* @brief adc module
* @ic TP3102
*
* @version 1.0
* @date 2024/03/26 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/04 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "adc.h"
#include "system.h"
#include "sys_tim.h"
#if ADC_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
idata uint16_t Vbat_Adc = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* uint16_t Vref_AdcValue(void)
*
* Description : Vref Value.ADC值
*
* Arguments : NONE
* Returns : Iref Value (mA)
* Notes : NONE
*
*******************************************************************************
*/
static uint16_t Vref_AdcValue(void)
{
uint8_t index = 0;
uint16_t n_Vref_Data = 0;
uint16_t n_ADC_Plus = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B -- ADC EN; Single mode; ADC CLK divided by 24=460k
for( index=0; index<8; index++ )
{
ADC_CTL1 = 0x61; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
n_Vref_Data = ADC_DATL;
n_Vref_Data |= (uint16_t)(ADC_DATH << 8);
n_ADC_Plus += n_Vref_Data;
n_Vref_Data = 0;
}
n_Vref_Data = (n_ADC_Plus / 8);
return n_Vref_Data;
}
/*
*******************************************************************************
* uint16_t Vbat_Value(void)
*
* Description : Vbat Value.
*
* Arguments : NONE
* Returns : Vbat Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t Vbat_Value(void)
{
uint8_t index = 0;
uint16_t n_Vbat_Data = 0;
uint16_t n_ADC_Plus = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for( index=0; index<8; index++ )
{
ADC_CTL1 = 0x51; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
n_Vbat_Data = ADC_DATL;
n_Vbat_Data |= (uint16_t)(ADC_DATH << 8);
n_ADC_Plus += n_Vbat_Data;
#ifdef _DEBUG_ADC
printf("Vbat:%d,plus:%d.\r\n",(uint16_t)n_Vbat_Data,(uint16_t)n_ADC_Plus);
#endif
n_Vbat_Data = 0;
}
n_Vbat_Data = ( n_ADC_Plus / 4 ); //Vbat采样值为二分压值。
#ifdef _DEBUG_ADC
printf("bat_Vbat1:%d.\r\n",(uint16_t)n_Vbat_Data);
#endif
n_ADC_Plus = Vref_AdcValue(); //获取VREF
n_Vbat_Data = (uint32_t)(n_Vbat_Data) * VREF / n_ADC_Plus; //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("bat,Vbat:%d,vref:%d.\r\n",(uint16_t)n_Vbat_Data, n_ADC_Plus);
#endif
return n_Vbat_Data;
}
/*
*******************************************************************************
* uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn)
*
* Description : ADC_Chn_Value. ADC0 ~ ADC4
* Arguments : NONE
* Returns : ADC Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
#if ADC_CHN_ENABLE
uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn)
{
uint8_t index = 0;
uint16_t adc_data = 0;
uint16_t adc_plus_data = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for(index=0; index<8; index++)
{
ADC_CTL1 = (adc_chn << 4) | 0x01; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
adc_data = ADC_DATL; //Read low byte first! Lock ADC Value.
adc_data |= (uint16_t)(ADC_DATH << 8);
adc_plus_data += adc_data;
#ifdef _DEBUG_ADC
printf("adc4:%d,plus:%d.\r\n",(uint16_t)adc_data,(uint16_t)adc_plus_data);
#endif
adc_data = 0;
}
adc_data = adc_plus_data / 8;
#ifdef _DEBUG_ADC
printf("adc_chn1:%d.\r\n",(uint16_t)adc_data);
#endif
adc_plus_data = Vref_AdcValue(); //获取VREF
adc_data = (uint32_t)(adc_data) * VREF / adc_plus_data; //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("Adc,Vadc:%d,Vref:%d.\r\n", (uint16_t)adc_data, (uint16_t)adc_plus_data);
#endif
return adc_data;
}
#endif
#endif

View File

@ -0,0 +1,51 @@
/*
******************************************************************************
*
* @file adc.h
* @brief adc module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __ADC_H__
#define __ADC_H__
#include "define.h"
#if ADC_ENABLE
#define VREF 1000
extern idata uint16_t Vbat_Adc;
extern uint16_t Vbat_Value(void);
#if ADC_CHN_ENABLE
typedef enum {
ADC_CH0 = 0x00,
ADC_CH1,
ADC_CH2,
ADC_CH3,
ADC_CH4,
}ADC_CHANNELS_E;
extern uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn);
#endif
#endif
#endif

View File

@ -0,0 +1,55 @@
/*
******************************************************************************
*
* @file adc.h
* @brief adc module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __ADC_H__
#define __ADC_H__
#include "define.h"
#if ADC_ENABLE
#define VREF 1000
//extern idata uint16_t g_VREF_Value; //IREF ϵͳÉϵçʱ²É¼¯Ò»´Î¡£
extern uint16_t Vbat_Value(void);
extern void Adc_Init(void);
extern uint16_t Vref_AdcValue(void);
#if ADC_CHN_ENABLE
typedef enum {
ADC_CH0 = 0x00,
ADC_CH1,
ADC_CH2,
ADC_CH3,
ADC_CH4,
}ADC_CHANNELS_E;
extern uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn);
#endif
#endif
#endif

View File

@ -0,0 +1,203 @@
/*
******************************************************************************
*
* @file adc.c
* @brief adc module
* @ic TP3102
*
* @version 1.0
* @date 2024/03/26 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/04 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "adc.h"
#include "system.h"
#include "sys_tim.h"
#if ADC_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
idata uint16_t Vbat_Adc = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* uint16_t Vref_AdcValue(void)
*
* Description : Vref Value.ADC值
*
* Arguments : NONE
* Returns : Iref Value (mA)
* Notes : NONE
*
*******************************************************************************
*/
static uint16_t Vref_AdcValue(void)
{
uint8_t index = 0;
uint16_t n_Vref_Data = 0;
uint16_t n_ADC_Plus = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B -- ADC EN; Single mode; ADC CLK divided by 24=460k
for( index=0; index<8; index++ )
{
ADC_CTL1 = 0x61; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
n_Vref_Data = ADC_DATL;
n_Vref_Data |= (uint16_t)(ADC_DATH << 8);
n_ADC_Plus += n_Vref_Data;
n_Vref_Data = 0;
}
n_Vref_Data = (n_ADC_Plus / 8);
return n_Vref_Data;
}
/*
*******************************************************************************
* uint16_t Vbat_Value(void)
*
* Description : Vbat Value.
*
* Arguments : NONE
* Returns : Vbat Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t Vbat_Value(void)
{
uint8_t index = 0;
uint16_t n_Vbat_Data = 0;
uint16_t n_ADC_Plus = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for( index=0; index<8; index++ )
{
ADC_CTL1 = 0x51; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
n_Vbat_Data = ADC_DATL;
n_Vbat_Data |= (uint16_t)(ADC_DATH << 8);
n_ADC_Plus += n_Vbat_Data;
#ifdef _DEBUG_ADC
printf("Vbat:%d,plus:%d.\r\n",(uint16_t)n_Vbat_Data,(uint16_t)n_ADC_Plus);
#endif
n_Vbat_Data = 0;
}
n_Vbat_Data = ( n_ADC_Plus / 4 ); //Vbat采样值为二分压值。
#ifdef _DEBUG_ADC
printf("bat_Vbat1:%d.\r\n",(uint16_t)n_Vbat_Data);
#endif
n_ADC_Plus = Vref_AdcValue(); //获取VREF
n_Vbat_Data = (uint32_t)(n_Vbat_Data) * VREF / n_ADC_Plus; //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("bat,Vbat:%d,vref:%d.\r\n",(uint16_t)n_Vbat_Data, n_ADC_Plus);
#endif
return n_Vbat_Data;
}
/*
*******************************************************************************
* uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn)
*
* Description : ADC_Chn_Value. ADC0 ~ ADC4
* Arguments : NONE
* Returns : ADC Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
#if ADC_CHN_ENABLE
uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn)
{
uint8_t index = 0;
uint16_t adc_data = 0;
uint16_t adc_plus_data = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for(index=0; index<8; index++)
{
ADC_CTL1 = (adc_chn << 4) | 0x01; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
adc_data = ADC_DATL; //Read low byte first! Lock ADC Value.
adc_data |= (uint16_t)(ADC_DATH << 8);
adc_plus_data += adc_data;
#ifdef _DEBUG_ADC
printf("adc4:%d,plus:%d.\r\n",(uint16_t)adc_data,(uint16_t)adc_plus_data);
#endif
adc_data = 0;
}
adc_data = adc_plus_data / 8;
#ifdef _DEBUG_ADC
printf("adc_chn1:%d.\r\n",(uint16_t)adc_data);
#endif
adc_plus_data = Vref_AdcValue(); //获取VREF
adc_data = (uint32_t)(adc_data) * VREF / adc_plus_data; //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("Adc,Vadc:%d,Vref:%d.\r\n", (uint16_t)adc_data, (uint16_t)adc_plus_data);
#endif
return adc_data;
}
#endif
#endif

View File

@ -0,0 +1,214 @@
/*
******************************************************************************
*
* @file adc.c
* @brief adc module
* @ic TP3102
*
* @version 1.0
* @date 2024/03/26 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/04 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "adc.h"
#include "system.h"
#include "sys_tim.h"
#if ADC_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
idata uint16_t g_VREF_Value = 0; //IREF 系统上电时采集一次。
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* uint16_t Vref_AdcValue(void)
*
* Description : Vref Value.ADC值
*
* Arguments : NONE
* Returns : Iref Value (mA)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t Vref_AdcValue(void)
{
uint16_t n_Vref_Data = 0;
uint32_t n_ADC_Plus = 0;
uint8_t index = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for( index=0; index<8; index++ )
{
ADC_CTL1 = (0x06 << 4) | 0x01; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
n_Vref_Data = ADC_DATL;
n_Vref_Data |= (uint16_t)(ADC_DATH << 8);
n_ADC_Plus += n_Vref_Data;
n_Vref_Data = 0;
}
n_Vref_Data = (uint16_t)(n_ADC_Plus / 8);
return n_Vref_Data;
}
/*
*******************************************************************************
* void Adc_Init(void)
*
* Description : ADC Initialization. ---
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void Adc_Init(void)
{
#if 0
SFRADDR = MFP_CTL0; //Set P01 Pinmux As AD1 Function
SFRDATA &= 0xCF;
SFRDATA |= 0x20;
#endif
#if ADC_CHN_ENABLE
SFRADDR = MFP_CTL1; //Set P04 Pinmux As AD3 Function
SFRDATA = 0x02;
SFRADDR = ADCCS_CTL0; //AD0~AD4 GPIO constant 20uA current source enable.
SFRDATA = 0x08;
#endif
g_VREF_Value = Vref_AdcValue();
}
/*
*******************************************************************************
* uint16_t Vbat_Value(void)
*
* Description : Vbat Value.
*
* Arguments : NONE
* Returns : Vbat Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
uint16_t Vbat_Value(void)
{
uint16_t n_Vbat_Data = 0;
uint32_t n_ADC_Plus = 0;
uint8_t index = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for( index=0; index<8; index++ )
{
ADC_CTL1 = (0x05 << 4) | 0x01; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
n_Vbat_Data = ADC_DATL;
n_Vbat_Data |= (uint16_t)(ADC_DATH << 8);
n_ADC_Plus += n_Vbat_Data;
n_Vbat_Data = 0;
}
n_Vbat_Data = (uint16_t)(n_ADC_Plus / 4); //Vbat采样值为二分压值。
n_Vbat_Data = (uint32_t)( (VREF * n_Vbat_Data) / g_VREF_Value ); //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("Get Adc Value,Vbat:%d,Vref:%d.\r\n",(uint16_t)n_Vbat_Data, (uint16_t)g_VREF_Value);
#endif
return n_Vbat_Data;
}
/*
*******************************************************************************
* uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn)
*
* Description : ADC_Chn_Value. ADC0 ~ ADC4
* Arguments : NONE
* Returns : ADC Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
#if ADC_CHN_ENABLE
uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn)
{
uint8_t index = 0;
uint16_t adc_data = 0;
uint16_t Vadx_data = 0;
uint32_t adc_plus_data = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for(index=0; index<8; index++)
{
ADC_CTL1 = (adc_chn << 4) | 0x01; //Channel set and Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
adc_data = ADC_DATL; //Read low byte first!
adc_data |= (uint16_t)(ADC_DATH << 8);
adc_plus_data += adc_data;
adc_data = 0;
}
adc_data = adc_plus_data / 8;
Vadx_data = (uint32_t)( (VREF * adc_data) / g_VREF_Value ); //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("Get Adc Value,Adc_Chn:%d,Vadc:%d,Vref:%d.\r\n", (uint16_t)(ADC_CTL1>>4), (uint16_t)Vadx_data, (uint16_t)g_VREF_Value);
#endif
return (uint16_t)Vadx_data;
}
#endif
#endif

View File

@ -0,0 +1,221 @@
/*
******************************************************************************
*
* @file adc.c
* @brief adc module
* @ic TP3102
*
* @version 1.0
* @date 2024/03/26 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/08/04 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "adc.h"
#include "system.h"
#include "sys_tim.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
idata uint16_t g_VREF_Value = 0; //IREF 系统上电时采集一次。
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* uint16_t Vref_AdcValue(void)
*
* Description : Vref Value.ADC值
*
* Arguments : NONE
* Returns : Iref Value (mA)
* Notes : NONE
*
*******************************************************************************
*/
#if ADC_ENABLE
uint16_t Vref_AdcValue(void)
{
uint16_t n_Vref_Data = 0;
uint32_t n_ADC_Plus = 0;
uint8_t index = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for(index=0;index<8;index++)
{
ADC_CTL1 = (0x06 << 4); //Channel set
ADC_CTL1 |= 1; //Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
n_Vref_Data = ADC_DATL;
n_Vref_Data += (uint16_t)(ADC_DATH<< 8);
n_ADC_Plus += n_Vref_Data;
n_Vref_Data = 0;
}
n_Vref_Data = n_ADC_Plus / 8;
#ifdef _DEBUG_ADC
printf("Get Adc Value,Vref:%d \r\n",(uint16_t)n_Vref_Data);
#endif
return n_Vref_Data;
}
#endif
/*
*******************************************************************************
* void Adc_Init(void)
*
* Description : ADC Initialization. ---
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
#if ADC_ENABLE
void Adc_Init(void)
{
#if 0
SFRADDR = MFP_CTL0; //Set P01 Pinmux As AD1 Function
SFRDATA &= 0xCF;
SFRDATA |= 0x20;
SFRADDR = MFP_CTL1; //Set P04 Pinmux As AD3 Function
SFRDATA |= 0x02;
SFRADDR = ADCCS_CTL0; //AD0~AD4 GPIO constant 20uA current source enable.
SFRDATA = 0x0A;
#endif
g_VREF_Value = Vref_AdcValue();
}
#endif
/*
*******************************************************************************
* uint16_t Vbat_Value(void)
*
* Description : Vbat Value.
*
* Arguments : NONE
* Returns : Vbat Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
#if ADC_ENABLE
uint16_t Vbat_Value(void)
{
uint16_t n_Vbat_Data = 0;
uint32_t n_ADC_Plus = 0;
uint8_t index = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for(index=0;index<8;index++)
{
ADC_CTL1 = (0x05 << 4); //Channel set
ADC_CTL1 |= 1; //Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
n_Vbat_Data = ADC_DATL;
n_Vbat_Data += (uint16_t)(ADC_DATH << 8);
n_ADC_Plus += n_Vbat_Data;
n_Vbat_Data = 0;
}
n_Vbat_Data = n_ADC_Plus / 4; //Vbat采样值为二分压值。
n_Vbat_Data = (uint32_t)(VREF * n_Vbat_Data / g_VREF_Value); //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("Get Adc Value,Vbat:%d \r\n",(uint16_t)n_Vbat_Data);
#endif
return n_Vbat_Data;
}
#endif
/*
*******************************************************************************
* uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn)
*
* Description : ADC_Chn_Value. ADC0 ~ ADC4
* Arguments : NONE
* Returns : ADC Value (mV)
* Notes : NONE
*
*******************************************************************************
*/
#if ADC_ENABLE
uint16_t ADC_Chn_Value(ADC_CHANNELS_E adc_chn)
{
uint8_t index = 0;
uint16_t adc_data = 0;
uint16_t Vadx_data = 0;
uint32_t adc_plus_data = 0;
SFRADDR = ADC_CTL0;
SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k
for(index=0; index<8; index++)
{
ADC_CTL1 = (adc_chn << 4); //Channel set
ADC_CTL1 |= 1; //Start conversion
while(ADC_CTL1 & 0x01); //Wait for conversion complete
adc_data = ADC_DATL; //Read low byte first!
adc_data += (u16)(ADC_DATH << 8);
adc_plus_data += adc_data;
adc_data = 0;
}
adc_data = adc_plus_data / 8;
Vadx_data = (uint32_t)(VREF * adc_data / g_VREF_Value); //Vadx = VREF*DATAadx/DATAvref
#ifdef _DEBUG_ADC
printf("Get Adc Value,Adc_Chn:%d,Adc:%d \r\n",ADC_CTL1>>4,Vadx_data);
#endif
return (uint16_t)Vadx_data;
}
#endif

View File

@ -0,0 +1,53 @@
/*
******************************************************************************
*
* @file adc.h
* @brief adc module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __ADC_H__
#define __ADC_H__
#include "define.h"
#if ADC_ENABLE
#define VREF 1000
extern idata uint16_t Vbat_Adc;
extern uint16_t Vbat_Value(void);
typedef enum {
ADC_CH0 = 0x00,
ADC_CH1,
ADC_CH2,
ADC_CH3,
ADC_CH4,
ADC_BAT,
ADC_VREF,
}ADC_CHANNELS_E;
#ifdef ADC_NTC_ENABLE
extern uint16_t ADC_NTC_Value(void);
#endif
#endif
#endif

View File

@ -0,0 +1,127 @@
/*
******************************************************************************
*
* @file bat.c
* @brief Voltage-based RC model gauge algorithm
*
*
* @version 1.0
* @date 2023/02/20 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/02/20 Alex build this file
******************************************************************************
*/
#include "bat.h"
#include "adc.h"
idata uint8_t bat_level = 0;
#if BAT_VALUE
#define C_offset_bat_level_MAX 50
#define C_offset_bat_level_MIN 10
#define C_bat_level_protect 0
#define C_bat_level_lowpower 1
bit F_batlevel_low ; //电池低压
bit F_batlevel_protect ;
idata uint8_t offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
#define C_batLevel_SetMax 10
/*充电电池电压会浮高,具体电压需要测试。*/
const uint16_t Boost_batlevel_Threshold[C_batLevel_SetMax] =
{
3000, //1
3100, //2
3300, //3
3400, //4
3500, //5
3650, //6
3800, //7
3900, //8
4050, //9
4200 //10
};
const uint16_t Charging_batlevel_Threshold1[C_batLevel_SetMax] =
{
3050, //1
3150, //2
3350, //3
3450, //4
3550, //5
3700, //6
3850, //7
3950, //8
4100, //9
4200 //10
};
void check_bat_level(void)
{
uint8_t i = 0;
//get bat level
#if ADC_ENABLE
for(i=0; i < C_batLevel_SetMax; i++)
{
if(CHIP_STA4 & 0x80) //充电
{
if( Vbat_Adc < Charging_batlevel_Threshold1[i] )
break;
}
else //放电
{
if( Vbat_Adc < Boost_batlevel_Threshold[i] )
{
break;
}
}
}
#endif
if( i > bat_level )
{
offset_bat_level++;
}
else
{
offset_bat_level--;
}
//debounce
if( (offset_bat_level > C_offset_bat_level_MAX) || (offset_bat_level < C_offset_bat_level_MIN) )
{
//update
bat_level = i;
offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
}
if( bat_level <= C_bat_level_protect )
{
F_batlevel_protect = 1;
}
else if( bat_level > ( C_bat_level_protect + 1 ) )
{
F_batlevel_protect = 0;
}
if( bat_level <= C_bat_level_lowpower )
{
F_batlevel_low = 1;
}
else if( bat_level > (C_bat_level_lowpower + 1) )
{
F_batlevel_low = 0;
}
}
#endif

View File

@ -0,0 +1,38 @@
/*
******************************************************************************
*
* @file bat.h
* @brief bat module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __BAT_H__
#define __BAT_H__
#include "define.h"
extern idata uint8_t bat_level;
extern bit F_batlevel_low; //µç³ØµÍѹ
#if BAT_VALUE
extern bit F_batlevel_protect; //µÍµç±£»¤
extern void check_bat_level(void);
#endif
#endif

View File

@ -0,0 +1,128 @@
/*
******************************************************************************
*
* @file bat.c
* @brief Voltage-based RC model gauge algorithm
*
*
* @version 1.0
* @date 2023/02/20 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/02/20 Alex build this file
******************************************************************************
*/
#include "bat.h"
#include "adc.h"
idata uint8_t bat_level = 0;
bit F_batlevel_low = 0; //电池低压
#if BAT_VALUE
#define C_offset_bat_level_MAX 50
#define C_offset_bat_level_MIN 10
#define C_bat_level_protect 0
#define C_bat_level_lowpower 1
bit F_batlevel_protect = 0; //低电保护
idata uint8_t offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
#define C_batLevel_SetMax 10
/*充电电池电压会浮高,具体电压需要测试。*/
const uint16_t Boost_batlevel_Threshold[C_batLevel_SetMax] =
{
3000, //1
3100, //2
3300, //3
3400, //4
3500, //5
3650, //6
3800, //7
3900, //8
4050, //9
4200 //10
};
const uint16_t Charging_batlevel_Threshold1[C_batLevel_SetMax] =
{
3050, //1
3150, //2
3350, //3
3450, //4
3550, //5
3700, //6
3850, //7
3950, //8
4100, //9
4200 //10
};
void check_bat_level(void)
{
uint8_t i = 0;
//get bat level
#if ADC_ENABLE
for(i=0; i < C_batLevel_SetMax; i++)
{
if(CHIP_STA4 & 0x80) //充电
{
if( Vbat_Adc < Charging_batlevel_Threshold1[i] )
break;
}
else //放电
{
if( Vbat_Adc < Boost_batlevel_Threshold[i] )
{
break;
}
}
}
#endif
if( i > bat_level )
{
offset_bat_level++;
}
else
{
offset_bat_level--;
}
//debounce
if( (offset_bat_level > C_offset_bat_level_MAX) || (offset_bat_level < C_offset_bat_level_MIN) )
{
//update
bat_level = i;
offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
}
if( bat_level <= C_bat_level_protect )
{
F_batlevel_protect = 1;
}
else if( bat_level > ( C_bat_level_protect + 1 ) )
{
F_batlevel_protect = 0;
}
if( bat_level <= C_bat_level_lowpower )
{
F_batlevel_low = 1;
}
else if( bat_level > (C_bat_level_lowpower + 1) )
{
F_batlevel_low = 0;
}
}
#endif

View File

@ -0,0 +1,95 @@
/*
******************************************************************************
*
* @file bat.c
* @brief Voltage-based RC model gauge algorithm
*
*
* @version 1.0
* @date 2023/02/20 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/02/20 Alex build this file
******************************************************************************
*/
#include "bat.h"
#include "adc.h"
#if BAT_VALUE
#define C_offset_bat_level_MAX 50
#define C_offset_bat_level_MIN 10
#define C_bat_level_protect 0
#define C_bat_level_lowpower 1
bit F_batlevel_low ;
bit F_batlevel_protect ;
idata uint8_t offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
idata uint8_t bat_level = 0;
#define C_batLevel_SetMax 5
const uint16_t C_batlevel_Threshold[C_batLevel_SetMax] =
{
3000, //1
3300, //2
3650, //3
4000, //4
4200 //5
};
void check_bat_level(void)
{
uint8_t i = 0;
//get bat level
#if ADC_ENABLE
for(i=0; i < C_batLevel_SetMax; i++)
{
if( Vbat_Adc < C_batlevel_Threshold[i] )
break;
}
#endif
if( i > bat_level )
{
offset_bat_level ++;
}
else
{
offset_bat_level --;
}
//debounce
if( (offset_bat_level >C_offset_bat_level_MAX) || (offset_bat_level < C_offset_bat_level_MIN) )
{
//update
bat_level = i;
offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
}
if( bat_level <= C_bat_level_protect )
{
F_batlevel_protect = 1;
}
else if( bat_level > ( C_bat_level_protect+1 ) )
{
F_batlevel_protect = 0;
}
if( bat_level <= C_bat_level_lowpower )
{
F_batlevel_low = 1;
}
else if( bat_level > (C_bat_level_lowpower+1) )
{
F_batlevel_low = 0;
}
}
#endif

View File

@ -0,0 +1,35 @@
/*
******************************************************************************
*
* @file bat.h
* @brief bat module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __BAT_H__
#define __BAT_H__
#include "define.h"
extern idata uint8_t bat_level;
#if BAT_VALUE
extern void check_bat_level(void);
#endif
#endif

View File

@ -0,0 +1,28 @@
/*
******************************************************************************
*
* @file bat.h
* @brief bat module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __BAT_H__
#define __BAT_H__
#include "define.h"
//extern idata uint8_t bat_level;
#endif

View File

@ -0,0 +1,24 @@
/*
******************************************************************************
*
* @file bat.c
* @brief Voltage-based RC model gauge algorithm
*
*
* @version 1.0
* @date 2023/02/20 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/02/20 Alex build this file
******************************************************************************
*/
#include "bat.h"
#include "adc.h"
//idata uint8_t bat_level = 0;

View File

@ -0,0 +1,30 @@
/*
******************************************************************************
*
* @file bat.h
* @brief bat module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __BAT_H__
#define __BAT_H__
#include "define.h"
extern idata uint8_t bat_level;
#endif

View File

@ -0,0 +1,34 @@
/*
******************************************************************************
*
* @file bat.h
* @brief bat module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __BAT_H__
#define __BAT_H__
#include "define.h"
#if BAT_VALUE
extern idata uint8_t bat_level;
extern void check_bat_level(void);
#endif
#endif

View File

@ -0,0 +1,93 @@
/*
******************************************************************************
*
* @file bat.c
* @brief Voltage-based RC model gauge algorithm
*
*
* @version 1.0
* @date 2023/02/20 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/02/20 Alex build this file
******************************************************************************
*/
#include "bat.h"
#include "adc.h"
#if BAT_VALUE
#define C_offset_bat_level_MAX 50
#define C_offset_bat_level_MIN 10
#define C_bat_level_protect 0
#define C_bat_level_lowpower 1
bit F_batlevel_low ;
bit F_batlevel_protect ;
idata uint8_t offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
idata uint8_t bat_level = 0;
#define C_batLevel_SetMax 5
const uint16_t C_batlevel_Threshold[C_batLevel_SetMax] =
{
2900, //1
3300, //2
3450, //3
4200, //4
4500 //5
};
void check_bat_level(void)
{
uint8_t i = 0;
//get bat level
for(i=0; i < C_batLevel_SetMax; i++)
{
if(Vbat_Adc < C_batlevel_Threshold[i])
break;
}
if(i > bat_level)
{
offset_bat_level ++;
}
else
{
offset_bat_level --;
}
//debounce
if((offset_bat_level >C_offset_bat_level_MAX) || (offset_bat_level < C_offset_bat_level_MIN))
{
//update
bat_level = i;
offset_bat_level = (C_offset_bat_level_MAX+C_offset_bat_level_MIN)/2;
}
if( bat_level <= C_bat_level_protect )
{
F_batlevel_protect = 1;
}
else if( bat_level > ( C_bat_level_protect+1 ) )
{
F_batlevel_protect = 0;
}
if( bat_level <= C_bat_level_lowpower )
{
F_batlevel_low = 1;
}
else if( bat_level > (C_bat_level_lowpower+1) )
{
F_batlevel_low = 0;
}
}
#endif

View File

@ -0,0 +1,24 @@
/*
******************************************************************************
*
* @file bat.c
* @brief Voltage-based RC model gauge algorithm
*
*
* @version 1.0
* @date 2023/02/20 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/02/20 Alex build this file
******************************************************************************
*/
#include "bat.h"
#include "adc.h"
idata uint8_t bat_level = 0;

View File

@ -0,0 +1,37 @@
/*
******************************************************************************
*
* @file bat.h
* @brief bat module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __BAT_H__
#define __BAT_H__
#include "define.h"
extern idata uint8_t bat_level;
#if BAT_VALUE
extern bit F_batlevel_low; //µç³ØµÍѹ
extern bit F_batlevel_protect; //µÍµç±£»¤
extern void check_bat_level(void);
#endif
#endif

View File

@ -0,0 +1,127 @@
/*
******************************************************************************
*
* @file bat.c
* @brief Voltage-based RC model gauge algorithm
*
*
* @version 1.0
* @date 2023/02/20 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/02/20 Alex build this file
******************************************************************************
*/
#include "bat.h"
#include "adc.h"
idata uint8_t bat_level = 0;
#if BAT_VALUE
#define C_offset_bat_level_MAX 50
#define C_offset_bat_level_MIN 10
#define C_bat_level_protect 0
#define C_bat_level_lowpower 1
bit F_batlevel_low = 0; //电池低压
bit F_batlevel_protect = 0; //低电保护
idata uint8_t offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
#define C_batLevel_SetMax 10
/*充电电池电压会浮高,具体电压需要测试。*/
const uint16_t Boost_batlevel_Threshold[C_batLevel_SetMax] =
{
3000, //1
3100, //2
3300, //3
3400, //4
3500, //5
3650, //6
3800, //7
3900, //8
4050, //9
4200 //10
};
const uint16_t Charging_batlevel_Threshold1[C_batLevel_SetMax] =
{
3050, //1
3150, //2
3350, //3
3450, //4
3550, //5
3700, //6
3850, //7
3950, //8
4100, //9
4200 //10
};
void check_bat_level(void)
{
uint8_t i = 0;
//get bat level
#if ADC_ENABLE
for(i=0; i < C_batLevel_SetMax; i++)
{
if(CHIP_STA4 & 0x80) //充电
{
if( Vbat_Adc < Charging_batlevel_Threshold1[i] )
break;
}
else //放电
{
if( Vbat_Adc < Boost_batlevel_Threshold[i] )
{
break;
}
}
}
#endif
if( i > bat_level )
{
offset_bat_level++;
}
else
{
offset_bat_level--;
}
//debounce
if( (offset_bat_level > C_offset_bat_level_MAX) || (offset_bat_level < C_offset_bat_level_MIN) )
{
//update
bat_level = i;
offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
}
if( bat_level <= C_bat_level_protect )
{
F_batlevel_protect = 1;
}
else if( bat_level > ( C_bat_level_protect + 1 ) )
{
F_batlevel_protect = 0;
}
if( bat_level <= C_bat_level_lowpower )
{
F_batlevel_low = 1;
}
else if( bat_level > (C_bat_level_lowpower + 1) )
{
F_batlevel_low = 0;
}
}
#endif

View File

@ -0,0 +1,294 @@
/*
******************************************************************************
*
* @file charger_module.c
* @brief charger module
*
*
* @version 1.0
* @date 2022/07/12 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/07/12 Alex build this file
******************************************************************************
*/
/*_____ I N C L U D E S ____________________________________________________*/
#include "charger_module.h"
#include "adc.h"
#include "sys_tim.h"
#include "discharge_module.h"
#include "system.h"
#include "vox_module.h"
#include "led.h"
#if CHARGER_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define NTC_PRO_DEBOUNCE_TIM 10
/******************************************************************************\
Variables definitions
\******************************************************************************/
idata TE_CHG_STA ChgStatus; // 系统状态定义
#ifdef ADC_NTC_ENABLE
bit NTC_Low_Pro_Flag = 0;
bit NTC_High_Pro_Flag = 0;
uint8_t NTC_Pro_Debounce_Cnt = 0;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Charger_init(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Init(void)
{
SFRADDR = PMU_CTL1;
SFRDATA |= 0x07; //电池低压检测 enable 信号电池低压检测档位选择3.3V
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
/*
*******************************************************************************
* void Charger_Current_Set(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Current_Set(void)
{
uint16_t Charger_CurADC_Value = 0;
/* 通过外部电阻ADC1值设置充电电流值 */
Charger_CurADC_Value = ADC_Chn_Value(ADC_CH1);
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
/*
*******************************************************************************
* uint8_t Charger_NTC_Control(uint8_t Charge_sta)
*
* Description : Charger NTC Control
* NTC 103 104 NTC ADC NTC
* 线 103 NTC 8.2k
* 20uA 103 NTC 10k 104 NTC 82k
* 使NTC NTC NTC
* NTC 0VNTC
* 250ms
*
* Arguments : NTC_Protect_Type_e NTC_Type:Shield JEITA or IEC;Charge_sta:Charge or not
* Returns :NTC_Flag (0:Shield; 1:JEITA; 2:IEC)
* Notes : NONE
*
*******************************************************************************
*/
uint8_t PMU_NTC_Control(void)
{
uint16_t NTC_Adc = 0;
uint8_t NTC_Flag = TRUE;
#ifdef ADC_NTC_ENABLE
NTC_Adc = ADC_NTC_Value();
if(NTC_Adc >= 0x2FF) ////屏蔽NTC功能NTC浮空屏蔽 NTC 功能,并锁定。
{
return NTC_Flag;
}
if(CHIP_STA4 & 0x80)
{
if(NTC_Adc <= T_0C && NTC_Adc > T_45C) //正常充电
{
if(NTC_Low_Pro_Flag)
{
if( NTC_Adc < T_3C )
{
NTC_Low_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
if(NTC_High_Pro_Flag)
{
if( NTC_Adc > T_42C )
{
NTC_High_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
}
else //异常不充电
{
NTC_Pro_Debounce_Cnt++;
if(NTC_Pro_Debounce_Cnt > NTC_PRO_DEBOUNCE_TIM) //100ms
{
NTC_Pro_Debounce_Cnt = 0;
if(NTC_Adc > T_0C)
{
NTC_Low_Pro_Flag = 1;
}
else
if(NTC_Adc < T_45C)
{
NTC_High_Pro_Flag = 1;
}
CHG_CTL &= ~0x01; //Disable Charger.
NTC_Flag = FALSE;
}
}
}
#endif
return NTC_Flag;
}
/*
*******************************************************************************
* void Charger_Handler(void)
*
* Description : Charger Handle. ---- NTC
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
/*
1使VIN拔出
*/
void Charger_Handler(void)
{
#if 1
if( !(CHIP_STA4 & 0x80) ) //未检测到Power good,则关闭Charger使能后返回。
{
CHG_CTL &= ~0x01; //Disable Charger
IRQ_FLAG9 = 0x10; //未充电需清Charg complete interrupt中断
ChgStatus = CHG_STA_PULLOUT;
return;
}
/*各项保护都无需软件处理只处理充电超时超时后需要等VBUS重新插拔后才重新开始Charger流程。*/
if ( IRQ_FLAG9 & 0x0C ) //充电超时,Tricle charg and Fast charge timeout
{
CHG_CTL &= ~0x01; //Disable Charger
if ( IRQ_FLAG10 & 0xC0 ) //Plugin\Plugout interrupt
{
IRQ_FLAG9 = 0x0C;
IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
}
return;
}
else /*充电未超时存在Plug则清Plugin\Plugout int*/
{
if( IRQ_FLAG10 & 0xC0 )
{
IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
}
}
/*NTC Handle*/ //使能Charger前先检测NTC温度异常就不开充电。(CHIP_STA4 & 0x80):PG
if( PMU_NTC_Control() == FALSE ) //NTC保护不充电。
{
return;
}
if( IRQ_FLAG9 & 0x10 ) //Charg complete interrupt
{
#if ADC_ENABLE
#ifdef _DEBUG_CHARGER
printf("Chg Done\r\n");
#endif
if( Vbat_Adc < BAT_RECHARG )
{
//CHG_CTL |= 0x01; //Enable Charger
IRQ_FLAG9 = 0x10;
#ifdef _DEBUG_CHARGER
printf("En Chg\r\n");
#endif
}
else
{
CHG_CTL &= ~0x01; //Disable Charger
#ifdef _DEBUG_CHARGER
printf("Dis Chg\r\n");
#endif
}
ChgStatus = CHG_STA_COMPLETED;
#endif
}
else
{
CHG_CTL |= 0x01; //Enable Charger
ChgStatus = CHG_STA_ING;
}
#endif
}
#endif

View File

@ -0,0 +1,288 @@
/*
******************************************************************************
*
* @file charger_module.c
* @brief charger module
*
*
* @version 1.0
* @date 2022/07/12 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/07/12 Alex build this file
******************************************************************************
*/
/*_____ I N C L U D E S ____________________________________________________*/
#include "charger_module.h"
#include "adc.h"
#include "sys_tim.h"
#include "discharge_module.h"
#include "system.h"
#include "vox_module.h"
#include "led.h"
#if CHARGER_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define NTC_PRO_DEBOUNCE_TIM 10
/******************************************************************************\
Variables definitions
\******************************************************************************/
//idata TE_CHG_STA ChgStatus; // 系统状态定义
bit Charger_Done = 0;
#ifdef ADC_NTC_ENABLE
bit NTC_Low_Pro_Flag = 0;
bit NTC_High_Pro_Flag = 0;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Charger_init(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Init(void)
{
SFRADDR = PMU_CTL1;
SFRDATA |= 0x07; //电池低压检测 enable 信号电池低压检测档位选择3.3V
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
/*
*******************************************************************************
* void Charger_Current_Set(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Current_Set(void)
{
uint16_t Charger_CurADC_Value = 0;
/* 通过外部电阻ADC1值设置充电电流值 */
Charger_CurADC_Value = ADC_Chn_Value(ADC_CH1);
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
/*
*******************************************************************************
* uint8_t Charger_NTC_Control(uint8_t Charge_sta)
*
* Description : Charger NTC Control
* NTC 103 104 NTC ADC NTC
* 线 103 NTC 8.2k
* 20uA 103 NTC 10k 104 NTC 82k
* 使NTC NTC NTC
* NTC 0VNTC
* 100ms
*
* Arguments : NTC_Protect_Type_e NTC_Type:Shield JEITA or IEC;Charge_sta:Charge or not
* Returns :NTC_Flag (0:Shield; 1:JEITA; 2:IEC)
* Notes : NONE
*
*******************************************************************************
*/
#ifdef ADC_NTC_ENABLE
uint8_t PMU_NTC_Control(void)
{
uint16_t NTC_Adc = 0;
uint8_t NTC_Flag = TRUE;
NTC_Adc = ADC_NTC_Value();
if(NTC_Adc >= 0x2FF) ////屏蔽NTC功能NTC浮空屏蔽 NTC 功能,并锁定。
{
return TRUE;
}
if(CHIP_STA4 & 0x80)
{
if(NTC_Adc <= T_0C && NTC_Adc > T_45C) //正常充电
{
if(NTC_Low_Pro_Flag)
{
if( NTC_Adc < T_3C )
{
NTC_Low_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
if(NTC_High_Pro_Flag)
{
if( NTC_Adc > T_42C )
{
NTC_High_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
}
else //异常不充电
{
if(NTC_Adc > T_0C)
{
NTC_Low_Pro_Flag = 1;
}
else
if(NTC_Adc < T_45C)
{
NTC_High_Pro_Flag = 1;
}
CHG_CTL &= ~0x01; //Disable Charger.
NTC_Flag = FALSE;
}
}
return NTC_Flag;
}
#endif
/*
*******************************************************************************
* void Charger_Handler(void)
*
* Description : Charger Handle. ---- NTC
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
/*
1使VIN拔出
*/
void Charger_Handler(void)
{
#if 1
if( !(CHIP_STA4 & 0x80) ) //未检测到Power good,则关闭Charger使能后返回。
{
CHG_CTL &= ~0x01; //Disable Charger
IRQ_FLAG9 = 0x10; //未充电需清Charg complete interrupt中断
Charger_Done = 0;
return;
}
/*各项保护都无需软件处理只处理充电超时超时后需要等VBUS重新插拔后才重新开始Charger流程。*/
if ( IRQ_FLAG9 & 0x0C ) //充电超时,Tricle charg and Fast charge timeout
{
CHG_CTL &= ~0x01; //Disable Charger
if ( IRQ_FLAG10 & 0xC0 ) //Plugin\Plugout interrupt
{
IRQ_FLAG9 = 0x0C;
IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
}
return;
}
else /*充电未超时存在Plug则清Plugin\Plugout int*/
{
if( IRQ_FLAG10 & 0xC0 )
{
IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
}
}
#ifdef ADC_NTC_ENABLE
/*NTC Handle*/ //使能Charger前先检测NTC温度异常就不开充电。(CHIP_STA4 & 0x80):PG
if( PMU_NTC_Control() == FALSE ) //NTC保护不充电。
{
return;
}
#endif
if( IRQ_FLAG9 & 0x10 ) //Charg complete interrupt
{
#if ADC_ENABLE
#ifdef _DEBUG_CHARGER
printf("Chg Done\r\n");
#endif
if( Vbat_Adc < BAT_RECHARG )
{
//CHG_CTL |= 0x01; //Enable Charger
IRQ_FLAG9 = 0x10;
#ifdef _DEBUG_CHARGER
printf("En Chg\r\n");
#endif
}
else
{
CHG_CTL &= ~0x01; //Disable Charger
#ifdef _DEBUG_CHARGER
printf("Dis Chg\r\n");
#endif
}
Charger_Done = 1;
#endif
}
else
{
CHG_CTL |= 0x01; //Enable Charger
Charger_Done = 0;
}
#endif
}
#endif

View File

@ -0,0 +1,415 @@
/*
******************************************************************************
*
* @file charger_module.c
* @brief charger module
*
*
* @version 1.0
* @date 2022/07/12 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/07/12 Alex build this file
******************************************************************************
*/
/*_____ I N C L U D E S ____________________________________________________*/
#include "charger_module.h"
#include "adc.h"
#include "sys_tim.h"
#include "discharge_module.h"
#include "system.h"
#include "vox_module.h"
#if CHARGER_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define NTC_PRO_DEBOUNCE_TIM 10
/******************************************************************************\
Variables definitions
\******************************************************************************/
bit Charger_Done = 0;
bit NTC_Low_Pro_Flag = 0;
bit NTC_High_Pro_Flag = 0;
uint8_t NTC_Pro_Debounce_Cnt = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Charger_init(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Init(void)
{
//SFRADDR = PMU_CTL1;
//SFRDATA |= 0x07; //电池低压检测 enable 信号电池低压检测档位选择3.3V
/* Setting CV */
// REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
// REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
#if SET_CHG_TIM
/* Set Charge Time*/
Set_Charger_Time();
#endif
CHG_CTL &= ~0x80;
}
#endif
/*
*******************************************************************************
* void Set_Charge_Time(void)
*
* Description : Set Charger Time
*
* Arguments : void
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if SET_CHG_TIM
void Set_Charger_Time(void)
{
CHG_CTL &= 0xF0;
CHG_CTL |= 0x10; //Safety timer enable
CHG_CTL |= 0x01 << 3; //设置涓流时间0:1 hour;1:2:hours
CHG_CTL |= 0x03 << 2; //设置恒流恒压时间:00:3 hours;01:5 hours;10:8 hours;11:13 hours
}
#endif
/*
*******************************************************************************
* uint8_t Charger_NTC_Control(uint8_t Charge_sta)
*
* Description : Charger NTC Control
* NTC 103 104 NTC ADC NTC
* 线 103 NTC 8.2k
* 20uA 103 NTC 10k 104 NTC 82k
* 使NTC NTC NTC
* NTC 0VNTC
* 250ms
*
* Arguments : NTC_Protect_Type_e NTC_Type:Shield JEITA or IEC;Charge_sta:Charge or not
* Returns :NTC_Flag (0:Shield; 1:JEITA; 2:IEC)
* Notes : NONE
*
*******************************************************************************
*/
uint8_t PMU_NTC_Control(void)
{
uint16_t NTC_Adc = 0;
uint8_t NTC_Flag = TRUE;
#if ADC_CHN_ENABLE
NTC_Adc = ADC_Chn_Value(ADC_CH4);
if(NTC_Adc >= 0x2FF) ////屏蔽NTC功能NTC浮空屏蔽 NTC 功能,并锁定。
{
return NTC_Flag;
}
if(CHIP_STA4 & 0x80)
{
if(NTC_Adc <= T_0C && NTC_Adc > T_45C) //正常充电
{
NTC_Flag = TRUE;
if(NTC_Low_Pro_Flag)
{
if( NTC_Adc < T_3C )
{
NTC_Low_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
if(NTC_High_Pro_Flag)
{
if( NTC_Adc > T_42C )
{
NTC_High_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
}
else //异常不充电
{
NTC_Pro_Debounce_Cnt++;
if(NTC_Pro_Debounce_Cnt > NTC_PRO_DEBOUNCE_TIM) //100ms
{
NTC_Pro_Debounce_Cnt = 0;
if(NTC_Adc > T_0C)
{
NTC_Low_Pro_Flag = 1;
}
else
if(NTC_Adc < T_45C)
{
NTC_High_Pro_Flag = 1;
}
CHG_CTL &= ~0x01; //Disable Charger.
#ifdef _DEBUG_CHARGER
printf("NTC Pro!NTC_Adc:%d,CHG_CTL:0x%x,(line:%d)\r\n",(uint16)NTC_Adc,(uint16)CHG_CTL,(uint16)__LINE__);
#endif
NTC_Flag = FALSE;
}
}
}
#endif
return NTC_Flag;
}
/*
*******************************************************************************
* void Charger_Protect_Handle(void)
*
* Description : Charger Protect Handle( UVLO NTC ICH )
*
* Arguments : NONE
* Returns :uint8_t Protect_Type_Flg (bit0~bit8分别代表不同的保护类型)
* Notes : NONE
*
*******************************************************************************
*/
uint8_t Charger_Protect_Handle(void)
{
uint8_t Pro_Flag = TRUE;
if( CHIP_STA3 & 0x02 ) //过温(Die ot)保护
{
Protect_Type_Flg |= DIE_OT_PRO_TYPE;
#ifdef _DEBUG_CHARGER
printf("Chg Pro DIR OT!\r\n");
#endif
return FALSE;
}
if( CHIP_STA3 & 0x20 ) //VIN Over voltage
{
Protect_Type_Flg |= VBUS_OVERVOL_PRO_TYPE;
#ifdef _DEBUG_CHARGER
printf("Chg Pro Over Vol!\r\n");
#endif
return FALSE;
}
if(Protect_Type_Flg & VBUS_OVERVOL_PRO_TYPE)
{
if( !(CHIP_STA3 & 0x20) ) //系统解除VBUS Over Vol后进入正常工作模式清标志位。
{
Protect_Type_Flg &= ~VBUS_OVERVOL_PRO_TYPE;
Pro_Flag = TRUE;
}
}
if( CHIP_STA4 & 0x10 ) //Charger BAT over voltage
{
Protect_Type_Flg |= BAT_OVERVOL_PRO_TYPE;
#ifdef _DEBUG_CHARGER
printf("Chg Pro Bat Over Vol!\r\n");
#endif
return FALSE;
}
if(Protect_Type_Flg & BAT_OVERVOL_PRO_TYPE)
{
if( !(CHIP_STA4 & 0x10) ) //系统解除Charger BAT over voltage后进入正常工作模式清标志位。
{
Protect_Type_Flg &= ~BAT_OVERVOL_PRO_TYPE;
Pro_Flag = TRUE;
}
}
return Pro_Flag;
}
/*
*******************************************************************************
* uint8_t VIN_Detect_Handle(void)
*
* Description : VIN Detect Handle
*
* Arguments : NONE
* Returns : Plug State (0:NO Plug; 1:Plug Out; 2:Plug In)
* Notes : NONE
*
*******************************************************************************
*/
#if 0
uint8_t VIN_Detect_Handle(void)
{
uint8_t VIN_Plug_State = 0;
switch(g_Plug_Irq_Flg)
{
case 0:
VIN_Plug_State = 0;
break;
case VBUS_PLGOUT_FLG:
VIN_Plug_State = 1;
Charger_Done = 0;
#ifdef _DEBUG_CHARGER
printf("Vin PlugOut(line:%d)\r\n",(uint16)__LINE__);
#endif
#if 1
/* 充电过程中 VIN 拔出,会触发 DPMDPM 功能可以通过软件关闭! */
if(CHIP_STA4 & 0x40) //Charger vin DPM status
{
SFRADDR = REG_CHG0;
SFRDATA &= ~0x04; //关闭DPM环
}
#endif
break;
case VBUS_PLGIN_FLG:
if(CHIP_STA4 & 0x80) //Power Good
{
VIN_Plug_State = 2;
g_Bat_Det_Flag = 1;
#ifdef _DEBUG_CHARGER
printf("Vin PlugIn(line:%d)\r\n",(uint16)__LINE__);
#endif
}
break;
default:
break;
}
g_Plug_Irq_Flg = 0;
return VIN_Plug_State;
}
#endif
/*
*******************************************************************************
* void Charger_Handler(void)
*
* Description : Charger Handle. ---- NTC
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
/*
1使VIN拔出
*/
void Charger_Handler(void)
{
uint8_t Ret = 0;
uint16_t Bat_Adc = 0;
Ret = Charger_Protect_Handle(); //Get Charger Protect Type.
if(Ret == FALSE) //保护,不开启后续充电。
{
CHG_CTL &= ~0x01; //Disable Charger
return;
}
/*NTC Handle*/
Ret = PMU_NTC_Control(); //使能Charger前先检测NTC温度异常就不开充电。(CHIP_STA4 & 0x80):PG
if(Ret == FALSE) //NTC保护不充电。
{
return;
}
if( !(CHIP_STA4 & 0x80) ) //未检测到Power good,则关闭Charger使能后返回。
{
CHG_CTL &= ~0x01; //Disable Charger
Charger_Done = 0;
return;
}
if( Charger_Done )
{
#if ADC_ENABLE
Bat_Adc = Vbat_Value(); //获取Bat电压
#ifdef _DEBUG_CHARGER
printf("Charge Done!\r\n");
#endif
#endif
if( Bat_Adc < BAT_RECHARG )
{
CHG_CTL |= 0x01; //Enable Charger
Charger_Done = 0;
#ifdef _DEBUG_CHARGER
printf("Enable Charge!\r\n");
#endif
}
else
{
CHG_CTL &= ~0x01; //Disable Charger
#ifdef _DEBUG_CHARGER
printf("Disable Charge!\r\n");
#endif
}
}
else
{
CHG_CTL |= 0x01; //Enable Charger
}
}
#endif

View File

@ -0,0 +1,64 @@
/*
******************************************************************************
*
* @file Charger_module.h
* @brief charger module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __CHARGER_MODULE_H__
#define __CHARGER_MODULE_H__
#include "define.h"
// 充电状态定义
typedef enum
{
CHG_STA_ING, // 充电中
CHG_STA_COMPLETED, // 充电完成
CHG_STA_PULLOUT, // 充电器拔出
} TE_CHG_STA;
extern idata TE_CHG_STA ChgStatus; // 系统状态定义
#if CHARGER_ENABLE
/*充电电流设置在系统初始化时通过配置寄存器REG_CHG1配置。
REG_CHG1 = CHG_CURRENT_300MA;
*/
#define CHG_CURRENT_100MA 0x00
#define CHG_CURRENT_200MA 0x01
#define CHG_CURRENT_250MA 0x02
#define CHG_CURRENT_300MA 0x03
#define CHG_CURRENT_350MA 0x04
#define CHG_CURRENT_400MA 0x05
#define CHG_CURRENT_450MA 0x06
#define CHG_CURRENT_500MA 0x07
#define CHG_CONSTANT_CUR_TIM 1
#define DIE_OT_RECOVER_TIM 25 //NTC保护后恢复正常后等待250ms重新开启充电
extern void Charger_Handler(void);
#endif
#endif

View File

@ -0,0 +1,291 @@
/*
******************************************************************************
*
* @file charger_module.c
* @brief charger module
*
*
* @version 1.0
* @date 2022/07/12 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/07/12 Alex build this file
******************************************************************************
*/
/*_____ I N C L U D E S ____________________________________________________*/
#include "charger_module.h"
#include "adc.h"
#include "sys_tim.h"
#include "discharge_module.h"
#include "system.h"
#include "vox_module.h"
#include "led.h"
#if CHARGER_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define NTC_PRO_DEBOUNCE_TIM 10
/******************************************************************************\
Variables definitions
\******************************************************************************/
#if ADC_CHN_ENABLE
bit NTC_Low_Pro_Flag = 0;
bit NTC_High_Pro_Flag = 0;
uint8_t NTC_Pro_Debounce_Cnt = 0;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Charger_init(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Init(void)
{
SFRADDR = PMU_CTL1;
SFRDATA |= 0x07; //电池低压检测 enable 信号电池低压检测档位选择3.3V
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
/*
*******************************************************************************
* void Charger_Current_Set(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Current_Set(void)
{
uint16_t Charger_CurADC_Value = 0;
/* 通过外部电阻ADC1值设置充电电流值 */
Charger_CurADC_Value = ADC_Chn_Value(ADC_CH1);
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
/*
*******************************************************************************
* uint8_t Charger_NTC_Control(uint8_t Charge_sta)
*
* Description : Charger NTC Control
* NTC 103 104 NTC ADC NTC
* 线 103 NTC 8.2k
* 20uA 103 NTC 10k 104 NTC 82k
* 使NTC NTC NTC
* NTC 0VNTC
* 250ms
*
* Arguments : NTC_Protect_Type_e NTC_Type:Shield JEITA or IEC;Charge_sta:Charge or not
* Returns :NTC_Flag (0:Shield; 1:JEITA; 2:IEC)
* Notes : NONE
*
*******************************************************************************
*/
uint8_t PMU_NTC_Control(void)
{
uint16_t NTC_Adc = 0;
uint8_t NTC_Flag = TRUE;
#if ADC_CHN_ENABLE
NTC_Adc = ADC_Chn_Value(ADC_CH4);
if(NTC_Adc >= 0x2FF) ////屏蔽NTC功能NTC浮空屏蔽 NTC 功能,并锁定。
{
return NTC_Flag;
}
if(CHIP_STA4 & 0x80)
{
if(NTC_Adc <= T_0C && NTC_Adc > T_45C) //正常充电
{
if(NTC_Low_Pro_Flag)
{
if( NTC_Adc < T_3C )
{
NTC_Low_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
if(NTC_High_Pro_Flag)
{
if( NTC_Adc > T_42C )
{
NTC_High_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
}
else //异常不充电
{
NTC_Pro_Debounce_Cnt++;
if(NTC_Pro_Debounce_Cnt > NTC_PRO_DEBOUNCE_TIM) //100ms
{
NTC_Pro_Debounce_Cnt = 0;
if(NTC_Adc > T_0C)
{
NTC_Low_Pro_Flag = 1;
}
else
if(NTC_Adc < T_45C)
{
NTC_High_Pro_Flag = 1;
}
CHG_CTL &= ~0x01; //Disable Charger.
NTC_Flag = FALSE;
}
}
}
#endif
return NTC_Flag;
}
/*
*******************************************************************************
* void Charger_Handler(void)
*
* Description : Charger Handle. ---- NTC
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
/*
1使VIN拔出
*/
void Charger_Handler(void)
{
if( !(CHIP_STA4 & 0x80) ) //未检测到Power good,则关闭Charger使能后返回。
{
CHG_CTL &= ~0x01; //Disable Charger
IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
#ifdef BREATHING_LIGHT //关闭LED UI显示呼吸灯
Breathing_Light_On = 0;
#endif
return;
}
/*各项保护都无需软件处理只处理充电超时超时后需要等VBUS重新插拔后才重新开始Charger流程。*/
if ( IRQ_FLAG9 & 0x08 ) //充电超时
{
if ( IRQ_FLAG10 & 0xC0 ) //Plugin\Plugout interrupt
{
IRQ_FLAG9 = 0x08;
IRQ_FLAG10 = 0xC0;
}
return;
}
/*NTC Handle*/ //使能Charger前先检测NTC温度异常就不开充电。(CHIP_STA4 & 0x80):PG
if( PMU_NTC_Control() == FALSE ) //NTC保护不充电。
{
return;
}
#ifdef BREATHING_LIGHT //LED UI显示呼吸灯
Breathing_Light_On = 1;
#endif
if( IRQ_FLAG9 & 0x10 ) //Charg complete interrupt
{
#ifdef LED_DISPLAY
LED_B_OFF();
#endif
#if ADC_ENABLE
#ifdef _DEBUG_CHARGER
printf("Chg Done\r\n");
#endif
if( Vbat_Adc < BAT_RECHARG )
{
CHG_CTL |= 0x01; //Enable Charger
IRQ_FLAG9 = 0x10;
#ifdef _DEBUG_CHARGER
printf("En Chg\r\n");
#endif
}
else
{
CHG_CTL &= ~0x01; //Disable Charger
#ifdef _DEBUG_CHARGER
printf("Dis Chg\r\n");
#endif
}
#endif
}
else
{
CHG_CTL |= 0x01; //Enable Charger
}
}
#endif

View File

@ -0,0 +1,52 @@
/*
******************************************************************************
*
* @file Charger_module.h
* @brief charger module
*
*
* @version 1.0
* @date 2023/05/12 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2023/07/12 Alex build this file
******************************************************************************
*/
#ifndef __CHARGER_MODULE_H__
#define __CHARGER_MODULE_H__
#include "define.h"
#if CHARGER_ENABLE
/*充电电流设置在系统初始化时通过配置寄存器REG_CHG1配置。
REG_CHG1 = CHG_CURRENT_300MA;
*/
#define CHG_CURRENT_100MA 0x00
#define CHG_CURRENT_200MA 0x01
#define CHG_CURRENT_250MA 0x02
#define CHG_CURRENT_300MA 0x03
#define CHG_CURRENT_350MA 0x04
#define CHG_CURRENT_400MA 0x05
#define CHG_CURRENT_450MA 0x06
#define CHG_CURRENT_500MA 0x07
#define CHG_CONSTANT_CUR_TIM 1
#define DIE_OT_RECOVER_TIM 25 //NTC保护后恢复正常后等待250ms重新开启充电
extern void Charger_Handler(void);
#endif
#endif

Some files were not shown because too many files have changed in this diff Show More