首次提交
This commit is contained in:
parent
e11e90b8a2
commit
63462de23e
6
.gitignore
vendored
6
.gitignore
vendored
@ -52,3 +52,9 @@ Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
|
||||
.vscode/
|
||||
Listings/
|
||||
Objects/
|
||||
CreatBotAirHeating-V3.0-HC89S003AF4.uvgui.User
|
||||
CreatBotAirHeating-V3.0-HC89S003AF4.hcf
|
||||
STARTUP.A51
|
||||
|
514
CreatBotAirHeating-V3.0-HC89S003AF4.uvopt
Normal file
514
CreatBotAirHeating-V3.0-HC89S003AF4.uvopt
Normal file
@ -0,0 +1,514 @@
|
||||
<?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</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>32000000</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>0</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>0</CpuCode>
|
||||
<DebugOpt>
|
||||
<uSim>0</uSim>
|
||||
<uTrg>1</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>
|
||||
<nTsel>11</nTsel>
|
||||
<sDll></sDll>
|
||||
<sDllPa></sDllPa>
|
||||
<sDlgDll></sDlgDll>
|
||||
<sDlgPa></sDlgPa>
|
||||
<sIfile></sIfile>
|
||||
<tDll></tDll>
|
||||
<tDllPa></tDllPa>
|
||||
<tDlgDll></tDlgDll>
|
||||
<tDlgPa></tDlgPa>
|
||||
<tIfile></tIfile>
|
||||
<pMon>Holychip\BIN\HC-LINK.dll</pMon>
|
||||
</DebugOpt>
|
||||
<TargetDriverDllRegistry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>HC-LINK</Key>
|
||||
<Name>-S5 -B115200 -O15</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint/>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
</Tracepoint>
|
||||
<DebugFlag>
|
||||
<trace>0</trace>
|
||||
<periodic>0</periodic>
|
||||
<aLwin>0</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
<aPa>0</aPa>
|
||||
<viewmode>0</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>0</StkLoc>
|
||||
<TrcWin>0</TrcWin>
|
||||
<newCpu>0</newCpu>
|
||||
<uProt>0</uProt>
|
||||
</DebugFlag>
|
||||
<LintExecutable></LintExecutable>
|
||||
<LintConfigFile></LintConfigFile>
|
||||
<bLintAuto>0</bLintAuto>
|
||||
<Lin2Executable></Lin2Executable>
|
||||
<Lin2ConfigFile></Lin2ConfigFile>
|
||||
<bLin2Auto>0</bLin2Auto>
|
||||
</TargetOption>
|
||||
</Target>
|
||||
|
||||
<Group>
|
||||
<GroupName>Source Group</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>1</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Main.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Main.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>2</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Sys_init.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Sys_init.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Hc89s_Config.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Hc89s_Config.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\IIC.c</PathWithFileName>
|
||||
<FilenameWithoutPath>IIC.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>5</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\TM1650.c</PathWithFileName>
|
||||
<FilenameWithoutPath>TM1650.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Public.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Public.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>7</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\PWM.c</PathWithFileName>
|
||||
<FilenameWithoutPath>PWM.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\ADC.c</PathWithFileName>
|
||||
<FilenameWithoutPath>ADC.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\UART1.c</PathWithFileName>
|
||||
<FilenameWithoutPath>UART1.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Protocol.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Protocol.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Timer0.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Timer0.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Timer3.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Timer3.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\IAP.c</PathWithFileName>
|
||||
<FilenameWithoutPath>IAP.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\PID.c</PathWithFileName>
|
||||
<FilenameWithoutPath>PID.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>Header Group</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Main.h</PathWithFileName>
|
||||
<FilenameWithoutPath>Main.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Sys_init.h</PathWithFileName>
|
||||
<FilenameWithoutPath>Sys_init.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Hc89s_Config.h</PathWithFileName>
|
||||
<FilenameWithoutPath>Hc89s_Config.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\TM1650.h</PathWithFileName>
|
||||
<FilenameWithoutPath>TM1650.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\IIC.h</PathWithFileName>
|
||||
<FilenameWithoutPath>IIC.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Public.h</PathWithFileName>
|
||||
<FilenameWithoutPath>Public.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\PWM.h</PathWithFileName>
|
||||
<FilenameWithoutPath>PWM.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\ADC.h</PathWithFileName>
|
||||
<FilenameWithoutPath>ADC.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\UART.h</PathWithFileName>
|
||||
<FilenameWithoutPath>UART.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Protocol.h</PathWithFileName>
|
||||
<FilenameWithoutPath>Protocol.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Timer0.h</PathWithFileName>
|
||||
<FilenameWithoutPath>Timer0.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\Timer3.h</PathWithFileName>
|
||||
<FilenameWithoutPath>Timer3.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>27</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\IAP.h</PathWithFileName>
|
||||
<FilenameWithoutPath>IAP.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\app\PID.h</PathWithFileName>
|
||||
<FilenameWithoutPath>PID.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
</ProjectOpt>
|
517
CreatBotAirHeating-V3.0-HC89S003AF4.uvproj
Normal file
517
CreatBotAirHeating-V3.0-HC89S003AF4.uvproj
Normal file
@ -0,0 +1,517 @@
|
||||
<?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>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>HC89S003AF4</Device>
|
||||
<Vendor>HC89S Series</Vendor>
|
||||
<Cpu>IRAM(0-0xFF) XRAM(0-0x2FF) IROM(0-0x3FFF) CLOCK(32000000) </Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
|
||||
<FlashDriverDll></FlashDriverDll>
|
||||
<DeviceId>0</DeviceId>
|
||||
<RegisterFile>HC_DEFINE.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>Holychip\</RegisterFilePath>
|
||||
<DBRegisterFilePath>Holychip\</DBRegisterFilePath>
|
||||
<TargetStatus>
|
||||
<Error>0</Error>
|
||||
<ExitCodeStop>0</ExitCodeStop>
|
||||
<ButtonStop>0</ButtonStop>
|
||||
<NotGenerated>0</NotGenerated>
|
||||
<InvalidFlash>1</InvalidFlash>
|
||||
</TargetStatus>
|
||||
<OutputDirectory>.\Objects\</OutputDirectory>
|
||||
<OutputName>CreatBotAirHeating-V3.0-HC89S003AF4</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>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></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></SimDllArguments>
|
||||
<SimDlgDll>DP51.DLL</SimDlgDll>
|
||||
<SimDlgDllArguments>-p51</SimDlgDllArguments>
|
||||
<TargetDllName>S8051.DLL</TargetDllName>
|
||||
<TargetDllArguments></TargetDllArguments>
|
||||
<TargetDlgDll>TP51.DLL</TargetDlgDll>
|
||||
<TargetDlgDllArguments>-p51</TargetDlgDllArguments>
|
||||
</DllOption>
|
||||
<DebugOption>
|
||||
<OPTHX>
|
||||
<HexSelection>0</HexSelection>
|
||||
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||
<HexOffset>0</HexOffset>
|
||||
<Oh166RecLen>16</Oh166RecLen>
|
||||
</OPTHX>
|
||||
<Simulator>
|
||||
<UseSimulator>0</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>1</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>11</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>Holychip\BIN\HC-LINK.dll</Driver>
|
||||
</TargetDlls>
|
||||
</DebugOption>
|
||||
<Utilities>
|
||||
<Flash1>
|
||||
<UseTargetDll>1</UseTargetDll>
|
||||
<UseExternalTool>0</UseExternalTool>
|
||||
<RunIndependent>0</RunIndependent>
|
||||
<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
|
||||
<Capability>1</Capability>
|
||||
<DriverSelection>4102</DriverSelection>
|
||||
</Flash1>
|
||||
<bUseTDR>0</bUseTDR>
|
||||
<Flash2>Holychip\BIN\HC-LINK.dll</Flash2>
|
||||
<Flash3></Flash3>
|
||||
<Flash4></Flash4>
|
||||
<pFcarmOut></pFcarmOut>
|
||||
<pFcarmGrp></pFcarmGrp>
|
||||
<pFcArmRoot></pFcArmRoot>
|
||||
<FcArmLst>0</FcArmLst>
|
||||
</Utilities>
|
||||
<Target51>
|
||||
<Target51Misc>
|
||||
<MemoryModel>0</MemoryModel>
|
||||
<RTOS>0</RTOS>
|
||||
<RomSize>2</RomSize>
|
||||
<DataHold>0</DataHold>
|
||||
<XDataHold>0</XDataHold>
|
||||
<UseOnchipRom>0</UseOnchipRom>
|
||||
<UseOnchipArithmetic>0</UseOnchipArithmetic>
|
||||
<UseMultipleDPTR>0</UseMultipleDPTR>
|
||||
<UseOnchipXram>0</UseOnchipXram>
|
||||
<HadIRAM>1</HadIRAM>
|
||||
<HadXRAM>1</HadXRAM>
|
||||
<HadIROM>1</HadIROM>
|
||||
<Moda2>0</Moda2>
|
||||
<Moddp2>0</Moddp2>
|
||||
<Modp2>0</Modp2>
|
||||
<Mod517dp>0</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>
|
||||
<ModC2>0</ModC2>
|
||||
<ModH2>0</ModH2>
|
||||
<Mdu_R515>0</Mdu_R515>
|
||||
<Mdu_F120>0</Mdu_F120>
|
||||
<Psoc>0</Psoc>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<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>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x4000</Size>
|
||||
</IRO>
|
||||
<IRA>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x100</Size>
|
||||
</IRA>
|
||||
<XRA>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x300</Size>
|
||||
</XRA>
|
||||
<XRA512>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</XRA512>
|
||||
<IROM512>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</IROM512>
|
||||
</OnChipMemories>
|
||||
</Target51Misc>
|
||||
<C51>
|
||||
<RegisterColoring>0</RegisterColoring>
|
||||
<VariablesInOrder>0</VariablesInOrder>
|
||||
<IntegerPromotion>1</IntegerPromotion>
|
||||
<uAregs>0</uAregs>
|
||||
<UseInterruptVector>1</UseInterruptVector>
|
||||
<Fuzzy>3</Fuzzy>
|
||||
<Optimize>8</Optimize>
|
||||
<WarningLevel>2</WarningLevel>
|
||||
<SizeSpeed>1</SizeSpeed>
|
||||
<ObjectExtend>1</ObjectExtend>
|
||||
<ACallAJmp>0</ACallAJmp>
|
||||
<InterruptVectorAddress>0</InterruptVectorAddress>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath>.\app</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>Source Group</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>Main.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\Main.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Sys_init.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\Sys_init.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Hc89s_Config.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\Hc89s_Config.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>IIC.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\IIC.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>TM1650.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\TM1650.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Public.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\Public.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>PWM.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\PWM.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>ADC.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\ADC.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>UART1.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\UART1.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Protocol.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\Protocol.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Timer0.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\Timer0.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Timer3.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\Timer3.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>IAP.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\IAP.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>PID.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\app\PID.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Header Group</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>Main.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\Main.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Sys_init.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\Sys_init.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Hc89s_Config.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\Hc89s_Config.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>TM1650.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\TM1650.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>IIC.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\IIC.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Public.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\Public.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>PWM.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\PWM.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>ADC.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\ADC.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>UART.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\UART.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Protocol.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\Protocol.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Timer0.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\Timer0.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Timer3.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\Timer3.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>IAP.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\IAP.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>PID.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\app\PID.h</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
</Groups>
|
||||
</Target>
|
||||
</Targets>
|
||||
|
||||
</Project>
|
@ -1,3 +1,3 @@
|
||||
# CreatBotAirHeatingV2
|
||||
|
||||
PEEK300风嘴加热核心控制板V2(更换主控芯片)
|
||||
PEEK300风嘴加热核心控制板V2(更换主控芯片) 主控芯片HC89S003ASF4
|
123
app/ADC.c
Normal file
123
app/ADC.c
Normal file
@ -0,0 +1,123 @@
|
||||
/*
|
||||
* ADC.c
|
||||
*
|
||||
* Created on: 2022年3月22日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
#include <Main.h>
|
||||
|
||||
uint16_t volatile Channel = 0; // ADC通道位
|
||||
uint16_t xdata Temp_Array[2][10] = {0}; //两个通道的10次缓存值
|
||||
|
||||
uint8_t count = 0; //转换次数计数
|
||||
uint16_t Display1_Array[5] = {0};
|
||||
uint16_t Display2_Array[5] = {0};
|
||||
static void ADC_Init(void); //初始化函数
|
||||
static void Get_ADCData(void); //把读到的AD值转成温度
|
||||
void Delay_2us(uint16_t fui_i);
|
||||
ADC_t ADC = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
ADC_Init, // ADC初始化
|
||||
Get_ADCData, //转换读到的值
|
||||
};
|
||||
/*
|
||||
* @name ADC_Init
|
||||
* @brief ADC初始化函数
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void ADC_Init(void)
|
||||
{
|
||||
// P0M1 = P0M1 & 0x0F | 0x30;
|
||||
// ADCC0 = 0x81; //打开ADC电源 选择内部基准电压VREF 选择内部4V基准电压
|
||||
ADCC0 = 0x84; //打开ADC电源 选择外部基准电压VREF
|
||||
Delay_2us(10); // 延时20微秒等待稳定
|
||||
ADCC1 = 0x0D; //打开外部通道3
|
||||
|
||||
ADCC2 = 0x6D; // ADC转换结果12位 数据右对其 16分频
|
||||
IE1 |= 0x20; //打开ADC中断
|
||||
EA = 1; //打开总中断
|
||||
ADCC0 &= ~0x20; //清除转换完成标志位
|
||||
Channel = Temp1_CHANNEL;
|
||||
ADCC1 = (ADCC1 & (~0x07)) | Channel; //切换通道通道
|
||||
ADCC0 |= 0x40; //启动ADC转换
|
||||
}
|
||||
static void Get_ADCData(void) //转换读出的AD值
|
||||
{
|
||||
static uint16_t Temp1 = 0, Temp2 = 0;
|
||||
static uint8_t count = 0;
|
||||
Temp1 = Temp_Array[0][0] + Temp_Array[0][1] + Temp_Array[0][2] + Temp_Array[0][3] + Temp_Array[0][4] + Temp_Array[0][5] + Temp_Array[0][6] + Temp_Array[0][7] + Temp_Array[0][8] + Temp_Array[0][9];
|
||||
Temp1 = Temp1 / 10; //求10次平均值
|
||||
ADC.Temp1_Result = (Temp1 * 5 / 4.095 + 5) / 10; //四舍五入转换为温度 内部4V基准电压 采集为分压后电压的一半
|
||||
Temp1 = 0;
|
||||
|
||||
Temp2 = Temp_Array[1][0] + Temp_Array[1][1] + Temp_Array[1][2] + Temp_Array[1][3] + Temp_Array[1][4] + Temp_Array[1][5] + Temp_Array[1][6] + Temp_Array[1][7] + Temp_Array[1][8] + Temp_Array[1][9];
|
||||
Temp2 = Temp2 / 10; //求10次平均值
|
||||
ADC.Temp2_Result = (Temp2 * 5 / 4.095 + 5) / 10; //四舍五入转换为温度 内部4V基准电压 采集为分压后电压的一半
|
||||
Temp2 = 0;
|
||||
if (Timer0.ADC_Timer >= TIMER0_80mS)
|
||||
{
|
||||
Timer0.ADC_Timer = 0;
|
||||
Display1_Array[count] = ADC.Temp1_Result;
|
||||
Display2_Array[count] = ADC.Temp2_Result;
|
||||
count++;
|
||||
}
|
||||
|
||||
if (count >= 5)
|
||||
{
|
||||
count = 0;
|
||||
Temp1 = Display1_Array[0] + Display1_Array[1] + Display1_Array[2] + Display1_Array[3] + Display1_Array[4];
|
||||
ADC.Display_Temp1_Value = (float)Temp1 / 5 + 0.5;
|
||||
Temp2 = Display2_Array[0] + Display2_Array[1] + Display2_Array[2] + Display2_Array[3] + Display2_Array[4];
|
||||
ADC.Display_Temp2_Value = (float)Temp2 / 5 + 0.5;
|
||||
Temp1 = 0;
|
||||
Temp2 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @name ADC_Rpt
|
||||
* @brief ADC中断函数
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void ADC_Rpt() interrupt ADC_VECTOR
|
||||
{
|
||||
ADCC0 &= ~0x20; //清除ADC中断标志位
|
||||
if (Channel == Temp1_CHANNEL) //通道13
|
||||
{
|
||||
|
||||
Temp_Array[0][count] = ADCR;
|
||||
Channel = Temp2_CHANNEL; //切换通道
|
||||
}
|
||||
else if (Channel == Temp2_CHANNEL) //通道12
|
||||
{
|
||||
Temp_Array[1][count] = ADCR;
|
||||
Channel = Temp1_CHANNEL; //切换通道
|
||||
count++;
|
||||
}
|
||||
|
||||
if (count >= 10) //循环读10次
|
||||
count = 0;
|
||||
ADCC1 = (ADCC1 & (~0x07)) | Channel; //切换通道通道
|
||||
Delay_2us(10); //切换通道后建议延时20us
|
||||
ADCC0 |= 0x40; //启动下一次转换
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Delay_2us
|
||||
* @brief 延时2us函数
|
||||
* @param fui_i
|
||||
* @retval None
|
||||
*/
|
||||
void Delay_2us(uint16_t fui_i)
|
||||
{
|
||||
while (fui_i--)
|
||||
;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
27
app/ADC.h
Normal file
27
app/ADC.h
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* adc.h
|
||||
*
|
||||
* Created on: 2022年3月22日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
#ifndef _ADC_H_
|
||||
#define _ADC_H_
|
||||
|
||||
#define Temp1_CHANNEL 0x0D //通道13
|
||||
#define Temp2_CHANNEL 0x0C //通道12
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t volatile Temp1_Result; //温度1转换结果
|
||||
uint16_t volatile Temp2_Result; //温度2adc转换结果
|
||||
uint16_t volatile Display_Temp1_Value;
|
||||
uint16_t volatile Display_Temp2_Value;
|
||||
void (*Init)(void); //初始化
|
||||
void (*Get_ADCData)(void); //转换ad的值变成温度
|
||||
} ADC_t;
|
||||
|
||||
extern ADC_t ADC;
|
||||
|
||||
|
||||
#endif
|
691
app/Hc89s_Config.c
Normal file
691
app/Hc89s_Config.c
Normal file
@ -0,0 +1,691 @@
|
||||
|
||||
#include "Hc89s_Config.h"
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函数声明
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
static void SystemClock_Init(void);
|
||||
|
||||
#if GPIO_INIT_ENABLE
|
||||
static void GPIO_Init(void);
|
||||
#endif
|
||||
|
||||
#if RESET_INIT_ENABLE
|
||||
static void Reset_Init(void);
|
||||
#endif
|
||||
|
||||
#if WDT_INIT_ENABLE
|
||||
static void WDT_Init(void);
|
||||
#endif
|
||||
|
||||
#if SYSTEM_EA_INIT_ENABLE
|
||||
static void SystemEA_Init(void);
|
||||
#endif
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: SystemClock_Init
|
||||
* 功能说明: 系统时钟 初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
static void SystemClock_Init(void)
|
||||
{
|
||||
/*************************************** 内部高频 配置 ************************************************/
|
||||
#if CLOCK_IN_HIGH_ENABLE
|
||||
CLKSWR = CLOCK_IN_HIGH_CLKSWR_INIT;
|
||||
CLKDIV = CLOCK_IN_HIGH_CLKDIV_INIT;
|
||||
/*************************************** 内部低频 配置 ************************************************/
|
||||
#elif CLOCK_IN_LOW_ENABLE
|
||||
while((CLKCON&0x10)!=0x10);
|
||||
CLKSWR &=~ 0x30;
|
||||
while((CLKSWR&0xC0)!=0x00);
|
||||
CLKCON &=~ 0x02;
|
||||
CLKDIV = CLOCK_IN_LOW_CLKDIV_INIT;
|
||||
/*************************************** 外部高频 配置 ************************************************/
|
||||
#elif CLOCK_OUT_HIGH_ENABLE
|
||||
CLKCON |= 0x04;
|
||||
XTALCFG |= 0x01+CLOCK_OUT_HIGH_HXTAL_MODE_SEL_INIT+CLOCK_OUT_HIGH_HXTAL_CFG_INIT;
|
||||
while((CLKCON&0x80)!=0x80);
|
||||
CLKSWR = 0xF0;
|
||||
while((CLKSWR&0xC0)!=0xC0);
|
||||
CLKCON &=~ 0x02;
|
||||
CLKDIV = CLOCK_OUT_HIGH_CLKDIV_INIT;
|
||||
/*************************************** 外部低频 配置 ************************************************/
|
||||
#elif CLOCK_OUT_LOW_ENABLE
|
||||
CLKCON |= 0x04;
|
||||
XTALCFG |= CLOCK_OUT_HIGH_LXTAL_CFG_INIT;
|
||||
while((CLKCON&0x40)!=0x40);
|
||||
CLKSWR = 0xF0;
|
||||
while((CLKSWR&0x80)!=0x80);
|
||||
CLKCON &=~ 0x02;
|
||||
CLKDIV = CLOCK_OUT_HIGH_CLKDIV_INIT;
|
||||
#endif
|
||||
|
||||
#if CLOCK_OUTPUT_ENABLE
|
||||
CLKOUT = CLOCK_CLK_OUT_SEL_INIT + 0x10;
|
||||
CLKO_MAP = CLOCK_CLOCKMAP_INIT ;
|
||||
#endif
|
||||
|
||||
#if CLOCK_FREQ_CLK_ENABLE
|
||||
FREQ_CLK = CLOCK_FREQ_CLK_INIT;
|
||||
#endif
|
||||
|
||||
#if CLOCK_RC_EN_PD_INIT
|
||||
XTALCFG = CLOCK_RC_EN_PD_INIT;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: GPIO_Init
|
||||
* 功能说明: 端口 初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if GPIO_INIT_ENABLE
|
||||
static void GPIO_Init(void)
|
||||
{
|
||||
P0M0=GPIO_MODE_P0M0;
|
||||
P0M1=GPIO_MODE_P0M1;
|
||||
P0M2=GPIO_MODE_P0M2;
|
||||
P0M3=GPIO_MODE_P0M3;
|
||||
|
||||
P1M0=GPIO_MODE_P1M0;
|
||||
|
||||
P2M0=GPIO_MODE_P2M0;
|
||||
P2M1=GPIO_MODE_P2M1;
|
||||
P2M2=GPIO_MODE_P2M2;
|
||||
P2M3=GPIO_MODE_P2M3;
|
||||
|
||||
#if GPIO_INIT_PULLRES_ENABLE
|
||||
P0LPU = GPIO_PULLRESVALUE_P02;
|
||||
#endif
|
||||
|
||||
#if GPIO_INIT_DBC_P00_ENABLE
|
||||
P00DBC = GPIO_DBC_INIT_P00;
|
||||
#endif
|
||||
|
||||
#if GPIO_INIT_DBC_P01_ENABLE
|
||||
P01DBC = GPIO_DBC_INIT_P01;
|
||||
#endif
|
||||
|
||||
#if GPIO_INIT_DBC_P02_ENABLE
|
||||
P02DBC = GPIO_DBC_INIT_P02;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: Reset_Init
|
||||
* 功能说明: 复位 初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if RESET_INIT_ENABLE
|
||||
static void Reset_Init(void)
|
||||
{
|
||||
#if RESET_INIT_ENABLE
|
||||
BORC = RESET_BORVS_INIT;
|
||||
BORDBC = RESET_BORDBC_INIT;
|
||||
#endif
|
||||
|
||||
#if RESET_RSTDBC_INIT_ENABLE
|
||||
RSTDBC = RESET_RSTDBC_INIT;
|
||||
#endif
|
||||
|
||||
#if RESET_SPOV_INIT_ENABLE
|
||||
SPOV_RSTEN = RESET_SPOV_INIT;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: WDTInit
|
||||
* 功能说明: 看门狗初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if WDT_INIT_ENABLE
|
||||
static void WDT_Init(void)
|
||||
{
|
||||
WDTC=WDT_WDTC_INIT;
|
||||
WDTCCR=WDT_WDTCCR_INIT;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: LVD_Init
|
||||
* 功能说明: 看门狗初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if LVD_INIT_ENABLE
|
||||
static void LVD_Init(void)
|
||||
{
|
||||
LVDC=LVD_LVDC_INIT;
|
||||
#if LVD_LVDDBC_INIT_ENABLE
|
||||
LVDDBC=LVD_LVDDBC_INIT;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: TIMER3_Init
|
||||
* 功能说明: TIMER3初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if TIMER3_INIT_ENABLE
|
||||
static void TIMER3_Init(void)
|
||||
{
|
||||
#if TIMER3_T3MAP_ENABLE
|
||||
T3_MAP = TIMER3_T3MAP_INIT;
|
||||
#endif
|
||||
T3CON = TIMER3_TCON_INIT;
|
||||
TH3 = TIMER3_TH3_INIT;
|
||||
TL3 = TIMER3_TL3_INIT;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: TIMER4_Init
|
||||
* 功能说明: 定时器4初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if TIMER4_INIT_ENABLE
|
||||
static void TIMER4_Init(void)
|
||||
{
|
||||
#if TIMER4_T4MAP_ENABLE
|
||||
T4_MAP = TIMER4_T4MAP_INIT;
|
||||
#endif
|
||||
T4CON = TIMER4_TCON_INIT;
|
||||
TH4 = TIMER4_TH4_INIT;
|
||||
TL4 = TIMER4_TL4_INIT;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: TIMER5_Init
|
||||
* 功能说明: 定时器5初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if TIMER5_INIT_ENABLE
|
||||
static void TIMER5_Init(void)
|
||||
{
|
||||
#if TIMER5_T5MAP_ENABLE
|
||||
T5_MAP = TIMER5_T5MAP_INIT;
|
||||
#endif
|
||||
T5CON = TIMER5_TCON_INIT;
|
||||
T5CON1 = TIMER5_TCON1_INIT;
|
||||
TH5 = TIMER5_TH5_INIT;
|
||||
TL5 = TIMER5_TL5_INIT;
|
||||
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: PWM0_Init
|
||||
* 功能说明: PWM0初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if PWM0_INIT_ENABLE
|
||||
static void PWM0_Init(void)
|
||||
{
|
||||
|
||||
#if PWM0OUT_INIT_ENABLE
|
||||
PWM0_MAP = PWM0_PWM0MAP_INIT;
|
||||
#endif
|
||||
#if PWM01OUT_INIT_ENABLE
|
||||
PWM01_MAP = PWM0_PWM01MAP_INIT;
|
||||
#endif
|
||||
PWM0C = PWM0_PWM0C_INIT;
|
||||
|
||||
PWM0PH = PWM0PH_INIT;
|
||||
PWM0PL = PWM0PL_INIT;
|
||||
|
||||
#if PWM0OUT_INIT_ENABLE
|
||||
PWM0DH = PWM0DH_INIT;
|
||||
PWM0DL = PWM0DL_INIT;
|
||||
#endif
|
||||
|
||||
#if PWM0_DTHL_ENABLE
|
||||
PWM0DTH = PWM0DTH_INIT;
|
||||
PWM0DTL = PWM0DTL_INIT;
|
||||
#elif PWM01OUT_INIT_ENABLE
|
||||
PWM0DTH = PWM01DH_INIT;
|
||||
PWM0DTL = PWM01DL_INIT;
|
||||
#endif
|
||||
|
||||
PWM0EN = PWM0_PWM0EN_INIT;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: PWM1_Init
|
||||
* 功能说明: PWM1初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if PWM1_INIT_ENABLE
|
||||
static void PWM1_Init(void)
|
||||
{
|
||||
|
||||
#if PWM1OUT_INIT_ENABLE
|
||||
PWM1_MAP = PWM1_PWM1MAP_INIT;
|
||||
#endif
|
||||
#if PWM11OUT_INIT_ENABLE
|
||||
PWM11_MAP = PWM1_PWM11MAP_INIT;
|
||||
#endif
|
||||
PWM1C = PWM1_PWM1C_INIT;
|
||||
|
||||
PWM1PH = PWM1PH_INIT;
|
||||
PWM1PL = PWM1PL_INIT;
|
||||
|
||||
#if PWM1OUT_INIT_ENABLE
|
||||
PWM1DH = PWM1DH_INIT;
|
||||
PWM1DL = PWM1DL_INIT;
|
||||
#endif
|
||||
|
||||
#if PWM1_DTHL_ENABLE
|
||||
PWM1DTH = PWM1DTH_INIT;
|
||||
PWM1DTL = PWM1DTL_INIT;
|
||||
#elif PWM11OUT_INIT_ENABLE
|
||||
PWM1DTH = PWM11DH_INIT;
|
||||
PWM1DTL = PWM11DL_INIT;
|
||||
#endif
|
||||
|
||||
PWM1EN = PWM1_PWM1EN_INIT;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: PWM2_Init
|
||||
* 功能说明: PWM2初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if PWM2_INIT_ENABLE
|
||||
static void PWM2_Init(void)
|
||||
{
|
||||
|
||||
#if PWM2OUT_INIT_ENABLE
|
||||
PWM2_MAP = PWM2_PWM2MAP_INIT;
|
||||
#endif
|
||||
|
||||
#if PWM21OUT_INIT_ENABLE
|
||||
PWM21_MAP = PWM2_PWM21MAP_INIT;
|
||||
#endif
|
||||
|
||||
PWM2C = PWM2_PWM2C_INIT;
|
||||
|
||||
PWM2PH = PWM2PH_INIT;
|
||||
PWM2PL = PWM2PL_INIT;
|
||||
|
||||
#if PWM2OUT_INIT_ENABLE
|
||||
PWM2DH = PWM2DH_INIT;
|
||||
PWM2DL = PWM2DL_INIT;
|
||||
#endif
|
||||
|
||||
#if PWM2_DTHL_ENABLE
|
||||
PWM2DTH = PWM2DTH_INIT;
|
||||
PWM2DTL = PWM2DTL_INIT;
|
||||
#elif PWM21OUT_INIT_ENABLE
|
||||
PWM2DTH = PWM21DH_INIT;
|
||||
PWM2DTL = PWM21DL_INIT;
|
||||
#endif
|
||||
|
||||
PWM2EN = PWM2_PWM2EN_INIT;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: PWM3_Init
|
||||
* 功能说明: PWM3初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if PWM3_INIT_ENABLE
|
||||
static void PWM3_Init(void)
|
||||
{
|
||||
PWM3_MAP = PWM3_PWM3MAP_INIT;
|
||||
PWM3C = PWM3_PWM3C_INIT;
|
||||
PWM3P = PWM3P_INIT;
|
||||
PWM3D = PWM3D_INIT;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: ADC_Init
|
||||
* 功能说明: ADC初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if ADC_INIT_ENABLE
|
||||
static void ADC_Init(void)
|
||||
{
|
||||
ADCC0= ADC_ADCC0_INIT ;
|
||||
ADCC1= ADC_ADCC1_INIT ;
|
||||
ADCC2= ADC_ADCC2_INIT ;
|
||||
#if ADC_ADCWC_INIT
|
||||
ADCWC= ADC_ADCWC_INIT ;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: UART1_Init
|
||||
* 功能说明: ADC初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if UART1_INIT_ENABLE
|
||||
static void UART1_Init(void)
|
||||
{
|
||||
TXD_MAP = UART1_TXDMAP_INIT;
|
||||
RXD_MAP = UART1_RXDMAP_INIT;
|
||||
SCON = UART1_SCON_INIT;
|
||||
#if UART1_MODEL0_ENABLE
|
||||
|
||||
SCON2=UART1_MODEL0_SCON2_INIT ;
|
||||
#elif UART1_MODEL1_ENABLE
|
||||
|
||||
SCON2=UART1_MODEL1_SCON2_INIT ;
|
||||
|
||||
#elif UART1_MODEL2_ENABLE
|
||||
SCON2=UART1_MODEL2_SCON2_INIT ;
|
||||
#if UART1_MODEL2_SM2_INIT
|
||||
SADDR = UART1_MODEL2_SADDR_INIT;
|
||||
SADEN = UART1_MODEL2_SADEN_INIT;
|
||||
#endif
|
||||
#elif UART1_MODEL3_ENABLE
|
||||
SCON2=UART1_MODEL3_SCON2_INIT ;
|
||||
#if UART1_MODEL3_SM2_INIT
|
||||
SADDR = UART1_MODEL3_SADDR_INIT;
|
||||
SADEN = UART1_MODEL3_SADEN_INIT;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: UART2_Init
|
||||
* 功能说明: UART2初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if UART2_INIT_ENABLE
|
||||
static void UART2_Init(void)
|
||||
{
|
||||
TXD2_MAP = UART2_TXD2MAP_INIT;
|
||||
RXD2_MAP = UART2_RXD2MAP_INIT;
|
||||
S2CON = UART2_REN_INIT;
|
||||
S2CON2 = UART2_S2CON2_INIT;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: SPI_Init
|
||||
* 功能说明: SPI初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if SPI_INIT_ENABLE
|
||||
static void SPI_Init(void)
|
||||
{
|
||||
SS_MAP = SPI_SSMAP_INIT;
|
||||
SCK_MAP = SPI_SCKMAP_INIT;
|
||||
MOSI_MAP = SPI_MOSIMAP_INIT;
|
||||
MISO_MAP = SPI_MISOMAP_INIT;
|
||||
|
||||
SPCTL = SPI_SPCTL_INIT;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: EXTI_Init
|
||||
* 功能说明: 外部中断配置
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if EXIT_INIT_ENABLE
|
||||
static void EXTI_Init(void)
|
||||
{
|
||||
/**************************************** 配置外部中断0-1管脚 *****************************************/
|
||||
#if ( EXIT0_INIT_ENABLE || EXIT1_INIT_ENABLE )
|
||||
INT01_PINS = EXIT_INT01_PINS_INIT ;
|
||||
#endif
|
||||
/**************************************** 配置外部中断0-3电平 *****************************************/
|
||||
#if ( EXIT0_INIT_ENABLE || EXIT1_INIT_ENABLE || EXIT2_INIT_ENABLE || EXIT3_INIT_ENABLE )
|
||||
PITS0 = EXIT_PITS0_INIT;
|
||||
#endif
|
||||
/**************************************** 配置外部中断4-7电平 *****************************************/
|
||||
#if ( EXIT4_INIT_ENABLE || EXIT5_INIT_ENABLE || EXIT6_INIT_ENABLE || EXIT7_INIT_ENABLE )
|
||||
PITS1 = EXIT_PITS1_INIT;
|
||||
#endif
|
||||
/**************************************** 配置外部中断8-11电平 *****************************************/
|
||||
#if ( EXIT8_INIT_ENABLE || EXIT9_INIT_ENABLE || EXIT10_INIT_ENABLE || EXIT11_INIT_ENABLE )
|
||||
PITS2 = EXIT_PITS2_INIT;
|
||||
#endif
|
||||
/**************************************** 配置外部中断12-15电平 *****************************************/
|
||||
#if ( EXIT12_INIT_ENABLE || EXIT13_INIT_ENABLE || EXIT14_INIT_ENABLE || EXIT15_INIT_ENABLE )
|
||||
PITS3 = EXIT_PITS3_INIT;
|
||||
#endif
|
||||
/**************************************** 配置外部中断2-07使能 *****************************************/
|
||||
#if ( EXIT2_INIT_ENABLE || EXIT3_INIT_ENABLE || EXIT4_INIT_ENABLE ||\
|
||||
EXIT5_INIT_ENABLE || EXIT6_INIT_ENABLE || EXIT7_INIT_ENABLE)
|
||||
PINTE0 = EXIT_PINTE0_INIT;
|
||||
#endif
|
||||
/**************************************** 配置外部中断12-15使能 *****************************************/
|
||||
#if ( EXIT8_INIT_ENABLE || EXIT9_INIT_ENABLE || EXIT10_INIT_ENABLE || EXIT11_INIT_ENABLE ||\
|
||||
EXIT12_INIT_ENABLE || EXIT13_INIT_ENABLE || EXIT14_INIT_ENABLE || EXIT15_INIT_ENABLE )
|
||||
PINTE1 = EXIT_PINTE1_INIT;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: TIMER0Init
|
||||
* 功能说明: 看门狗初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if ( TIMER0_INIT_ENABLE || TIMER1_INIT_ENABLE )
|
||||
static void TIMER01_Init(void)
|
||||
{
|
||||
#if (TIMER0_T0OUT_INIT || TIMER0_CT0_INIT)
|
||||
T0_MAP==TIMER0_T0MAP_INIT;
|
||||
#endif
|
||||
|
||||
#if (TIMER1_T1OUT_INIT || TIMER1_CT1_INIT)
|
||||
T1_MAP==TIMER1_T1MAP_INIT;
|
||||
#endif
|
||||
|
||||
TMOD=TIMER01_TMOD_INIT;
|
||||
TCON1=TIMER01_TCON1_INIT;
|
||||
TCON=TIMER01_TCON_INIT;
|
||||
#if TIMER0_INIT_ENABLE
|
||||
TH0=TIMER0_TH0_INIT;
|
||||
TL0=TIMER0_TL0_INIT;
|
||||
#endif
|
||||
#if TIMER1_INIT_ENABLE
|
||||
TH1=TIMER1_TH1_INIT;
|
||||
TL1=TIMER1_TL1_INIT;
|
||||
#endif
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: INT_Init
|
||||
* 功能说明: 中断相关配置
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#if (EXIT_INIT_ENABLE || WDT_INT_ENABLE || TIMER0_INIT_ENABLE || TIMER1_INIT_ENABLE \
|
||||
|| TIMER3_INIT_ENABLE || TIMER4_INIT_ENABLE || TIMER5_INIT_ENABLE || PWM_INIT_ENABLE || ADC_INT_ENABLE)
|
||||
static void INT_Init(void)
|
||||
{
|
||||
/**************************************** 配置IE使能 *****************************************/
|
||||
#if (WDT_INT_ENABLE || EXIT0_INIT_ENABLE || EXIT1_INIT_ENABLE || TIMER0_INIT_ENABLE || TIMER1_INIT_ENABLE \
|
||||
|| UART1_INT_ENABLE || UART2_INT_ENABLE)
|
||||
IE=INT_IE_INIT;
|
||||
#endif
|
||||
/**************************************** 配置IE1使能 *****************************************/
|
||||
#if (EXIT2_7_INIT_ENABLE || EXIT8_15_INIT_ENABLE || TIMER3_INIT_ENABLE \
|
||||
|| TIMER4_INIT_ENABLE || TIMER5_INIT_ENABLE || ADC_INT_ENABLE || SPI_INT_ENABLE)
|
||||
IE1=INT_IE1_INIT;
|
||||
#endif
|
||||
/**************************************** 配置IP0(优先级) *****************************************/
|
||||
#if (EXIT0_INIT_ENABLE || EXIT1_INIT_ENABLE || TIMER0_INIT_ENABLE || TIMER1_INIT_ENABLE)
|
||||
IP0=INT_IP0_INIT;
|
||||
#endif
|
||||
/**************************************** 配置IP1(优先级) *****************************************/
|
||||
#if (WDT_INT_ENABLE || UART1_INT_ENABLE || UART2_INT_ENABLE || LVD_LVDIE_INIT)
|
||||
IP1=INT_IP1_INIT;
|
||||
#endif
|
||||
/**************************************** 配置IP2(优先级) *****************************************/
|
||||
#if (TIMER3_INIT_ENABLE || TIMER4_INIT_ENABLE || PWM_INIT_ENABLE || SPI_INT_ENABLE)
|
||||
IP2=INT_IP2_INIT;
|
||||
#endif
|
||||
/**************************************** 配置IP3(优先级) *****************************************/
|
||||
#if (EXIT8_15_INIT_ENABLE || EXIT2_7_INIT_ENABLE || TIMER5_INIT_ENABLE || ADC_INT_ENABLE)
|
||||
IP3=INT_IP3_INIT;
|
||||
#endif
|
||||
/**************************************** 配置总中断 *****************************************/
|
||||
#if (SYSTEM_EA_INIT_ENABLE)
|
||||
EA=SYSTEM_EA_INIT;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: System_Init
|
||||
* 功能说明: 系统初始化
|
||||
* 形 参:无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
void System_Init(void)
|
||||
{
|
||||
SystemClock_Init();
|
||||
#if GPIO_INIT_ENABLE
|
||||
GPIO_Init();
|
||||
#endif
|
||||
|
||||
#if RESET_INIT_ENABLE
|
||||
Reset_Init();
|
||||
#endif
|
||||
|
||||
#if WDT_INIT_ENABLE
|
||||
WDT_Init();
|
||||
#endif
|
||||
|
||||
#if EXIT_INIT_ENABLE
|
||||
EXTI_Init();
|
||||
#endif
|
||||
|
||||
#if ( TIMER0_INIT_ENABLE || TIMER1_INIT_ENABLE )
|
||||
TIMER01_Init();
|
||||
#endif
|
||||
|
||||
#if TIMER3_INIT_ENABLE
|
||||
TIMER3_Init();
|
||||
#endif
|
||||
|
||||
#if TIMER4_INIT_ENABLE
|
||||
TIMER4_Init();
|
||||
#endif
|
||||
|
||||
#if TIMER5_INIT_ENABLE
|
||||
TIMER5_Init();
|
||||
#endif
|
||||
|
||||
#if PWM0_INIT_ENABLE
|
||||
PWM0_Init();
|
||||
#endif
|
||||
|
||||
#if PWM1_INIT_ENABLE
|
||||
PWM1_Init();
|
||||
#endif
|
||||
|
||||
#if PWM2_INIT_ENABLE
|
||||
PWM2_Init();
|
||||
#endif
|
||||
|
||||
#if PWM3_INIT_ENABLE
|
||||
PWM3_Init();
|
||||
#endif
|
||||
|
||||
#if ADC_INIT_ENABLE
|
||||
ADC_Init();
|
||||
#endif
|
||||
|
||||
#if UART1_INIT_ENABLE
|
||||
UART1_Init();
|
||||
#endif
|
||||
|
||||
#if UART2_INIT_ENABLE
|
||||
UART2_Init();
|
||||
#endif
|
||||
|
||||
#if SPI_INIT_ENABLE
|
||||
SPI_Init();
|
||||
|
||||
#endif
|
||||
|
||||
#if (EXIT_INIT_ENABLE || WDT_INIT_ENABLE || TIMER0_INIT_ENABLE || TIMER1_INIT_ENABLE \
|
||||
|| TIMER3_INIT_ENABLE || TIMER4_INIT_ENABLE || TIMER5_INIT_ENABLE || PWM_INIT_ENABLE || ADC_INT_ENABLE \
|
||||
|| UART1_INT_ENABLE || UART1_INT_ENABLE || SPI_INT_ENABLE)
|
||||
INT_Init();
|
||||
#endif
|
||||
|
||||
}
|
2952
app/Hc89s_Config.h
Normal file
2952
app/Hc89s_Config.h
Normal file
File diff suppressed because it is too large
Load Diff
133
app/IAP.c
Normal file
133
app/IAP.c
Normal file
@ -0,0 +1,133 @@
|
||||
/*
|
||||
* IAP.c
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <main.h>
|
||||
|
||||
uint8_t EEPROM_Array[4] = {0}; //保存温度的数组
|
||||
uint16_t Save_Value1;
|
||||
uint16_t Save_Value2;
|
||||
static uint8_t Flash_ReadData(uint16_t); //读一字节
|
||||
static void FLASH_WriteData(uint8_t, uint16_t); //写一字节(写之前需要先擦除)
|
||||
static void Flash_EraseBlock(uint16_t); //扇区擦除
|
||||
static void Get_TempValue(void); //恢复储存的温度
|
||||
static void Save_TempValue(void);
|
||||
static void Flash_ReadArr(unsigned int fui_Address, unsigned char fuc_Length, unsigned char *fucp_SaveArr);
|
||||
static void Flash_WriteArr(unsigned int fui_Address, unsigned char fuc_Length, unsigned char *fucp_SaveArr);
|
||||
|
||||
/* Public variables-----------------------------------------------------------*/
|
||||
IAP_t xdata IAP =
|
||||
{
|
||||
EEPROM_Array,
|
||||
Save_TempValue,
|
||||
Get_TempValue};
|
||||
|
||||
/*
|
||||
* @name Get_TempValue
|
||||
* @brief 获取温度的值
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Get_TempValue(void)
|
||||
{
|
||||
Flash_ReadArr(EEPROM_Array_ADDR, 4, EEPROM_Array);
|
||||
Public.Setting_Temp1 = EEPROM_Array[0];
|
||||
Public.Setting_Temp1 <<= 8;
|
||||
Public.Setting_Temp1 |= EEPROM_Array[1];
|
||||
Public.Setting_Temp2 = EEPROM_Array[2];
|
||||
Public.Setting_Temp2 <<= 8;
|
||||
Public.Setting_Temp2 |= EEPROM_Array[3];
|
||||
Save_Value1 = Public.Setting_Temp1;
|
||||
Save_Value2 = Public.Setting_Temp2;
|
||||
}
|
||||
/*
|
||||
* @name Save_TempValue
|
||||
* @brief 保存温度的值
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Save_TempValue(void)
|
||||
{
|
||||
if ((Save_Value1 != Public.Setting_Temp1) || (Save_Value2 != Public.Setting_Temp2))
|
||||
{
|
||||
|
||||
IAP.EEPROM_Array[0] = (Public.Setting_Temp1 >> 8) & 0xFF;
|
||||
IAP.EEPROM_Array[1] = Public.Setting_Temp1 & 0xFF;
|
||||
IAP.EEPROM_Array[2] = (Public.Setting_Temp2 >> 8) & 0xFF;
|
||||
IAP.EEPROM_Array[3] = Public.Setting_Temp2 & 0xFF;
|
||||
Flash_EraseBlock(EEPROM_Array_ADDR);
|
||||
Flash_WriteArr(EEPROM_Array_ADDR, 4, EEPROM_Array);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @name FLASH_WriteData
|
||||
* @brief 写入一字节(写入之前需要先擦除)
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void FLASH_WriteData(uint8_t dat, uint16_t addr)
|
||||
{
|
||||
EA = 0; //关闭总中断
|
||||
INSCON = 0x80; //设置操作区域为EEPROM
|
||||
IAP_DATA = dat;
|
||||
IAP_CMD = 0xF00F; // Flash解锁
|
||||
IAP_ADDR = addr;
|
||||
IAP_CMD = 0xB44B; //字节编程
|
||||
IAP_CMD = 0xE11E; //触发一次操作 触发后自动锁定
|
||||
INSCON = 0x00; //关闭写EEPROM操作
|
||||
EA = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Flash_EraseBlock
|
||||
* @brief 扇区擦除(每扇区为32字节)
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Flash_EraseBlock(uint16_t addr)
|
||||
{
|
||||
EA = 0; //关闭总中断
|
||||
INSCON = 0x80; //设置操作区域为EEPROM
|
||||
IAP_CMD = 0xF00F; // Flash解锁
|
||||
IAP_ADDR = addr; //写入擦除地址
|
||||
IAP_CMD = 0xD22D; //选择操作方式,扇区擦除
|
||||
IAP_CMD = 0xE11E; //触发后IAP_ADDRL&IAP_ADDRH指向0xFF,同时自动锁定
|
||||
INSCON = 0x00; //关闭EEPROM操作
|
||||
EA = 1;
|
||||
}
|
||||
/*
|
||||
* @name Flash_WriteArr
|
||||
* @brief 写入一个数组
|
||||
* @param address len savearray
|
||||
* @retval None
|
||||
*/
|
||||
static void Flash_WriteArr(unsigned int fui_Address, unsigned char fuc_Length, unsigned char *fucp_SaveArr)
|
||||
{
|
||||
unsigned char fui_i = 0;
|
||||
EA = 0;
|
||||
for (fui_i = 0; fui_i < fuc_Length; fui_i++)
|
||||
{
|
||||
FLASH_WriteData(*(fucp_SaveArr++), fui_Address++);
|
||||
}
|
||||
EA = 1;
|
||||
}
|
||||
/*
|
||||
* @name Flash_ReadArr
|
||||
* @brief 读出一个数组
|
||||
* @param address len savearray
|
||||
* @retval None
|
||||
*/
|
||||
static void Flash_ReadArr(unsigned int fui_Address, unsigned char fuc_Length, unsigned char *fucp_SaveArr)
|
||||
{
|
||||
INSCON = 0x80;
|
||||
while (fuc_Length--)
|
||||
*(fucp_SaveArr++) = *((unsigned char code *)(fui_Address++)); //读取数据
|
||||
}
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
33
app/IAP.h
Normal file
33
app/IAP.h
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* IAP.h
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
#ifndef __IAP_H__
|
||||
#define __IAP_H__
|
||||
|
||||
/* define ------------------------------------------------------------------*/
|
||||
#define EEPROM_Array_ADDR (uint16_t)0x0000 //设置通道1温度值储存地址
|
||||
|
||||
|
||||
#define IAP_CNT (uint8_t)10
|
||||
|
||||
//定义枚举类型
|
||||
|
||||
//定义结构体类型
|
||||
typedef struct
|
||||
{
|
||||
|
||||
uint8_t *EEPROM_Array; //储存的数组
|
||||
void (*Save_TempValue)(void); //储存温度的值
|
||||
void (*Get_TempValue)(void); //读取储存的温度
|
||||
} IAP_t;
|
||||
|
||||
/* extern variables-----------------------------------------------------------*/
|
||||
extern IAP_t xdata IAP;
|
||||
|
||||
#endif
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
109
app/IIC.c
Normal file
109
app/IIC.c
Normal file
@ -0,0 +1,109 @@
|
||||
/*
|
||||
* IIC.c
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
#include <Main.h>
|
||||
|
||||
static void Start1(void);
|
||||
static void Write1(uint8_t Data);
|
||||
static void ACK1(void);
|
||||
static void Stop1(void);
|
||||
static void Delay2us(uint8_t); //@16.000MHz 2us
|
||||
|
||||
IIC_t IIC_1 = {
|
||||
Start1,
|
||||
Write1,
|
||||
ACK1,
|
||||
Stop1};
|
||||
|
||||
|
||||
/*
|
||||
* @name Start1
|
||||
* @brief IIC1启动命令
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Start1(void)
|
||||
{
|
||||
SCL_1 = HIGH;
|
||||
SDA_1 = HIGH;
|
||||
Delay2us(1); //@16.000MHz // 2微秒延时
|
||||
SDA_1 = LOW; //时钟线高电平 拉低数据线以为传输开始
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Write1
|
||||
* @brief IIC1写命令
|
||||
* @param Data
|
||||
* @retval None
|
||||
*/
|
||||
static void Write1(uint8_t Data)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
|
||||
SCL_1 = LOW; //拉低时钟线 数据可以变化
|
||||
Delay2us(1); // 1微秒延时
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
if (Data & 0x80)
|
||||
SDA_1 = HIGH;
|
||||
else
|
||||
SDA_1 = LOW;
|
||||
|
||||
Delay2us(1); // 1微秒延时
|
||||
SCL_1 = LOW;
|
||||
Delay2us(1); // 1微秒延时
|
||||
SCL_1 = HIGH;
|
||||
Delay2us(1); // 1微秒延时
|
||||
SCL_1 = LOW;
|
||||
Data <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @name ACK1
|
||||
* @brief IIC1应答命令
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void ACK1(void)
|
||||
{
|
||||
static uint8_t timeout = 1;
|
||||
SCL_1 = 1;
|
||||
Delay2us(1);
|
||||
SCL_1 = 0;
|
||||
Delay2us(1);
|
||||
while ((SDA_1) && (timeout <= 200))
|
||||
{
|
||||
timeout++;
|
||||
}
|
||||
SCL_1 = 0;
|
||||
}
|
||||
/*
|
||||
* @name Stop1
|
||||
* @brief IIC1停止命令
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Stop1(void)
|
||||
{
|
||||
SCL_1 = 1;
|
||||
SDA_1 = 0;
|
||||
Delay2us(1);
|
||||
SDA_1 = 1; //时钟线高电平时 拉高数据线为停止信号
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Delay2us
|
||||
* @brief 延时2uS
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Delay2us(uint8_t fui_i) //@16.000MHz 2us
|
||||
{
|
||||
// uint8_t fui_i =1;
|
||||
while(fui_i--);
|
||||
}
|
29
app/IIC.h
Normal file
29
app/IIC.h
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* IIC.h
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
#ifndef __IIC_H
|
||||
#define __IIC_H
|
||||
|
||||
#include <Public.h>
|
||||
|
||||
#define SCL_1 P0_2
|
||||
#define SDA_1 P0_1
|
||||
|
||||
#define HIGH 1
|
||||
#define LOW 0
|
||||
|
||||
typedef struct // IIC 结构体
|
||||
{
|
||||
void (*start)(void); //开启命令
|
||||
void (*write)(uint8_t); //写数据命令
|
||||
void (*ACK)(void); //应答命令
|
||||
void (*stop)(void); //停止命令
|
||||
} IIC_t;
|
||||
|
||||
extern IIC_t IIC_1;
|
||||
|
||||
|
||||
#endif
|
79
app/Main.c
Normal file
79
app/Main.c
Normal file
@ -0,0 +1,79 @@
|
||||
|
||||
|
||||
#define ALLOCATE_EXTERN
|
||||
|
||||
#include <Main.h>
|
||||
|
||||
uint8_t Channel1_Error_Flag = 0;
|
||||
uint8_t Channel2_Error_Flag = 0;
|
||||
void main()
|
||||
{
|
||||
Sys.Init();
|
||||
|
||||
while (1)
|
||||
{
|
||||
UART1.Protocol_Analy(); //协议解析
|
||||
if (Public.Channel1_StatusFlag == FALSE) //判断通道1是否关闭
|
||||
{
|
||||
PWM.PWM1_HeatingSetting(0); //关闭加热通道1
|
||||
Timer0.Error1_Timer = 0; //硬件错误检测计时清除 开始计时
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if ((ADC.Display_Temp1_Value == 0) && (Timer0.Error1_Timer >= 2)) //如果加热打开两秒后 温度还是零 认为温度传感器1故障
|
||||
{
|
||||
Channel1_Error_Flag = System_Fault; //通道1温度传感器故障
|
||||
// PWM.Heating_Flag1 = System_Fault;
|
||||
}
|
||||
else
|
||||
{
|
||||
Channel1_Error_Flag = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (Public.Channel2_StatusFlag == FALSE) //判断通道2是否关闭
|
||||
{
|
||||
PWM.PWM2_HeatingSetting(0); //关闭加热通道2
|
||||
Timer0.Error2_Timer = 0; //硬件错误检测计时清除 开始计时
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((Timer0.Error2_Timer >= 2) && (ADC.Display_Temp2_Value == 0)) //如果加热打开两秒后 温度还是零 认为温度传感器2故障
|
||||
{
|
||||
Channel2_Error_Flag = System_Fault; //通道2温度传感器故障
|
||||
// PWM.Heating_Flag2 = System_Fault;
|
||||
}
|
||||
else
|
||||
{
|
||||
Channel2_Error_Flag = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if ((Public.Channel1_StatusFlag == FALSE) && (Public.Channel2_StatusFlag == FALSE)) //判断两个加热是否都关闭
|
||||
{
|
||||
FAN_PIN = LOW; //关闭风机
|
||||
}
|
||||
else
|
||||
{
|
||||
FAN_PIN = HIGH; //打开风机
|
||||
}
|
||||
|
||||
ADC.Get_ADCData(); //读取AD值转化成温度值
|
||||
|
||||
if (Timer0.TM1650_Flag == 0)
|
||||
{
|
||||
|
||||
TM1650_Display(&IIC_1, Public.Setting_Temp1, 1); //显示通道1
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
TM1650_Display(&IIC_1, Public.Setting_Temp2, 2); //显示通道2
|
||||
}
|
||||
|
||||
WDTC |= 0x10; //喂看门狗
|
||||
|
||||
// }
|
||||
}
|
||||
}
|
43
app/Main.h
Normal file
43
app/Main.h
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* main.h
|
||||
*
|
||||
* Created on: 2022Äê03ÔÂ12ÈÕ
|
||||
* Author: User
|
||||
*/
|
||||
#ifndef __MAIN_H_
|
||||
#define __MAIN_H_
|
||||
|
||||
|
||||
#include "HC89S003AF4.h"
|
||||
#include <stdio.h>
|
||||
#include <intrins.h>
|
||||
|
||||
#include <Sys_init.h>
|
||||
#include <TM1650.h>
|
||||
#include <UART.h>
|
||||
#include <IIC.h>
|
||||
#include <Public.h>
|
||||
#include <Timer0.h>
|
||||
#include <Timer3.h>
|
||||
#include <Protocol.h>
|
||||
#include <ADC.h>
|
||||
#include <PWM.h>
|
||||
#include <IAP.h>
|
||||
#include <PID.h>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define FAN_PIN P2_6
|
||||
|
||||
|
||||
extern uint8_t Channel1_Error_Flag;
|
||||
extern uint8_t Channel2_Error_Flag;
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
80
app/PID.c
Normal file
80
app/PID.c
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* PID.c
|
||||
*
|
||||
* Created on: 2022年03月22日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
#include <Main.h>
|
||||
|
||||
#define kp 13.2 //比例
|
||||
#define ki 0.067 //积分
|
||||
#define kd 35 //微分
|
||||
|
||||
//#define pidtime 6 // pid周期= pidtime * 50ms,至少300ms,否则6675无法工作
|
||||
#define iloss 30 //积分分离阈值,双极性
|
||||
|
||||
sint16_t xdata ek1[2]; // ek0当前误差,ek1上次误差
|
||||
sint16_t xdata uk1; // pid计算输出值,规格化[0,100]
|
||||
sint16_t xdata iek1; //误差积分,分离式
|
||||
|
||||
sint16_t xdata ek2[2]; // ek0当前误差,ek1上次误差
|
||||
sint16_t xdata uk2; // pid计算输出值,规格化[0,100]
|
||||
sint16_t xdata iek2; //误差积分,分离式
|
||||
|
||||
static void Init(void);
|
||||
static uint8_t Realize(uint8_t CHANNEL, uint16_t temp_val);
|
||||
|
||||
PID_t xdata PID_Func = {
|
||||
Init,
|
||||
Realize};
|
||||
|
||||
static void Init(void)
|
||||
{
|
||||
ek1[0] = 0;
|
||||
ek1[1] = 0;
|
||||
uk1 = 0;
|
||||
iek1 = 0;
|
||||
|
||||
ek2[0] = 0;
|
||||
ek2[1] = 0;
|
||||
uk2 = 0;
|
||||
iek2 = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief PID算法实现
|
||||
* @param CHANNEL 通道 Temp_Setting 目标值
|
||||
* @note 无
|
||||
* @retval 通过PID计算后的输出
|
||||
*/
|
||||
static uint8_t Realize(uint8_t CHANNEL, uint16_t Temp_Setting)
|
||||
{
|
||||
if (CHANNEL == Temp1_CHANNEL)
|
||||
{
|
||||
ek1[1] = ek1[0];
|
||||
ek1[0] = Temp_Setting - ADC.Temp1_Result; //计算本次偏差
|
||||
if (ek1[0] > (-iloss) && ek1[0] < iloss) //积分分离
|
||||
iek1 += ek1[0];
|
||||
uk1 = ek1[0] * kp + iek1 * ki + (ek1[0] - ek1[1]) * kd; // PID运算
|
||||
if (uk1 <= 0)
|
||||
uk1 = 0;
|
||||
if (uk1 >= 100)
|
||||
uk1 = 100;
|
||||
return uk1;
|
||||
}
|
||||
else if (CHANNEL == Temp2_CHANNEL) //通道2计算
|
||||
{
|
||||
ek2[1] = ek2[0];
|
||||
ek2[0] = Temp_Setting - ADC.Temp2_Result; //计算本次偏差
|
||||
if (ek2[0] > (-iloss) && ek2[0] < iloss) //积分分离
|
||||
iek2 += ek2[0];
|
||||
uk2 = ek2[0] * kp + iek2 * ki + (ek2[0] - ek2[1]) * kd; // PID运算
|
||||
if (uk2 <= 0)
|
||||
uk2 = 0;
|
||||
if (uk2 >= 100)
|
||||
uk2 = 100;
|
||||
return uk2;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
41
app/PID.h
Normal file
41
app/PID.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* PID.h
|
||||
*
|
||||
* Created on: 2022年03月22日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
||||
void (*Init)(void);
|
||||
uint8_t(*Realize)(uint8_t,uint16_t);
|
||||
} PID_t;
|
||||
|
||||
// typedef struct
|
||||
// {
|
||||
// int target_val; //目标值
|
||||
// int actual_val; //实际值
|
||||
// int err; //定义当前偏差值
|
||||
// int err_next; //定义下一个偏差值
|
||||
// int err_last; //定义最后一个偏差值
|
||||
// uint8_t kp,ki,kd; //定义比例,积分,微分系数
|
||||
// }_pid;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern PID_t xdata PID_Func;
|
||||
|
||||
|
||||
|
147
app/PWM.c
Normal file
147
app/PWM.c
Normal file
@ -0,0 +1,147 @@
|
||||
/*
|
||||
* PWM.c
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <main.h>
|
||||
|
||||
/* Private define-------------------------------------------------------------*/
|
||||
#define CCP_S1 BIT5
|
||||
#define CCP_S0 BIT4
|
||||
|
||||
#define EPC0H BIT1
|
||||
#define EPC0L BIT0
|
||||
|
||||
/* Private variables----------------------------------------------------------*/
|
||||
|
||||
/* Private function prototypes------------------------------------------------*/
|
||||
static void PWM_Init(void); // PWM初始化
|
||||
static void PWM1_HeatingSetting(uint8_t Percent); //通道1设置加热
|
||||
static void PWM2_HeatingSetting(uint8_t Percent); //通道2设置加热
|
||||
/* Public variables-----------------------------------------------------------*/
|
||||
PWM_t PWM =
|
||||
{0,
|
||||
0,
|
||||
PWM_Init,
|
||||
PWM1_HeatingSetting,
|
||||
PWM2_HeatingSetting};
|
||||
|
||||
/*
|
||||
* @name PWM_Init
|
||||
* @brief PWM初始化
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void PWM_Init()
|
||||
{
|
||||
PWM0_MAP = 0x22; // PWM0通道映射P22
|
||||
PWM01_MAP = 0x23; // PWM01通道映射P23
|
||||
PWM0C = 0x01; // PWM0高有效 PWM01高有效 时钟8分频
|
||||
|
||||
//独立模式下,PWM0和PWM01共用一个周期寄存器
|
||||
// PWM0的占空比调节使用 PWM0组的占空比寄存器
|
||||
// PWM01的占空比调节使用 PWM0组的死区寄存器
|
||||
|
||||
//周期计算 = 0x03ff / (Fosc / PWM分频系数)
|
||||
// = 0x03ff / (16000000 / 8)
|
||||
// = 1023 /2000000
|
||||
// = 511.5us 约1.955kHz
|
||||
|
||||
PWM0PH = 0x03; //周期高4位设置为0x03
|
||||
PWM0PL = 0xE7; //周期低8位设置为0xFF
|
||||
|
||||
//占空比计算= 0x0155 / (Fosc / PWM分频系数) (Fosc见系统时钟配置的部分)
|
||||
// = 0x0155 / (16000000 / 8)
|
||||
// = 341 / 2000000
|
||||
// = 170.5us 占空比为 170.5/511.5 = 33.3%
|
||||
PWM0DH = 0x00; // PWM0高4位占空比
|
||||
PWM0DL = 0x00; // PWM0低4位占空比
|
||||
PWM0DTH = 0x00; // PWM01高4位占空比
|
||||
PWM0DTL = 0x00; // PWM01低8位占空比
|
||||
PWM0EN = 0x0F; //使能PWM0 工作于独立模式
|
||||
}
|
||||
|
||||
/*
|
||||
* @name PWM1_HeatingSetting
|
||||
* @brief 调整加热功率
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void PWM1_HeatingSetting(uint8_t Percent)
|
||||
{
|
||||
uint16_t Temp_Value = 0;
|
||||
Temp_Value = Percent * 10;
|
||||
if (Public.Channel1_StatusFlag != FALSE)
|
||||
{
|
||||
|
||||
if (Channel1_Error_Flag != System_Fault) //判断是否故障
|
||||
{
|
||||
|
||||
if (Percent == 0)
|
||||
{
|
||||
PWM.Heating_Flag1 = System_Complete;//加热温度已经到达
|
||||
}
|
||||
else
|
||||
{
|
||||
PWM.Heating_Flag1 = TRUE; //正在加热
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PWM.Heating_Flag1 = System_Fault;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
PWM.Heating_Flag1 = FALSE;
|
||||
}
|
||||
|
||||
PWM0DTH = (Temp_Value >> 8) & 0xFF;
|
||||
PWM0DTL = (Temp_Value & 0xFF);
|
||||
}
|
||||
|
||||
/*
|
||||
* @name PWM2_HeatingSetting
|
||||
* @brief 调整加热功率
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void PWM2_HeatingSetting(uint8_t Percent)
|
||||
{
|
||||
uint16_t Temp_Value = 0;
|
||||
Temp_Value = Percent * 10;
|
||||
if (Public.Channel2_StatusFlag != FALSE)
|
||||
{
|
||||
|
||||
if (Channel2_Error_Flag != System_Fault) //判断是否故障
|
||||
{
|
||||
if (Percent == 0)
|
||||
{
|
||||
PWM.Heating_Flag2 = System_Complete; //加热温度已经到达
|
||||
}
|
||||
else
|
||||
{
|
||||
PWM.Heating_Flag2 = TRUE; //正在加热
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PWM.Heating_Flag2 = System_Fault;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
PWM.Heating_Flag2 = FALSE;
|
||||
}
|
||||
|
||||
PWM0DH = (Temp_Value >> 8) & 0xFF;
|
||||
PWM0DL = (Temp_Value & 0xFF);
|
||||
}
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
37
app/PWM.h
Normal file
37
app/PWM.h
Normal file
@ -0,0 +1,37 @@
|
||||
#ifndef __PWM_H__
|
||||
#define __PWM_H__
|
||||
|
||||
/*
|
||||
* PWM.h
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
//定义枚举类型
|
||||
typedef enum
|
||||
{
|
||||
Duty_0 = (uint8_t)0,
|
||||
Duty_20 = (uint8_t)20,
|
||||
Duty_40 = (uint8_t)40,
|
||||
Duty_60 = (uint8_t)60,
|
||||
Duty_80 = (uint8_t)80,
|
||||
Duty_100 = (uint8_t)100,
|
||||
}PWM_Value_t;
|
||||
|
||||
//定义结构体类型
|
||||
typedef struct
|
||||
{
|
||||
uint8_t Heating_Flag1;
|
||||
uint8_t Heating_Flag2;
|
||||
void (*PWM_Init)(void); //PWM初始化
|
||||
void (*PWM1_HeatingSetting)(uint8_t Percent); //设置加热百分比 范围 0~100
|
||||
void (*PWM2_HeatingSetting)(uint8_t Percent); //设置加热百分比 范围 0~100
|
||||
} PWM_t;
|
||||
|
||||
/* extern variables-----------------------------------------------------------*/
|
||||
extern PWM_t PWM;
|
||||
|
||||
#endif
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
129
app/Protocol.c
Normal file
129
app/Protocol.c
Normal file
@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Protocol.c
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
#include <Main.h>
|
||||
|
||||
void Analysis(UART_t *UART); //协议处理
|
||||
void Send(uint8_t func); //数据发送
|
||||
|
||||
uint8_t Sum_Check(uint8_t *arr, uint8_t Len); //求和校验
|
||||
|
||||
Protocol_t xdata Protocol = {
|
||||
Analysis,
|
||||
Send};
|
||||
|
||||
/* 协议长度为10 头帧 0A 第二帧 功能位 第三帧 有效数据长度位 中间6位为有效数据位 尾帧为和校验位
|
||||
功能位01为读寄存器 02为写寄存器
|
||||
中间六位有效数据位前三位为通道1 第一位为状态位,0x00代表关闭 0x01代表打开正在加热 0x02代表加热温度达到
|
||||
第二三位为温度位 ,后三位为通道2 状态位以及温度位
|
||||
例子:0A 01 06 00 00 00 00 00 00 66
|
||||
*/
|
||||
/*
|
||||
* @name Analysis
|
||||
* @brief 串口协议解析函数
|
||||
* @param UART_t
|
||||
* @retval None
|
||||
*/
|
||||
void Analysis(UART_t *UART)
|
||||
{
|
||||
UART_t *const com = UART;
|
||||
uint8_t sum_check = 0, Data_Len = 0;
|
||||
if (UART1.ucRec_Flag == TRUE) //证明接收到数据
|
||||
{
|
||||
|
||||
sum_check = Sum_Check(UART1.pucRec_Buffer, Protocol_Len); //求和校验的值
|
||||
Data_Len = UART1.pucRec_Buffer[2]; //获取数据长度
|
||||
if ((UART1.pucRec_Buffer[0] == 0x0A) && (UART1.pucRec_Buffer[Data_Len + 3] == sum_check)) //校验协议
|
||||
{
|
||||
|
||||
if (UART1.pucRec_Buffer[1] == Register_Read) //读寄存器返回值
|
||||
{
|
||||
Send(Register_Read); //发送返回数据
|
||||
}
|
||||
else if (UART1.pucRec_Buffer[1] == Register_Write) //写寄存器的返回值
|
||||
{
|
||||
|
||||
Public.Channel1_StatusFlag = UART1.pucRec_Buffer[3]; //提取通道1设置状态
|
||||
PWM.Heating_Flag1 = Public.Channel1_StatusFlag;
|
||||
Public.Setting_Temp1 = UART1.pucRec_Buffer[4]; //提取通道1设置温度
|
||||
Public.Setting_Temp1 = Public.Setting_Temp1 << 8;
|
||||
Public.Setting_Temp1 |= UART1.pucRec_Buffer[5]; //提取通道1设置温度
|
||||
Public.Channel2_StatusFlag = UART1.pucRec_Buffer[6]; //提取通道2设置状态
|
||||
PWM.Heating_Flag2 = Public.Channel2_StatusFlag;
|
||||
Public.Setting_Temp2 = UART1.pucRec_Buffer[7]; //提取通道2设置温度
|
||||
Public.Setting_Temp2 = Public.Setting_Temp2 << 8;
|
||||
Public.Setting_Temp2 |= UART1.pucRec_Buffer[8]; //提取通道2设置温度
|
||||
IAP.Save_TempValue(); //将温度保存到EEPROM内
|
||||
Send(Register_Write); //发送返回数据
|
||||
}
|
||||
else if (UART1.pucRec_Buffer[1] == Setting_Reg_Read) //读取保存的设置温度值
|
||||
{
|
||||
Send(Setting_Reg_Read);
|
||||
}
|
||||
}
|
||||
|
||||
Public.Memory_Clr(UART1.pucRec_Buffer, Protocol_Len); //清除缓存
|
||||
UART1.ucRec_Flag = FALSE; //关闭串口接收完成标志位
|
||||
}
|
||||
}
|
||||
/*
|
||||
* @name Send
|
||||
* @brief 串口发送数据函数
|
||||
* @param func
|
||||
* @retval None
|
||||
*/
|
||||
void Send(uint8_t func)
|
||||
{
|
||||
UART1.pucSend_Buffer[0] = 0x0A; //头帧
|
||||
UART1.pucSend_Buffer[1] = func; //功能位
|
||||
UART1.pucSend_Buffer[2] = 0x06; //有效数据位长度
|
||||
if (func == Register_Read)
|
||||
{
|
||||
UART1.pucSend_Buffer[3] = PWM.Heating_Flag1; //通道1的标识
|
||||
UART1.pucSend_Buffer[4] = (ADC.Display_Temp1_Value >> 8) & 0xFF; //返回通道1实时的温度
|
||||
UART1.pucSend_Buffer[5] = ADC.Display_Temp1_Value & 0xFF;
|
||||
UART1.pucSend_Buffer[6] = PWM.Heating_Flag2; //通道2的状态
|
||||
UART1.pucSend_Buffer[7] = (ADC.Display_Temp2_Value >> 8) & 0xFF; //返回通道2实时的温度
|
||||
UART1.pucSend_Buffer[8] = ADC.Display_Temp2_Value & 0xFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
UART1.pucSend_Buffer[3] = Public.Channel1_StatusFlag;; //通道1的标识
|
||||
UART1.pucSend_Buffer[4] = (Public.Setting_Temp1 >> 8) & 0xFF; //返回通道1实时的温度
|
||||
UART1.pucSend_Buffer[5] = Public.Setting_Temp1 & 0xFF;
|
||||
UART1.pucSend_Buffer[6] = Public.Channel2_StatusFlag; //通道2的状态
|
||||
UART1.pucSend_Buffer[7] = (Public.Setting_Temp2 >> 8) & 0xFF; //返回通道2实时的温度
|
||||
UART1.pucSend_Buffer[8] = Public.Setting_Temp2 & 0xFF;
|
||||
}
|
||||
|
||||
UART1.pucSend_Buffer[9] = Sum_Check(UART1.pucSend_Buffer, Protocol_Len); //求前9位和检验的值
|
||||
UART1.UART_SendArray(UART1.pucSend_Buffer, Protocol_Len); //发送返回值
|
||||
}
|
||||
/*
|
||||
* @name Sum_Check
|
||||
* @brief 和校验函数
|
||||
* @param *arr Len
|
||||
* @retval None
|
||||
* 累加和checksum校验算法,不同领域可能采用不同算法,算法存在细微差别
|
||||
* 本函数采用简便累加和计算方法,对十进制串按8位进行分割,对各8位值进行累加,即得校验和;
|
||||
* 如果校验和的数值超过十六进制的FF,也就是255,就要求其补码作为校验和
|
||||
*/
|
||||
uint8_t Sum_Check(uint8_t *arr, uint8_t Len) //求和校验函数
|
||||
{
|
||||
uint8_t i = 0;
|
||||
uint16_t Sum = 0;
|
||||
for (i = 0; i < (Len - 1); i++)
|
||||
{
|
||||
Sum += *(arr + i);
|
||||
}
|
||||
if (Sum > 0xFF) //超过255 求补码
|
||||
{
|
||||
Sum = (~(Sum & 0xFF)) + 1;
|
||||
}
|
||||
|
||||
return Sum & 0xFF;
|
||||
}
|
39
app/Protocol.h
Normal file
39
app/Protocol.h
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Protocol.h
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
#include<Main.h>
|
||||
|
||||
|
||||
#define Register_Read 0x01 //读寄存器
|
||||
#define Register_Write 0x02 //写寄存器
|
||||
#define Setting_Reg_Read 0x03 //读保存设置寄存器寄存器
|
||||
#define Protocol_Len 0x0A //协议数据长度
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void (*Analysis)(UART_t *);
|
||||
void (*Send)(uint8_t);
|
||||
|
||||
}Protocol_t;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern Protocol_t xdata Protocol;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
110
app/Public.c
Normal file
110
app/Public.c
Normal file
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Public.c
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <main.h>
|
||||
|
||||
/* Private define-------------------------------------------------------------*/
|
||||
|
||||
/* Private variables----------------------------------------------------------*/
|
||||
static void Delay_us(uint16_t); // us延时函数
|
||||
static void Delay_ms(uint16_t); // ms延时函数
|
||||
static void Memory_Clr(uint8_t *, uint16_t); //内存清除函数
|
||||
static void Error_Handler(void); //错误处理函数
|
||||
static void Sys_Soft_Reset(void); //系统软件复位
|
||||
|
||||
/* Public variables-----------------------------------------------------------*/
|
||||
Public_t idata Public =
|
||||
{
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
Delay_us,
|
||||
Delay_ms,
|
||||
Memory_Clr,
|
||||
Error_Handler,
|
||||
Sys_Soft_Reset};
|
||||
|
||||
/* Private function prototypes------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* @name Delay_ms
|
||||
* @brief 毫秒延时函数
|
||||
* @param ms -> 需要延时的时间
|
||||
* @retval None
|
||||
*/
|
||||
static void Delay_ms(uint16_t fui_i) //@16MHz
|
||||
{
|
||||
uint16_t fui_j;
|
||||
for (; fui_i > 0; fui_i--)
|
||||
for (fui_j = 1596; fui_j > 0; fui_j--)
|
||||
;
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Delay_us
|
||||
* @brief 微秒延时函数
|
||||
* @param us -> 需要延时的时间
|
||||
* @retval None
|
||||
*/
|
||||
static void Delay_us(uint16_t us) //@22.1184MHz
|
||||
{
|
||||
uint8_t i;
|
||||
while (us--)
|
||||
{
|
||||
|
||||
i = 3;
|
||||
while (--i)
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Memory_Set
|
||||
* @brief 内存清除函数
|
||||
* @param pucBuffer -> 内存首地址
|
||||
LEN -> 内存长度
|
||||
* @retval None
|
||||
*/
|
||||
static void Memory_Clr(uint8_t *pucBuffer, uint16_t LEN)
|
||||
{
|
||||
uint16_t i;
|
||||
|
||||
for (i = 0; i < LEN; i++)
|
||||
{
|
||||
*(pucBuffer + i) = (uint8_t)0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Error_Handler
|
||||
* @brief 错误处理函数
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Error_Handler()
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Sys_Soft_Reset
|
||||
* @brief 系统软件复位
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Sys_Soft_Reset(void)
|
||||
{
|
||||
// #ifdef Monitor_Run_Code
|
||||
// printf("System soft reset!\r\n\r\n");
|
||||
// #endif
|
||||
|
||||
// IAP_CONTR = 0x20;
|
||||
}
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
74
app/Public.h
Normal file
74
app/Public.h
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Public.h
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
#ifndef __PUBLIC_H_
|
||||
#define __PUBLIC_H_
|
||||
|
||||
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
||||
|
||||
#define HIGH 1
|
||||
#define LOW 0
|
||||
//数据类型重定义
|
||||
typedef signed char sint8_t;
|
||||
typedef signed short int sint16_t;
|
||||
typedef signed long int sint32_t;
|
||||
|
||||
typedef unsigned char uint8_t;
|
||||
typedef unsigned short int uint16_t;
|
||||
typedef unsigned long int uint32_t;
|
||||
|
||||
//定义枚举类型 -> BIT位
|
||||
typedef enum
|
||||
{
|
||||
BIT0 = (uint8_t)(0x01 << 0),
|
||||
BIT1 = (uint8_t)(0x01 << 1),
|
||||
BIT2 = (uint8_t)(0x01 << 2),
|
||||
BIT3 = (uint8_t)(0x01 << 3),
|
||||
BIT4 = (uint8_t)(0x01 << 4),
|
||||
BIT5 = (uint8_t)(0x01 << 5),
|
||||
BIT6 = (uint8_t)(0x01 << 6),
|
||||
BIT7 = (uint8_t)(0x01 << 7),
|
||||
}BIT_t;
|
||||
|
||||
//定义枚举类型 系统的状态
|
||||
typedef enum
|
||||
{
|
||||
System_Stop = (uint8_t)0, //系统停止加热
|
||||
System_Heating = (uint8_t)1, //加热中
|
||||
System_Complete = (uint8_t)2, //加热温度达到
|
||||
System_Fault = (uint8_t)3, //系统故障
|
||||
} Sys_Status_t;
|
||||
|
||||
|
||||
|
||||
//定义结构体类型
|
||||
typedef struct
|
||||
{
|
||||
uint8_t Channel1_StatusFlag;
|
||||
uint8_t Channel2_StatusFlag;
|
||||
uint16_t Setting_Temp1;
|
||||
uint16_t Setting_Temp2;
|
||||
void (*Delau_us)(uint16_t); //us延时函数
|
||||
void (*Delay_ms)(uint16_t); //ms延时函数
|
||||
void (*Memory_Clr)(uint8_t*,uint16_t); //内存清除函数
|
||||
void (*Error_Handler)(void); //错误处理函数
|
||||
void (*Sys_Soft_Reset)(void); //系统软件复位
|
||||
} Public_t;
|
||||
|
||||
/* extern variables-----------------------------------------------------------*/
|
||||
extern Public_t idata Public;
|
||||
|
||||
/*******预编译宏定义*******/
|
||||
#define Monitor_Run_Code //代码运行监控器
|
||||
//#define Hardware_TEST //硬件测试
|
||||
|
||||
#endif
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
35
app/Sys_init.c
Normal file
35
app/Sys_init.c
Normal file
@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Sys_init.c
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
#include <Main.h>
|
||||
extern System_Init(); //引用外部函数声明
|
||||
static void Init(void); //初始化函数
|
||||
|
||||
Sys_init_t Sys = {
|
||||
Init};
|
||||
|
||||
/*
|
||||
* @name Init
|
||||
* @brief 系统初始化
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
|
||||
static void Init(void)
|
||||
{
|
||||
// WDTCCR = 0x00; //关闭看门狗
|
||||
System_Init(); //时钟以及引脚初始化 采用配置文件完成
|
||||
Timer0.Timer0_Init(); //定时器0初始化
|
||||
Timer3.Timer3_Init(); //定时器3初始化
|
||||
PWM.PWM_Init(); // PWM初始化
|
||||
ADC.Init(); // ADC初始化
|
||||
UART1.UART_Init(); //串口1初始化
|
||||
TM1650.Init(); // 1650初始化
|
||||
PID_Func.Init(); // pid初始化
|
||||
IAP.Get_TempValue(); //读取存储的温度值
|
||||
FAN_PIN = LOW; //上电默认关闭风机
|
||||
}
|
24
app/Sys_init.h
Normal file
24
app/Sys_init.h
Normal file
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Sys_init.h
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
#ifndef __SYS_INIT_H
|
||||
#define __SYS_INIT_H
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
||||
void(*Init)(void); //系统初始化函数
|
||||
|
||||
}Sys_init_t;
|
||||
|
||||
|
||||
|
||||
extern Sys_init_t Sys;
|
||||
|
||||
|
||||
#endif
|
||||
|
148
app/TM1650.c
Normal file
148
app/TM1650.c
Normal file
@ -0,0 +1,148 @@
|
||||
/*
|
||||
* TM1650.c
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
#include <Main.h>
|
||||
|
||||
// 数码管显示数组
|
||||
static xdata uint8_t tab[] = {
|
||||
0x3F, // 0
|
||||
0x06, // 1
|
||||
0x5B, // 2
|
||||
0x4F, // 3
|
||||
0x66, // 4
|
||||
0x6D, // 5
|
||||
0x7D, // 6
|
||||
0x07, // 7
|
||||
0x7F, // 8
|
||||
0x6F, // 9
|
||||
0x40, // 10 = -
|
||||
0x79, // 11 = E
|
||||
0x50, // 12 = r
|
||||
0x00, // 13 = Null
|
||||
0x09, // 14
|
||||
0x58, // 15 = 下c
|
||||
0x1c, // 16 = u
|
||||
0x63, // 17 = 上o
|
||||
0x39, // 18 = C
|
||||
0x5C, // 19 = 下o
|
||||
0x0f, // 20 = 大反C
|
||||
0x61, // 21 = 上c
|
||||
0x71, // 22 = F
|
||||
0x37, // 23 = N
|
||||
0x77, // 24 = A
|
||||
0x10, // 25 下|
|
||||
0x14 // 26 下|下|
|
||||
};
|
||||
|
||||
static void Init(void); // tm1650初始化
|
||||
static void TM1650_Set(IIC_t *Channel, uint8_t Add, uint8_t Value); //设置tm1650寄存器的值
|
||||
|
||||
static void Display_OFF(IIC_t *Channel); //显示OFF 字符
|
||||
static void Display_Close(IIC_t *Channel); //显示暂时关闭
|
||||
|
||||
void TM1650_Display(IIC_t *Channel, uint16_t Value, uint8_t dot); //显示使能
|
||||
|
||||
TM1650_t TM1650 = {
|
||||
1,
|
||||
Init,
|
||||
Display_OFF,
|
||||
Display_Close};
|
||||
|
||||
/*
|
||||
* @name Init
|
||||
* @brief 1650初始化
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Init(void)
|
||||
{
|
||||
TM1650_Set(&IIC_1, 0x48, 0x31); //打开通道1 设置亮度3级 开显示
|
||||
}
|
||||
|
||||
/*
|
||||
* @name TM1650_Set
|
||||
* @brief 1650写数据
|
||||
* @param Channel Add Value
|
||||
* @retval None
|
||||
*/
|
||||
static void TM1650_Set(IIC_t *Channel, uint8_t Add, uint8_t Value)
|
||||
{
|
||||
IIC_t *const COM = Channel;
|
||||
EA = 0;
|
||||
COM->start(); // iic开始
|
||||
COM->write(Add); // iic写功能或者地址
|
||||
COM->ACK(); //等待应答信号
|
||||
COM->write(Value); // iic写设置数据或显示数据
|
||||
COM->ACK(); //等待应答信号
|
||||
COM->stop(); // iic停止
|
||||
EA = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* @name TM1650_Set
|
||||
* @brief 1650显示函数
|
||||
* @param Channel Value CHANNEL
|
||||
* @retval None
|
||||
*/
|
||||
void TM1650_Display(IIC_t *Channel, uint16_t Value, uint8_t CHANNEL)
|
||||
{
|
||||
IIC_t *const IIC = Channel;
|
||||
|
||||
if (CHANNEL == 1) //判断显示通道
|
||||
{
|
||||
TM1650_Set(IIC, DIG1, tab[25]); //显示|
|
||||
}
|
||||
else
|
||||
{
|
||||
TM1650_Set(IIC, DIG1, tab[26]); //显示||
|
||||
}
|
||||
|
||||
if (Value < 100)
|
||||
{
|
||||
TM1650_Set(IIC, DIG2, tab[13]); //如果温度不到100 关闭最高位数码管
|
||||
}
|
||||
else
|
||||
{
|
||||
TM1650_Set(IIC, DIG2, tab[Value % 1000 / 100]);
|
||||
}
|
||||
TM1650_Set(IIC, DIG3, tab[Value % 100 / 10]);
|
||||
TM1650_Set(IIC, DIG4, tab[Value % 10 / 1]);
|
||||
|
||||
// TM1650_Set(IIC, DIG1, tab[Value / 1000]);
|
||||
// TM1650_Set(IIC, DIG2, tab[Value / 100 % 10]);
|
||||
// TM1650_Set(IIC, DIG3, tab[Value / 10 % 10]);
|
||||
// TM1650_Set(IIC, DIG4, tab[Value / 1 % 10]);
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Display_OFF
|
||||
* @brief TM1650显示OFF
|
||||
* @param Channel
|
||||
* @retval None
|
||||
*/
|
||||
static void Display_OFF(IIC_t *Channel)
|
||||
{
|
||||
IIC_t *const IIC = Channel;
|
||||
TM1650_Set(IIC, DIG1, tab[0]); //第一位显示O
|
||||
TM1650_Set(IIC, DIG2, tab[22]); //第二位显示F
|
||||
TM1650_Set(IIC, DIG3, tab[22]); //第三位显示F
|
||||
TM1650_Set(IIC, DIG4, tab[13]); //第四位显示关闭
|
||||
}
|
||||
/*
|
||||
* @name Display_Close
|
||||
* @brief 1650显示关闭
|
||||
* @param Channel
|
||||
* @retval None
|
||||
*/
|
||||
static void Display_Close(IIC_t *Channel)
|
||||
{
|
||||
IIC_t *const IIC = Channel;
|
||||
TM1650_Set(IIC, DIG1, tab[13]); //关闭显示
|
||||
TM1650_Set(IIC, DIG2, tab[13]); //关闭显示
|
||||
TM1650_Set(IIC, DIG3, tab[13]); //关闭显示
|
||||
TM1650_Set(IIC, DIG4, tab[13]); //关闭显示
|
||||
}
|
37
app/TM1650.h
Normal file
37
app/TM1650.h
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* TM1650.h
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
#ifndef __TM1650_H
|
||||
#define __TM1650_H
|
||||
#include <IIC.h>
|
||||
|
||||
|
||||
|
||||
|
||||
#define DIG1 0x68
|
||||
#define DIG2 0x6A
|
||||
#define DIG3 0x6C
|
||||
#define DIG4 0x6E
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t Flicker_Flag; //TM1650闪烁的标志位
|
||||
void (*Init)(void); //初始化函数
|
||||
|
||||
void (*Display_OFF)(IIC_t*); //显示off命令
|
||||
void (*Display_Close)(IIC_t*); //显示关闭命令
|
||||
}TM1650_t;
|
||||
|
||||
|
||||
|
||||
extern void TM1650_Display(IIC_t *Channel, uint16_t Value,uint8_t CHANNEL); //显示使能
|
||||
extern TM1650_t TM1650;
|
||||
|
||||
|
||||
#endif
|
||||
|
75
app/Timer0.c
Normal file
75
app/Timer0.c
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Timer0.c
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <main.h>
|
||||
|
||||
/* Private define-------------------------------------------------------------*/
|
||||
|
||||
/* Private variables----------------------------------------------------------*/
|
||||
|
||||
/* Private function prototypes------------------------------------------------*/
|
||||
static void Timer0_Init(void); //定时器0初始化
|
||||
|
||||
/* Public variables-----------------------------------------------------------*/
|
||||
Timer0_t Timer0 =
|
||||
{0, //通道1错误检测计时
|
||||
0,//通道2错误检测计时
|
||||
0, //数码管切换显示标志
|
||||
0, //串口发送超时计数
|
||||
0, //串口接收超时计数
|
||||
0, //定时器中断计数
|
||||
Timer0_Init};
|
||||
|
||||
/*
|
||||
* @name Timer0_Init
|
||||
* @brief 定时器0初始化
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Timer0_Init() // //1毫秒@16MHz
|
||||
{
|
||||
TCON1 = 0x00; // Tx0定时器时钟为Fosc
|
||||
TMOD = 0x00; // 16位重装载定时器/计数器
|
||||
// // Tim0计算时间 = (65536 - 0xFACB) * (1 / (Fosc /Timer分频系数))
|
||||
// // = 1333 / (16000000 / 12)
|
||||
// // = 1 ms
|
||||
|
||||
// //定时1ms
|
||||
// //反推初值 = 65536 - ((1/1000) / (1/(Fosc / Timer分频系数)))
|
||||
// // = 65536 - ((1/1000) / (1/(16000000 / 12)))
|
||||
// // = 65536 - 1333
|
||||
// // = 0xFACB
|
||||
TH0 = 0xFA;
|
||||
TL0 = 0xCB; // T0定时时间1ms
|
||||
IE |= 0x02; //打开T0中断
|
||||
TCON |= 0x10; //使能T0
|
||||
EA = 1; //打开总中断
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Timer0_isr()
|
||||
* @brief 定时器0中断函数(1ms中断一次)
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
/***********定时器0中断函数***********/
|
||||
void Timer0_isr() interrupt TIMER0_VECTOR
|
||||
{
|
||||
if (++Timer0.usMCU_Run_Timer >= TIMER0_1000mS)
|
||||
{
|
||||
Timer0.usMCU_Run_Timer = 0;
|
||||
Timer0.TM1650_Flag = ~Timer0.TM1650_Flag;
|
||||
Timer0.Error1_Timer++;
|
||||
Timer0.Error2_Timer++;
|
||||
}
|
||||
Timer0.msDelay_Timer++; //串口接收超时计数
|
||||
Timer0.ADC_Timer++;
|
||||
|
||||
}
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
42
app/Timer0.h
Normal file
42
app/Timer0.h
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Timer0.h
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
#ifndef __Timer0_H__
|
||||
#define __Timer0_H__
|
||||
|
||||
//定义枚举类型
|
||||
typedef enum
|
||||
{
|
||||
TIMER0_10mS = (uint16_t)10,
|
||||
TIMER0_50mS = (uint16_t)50,
|
||||
TIMER0_80mS = (uint16_t)80,
|
||||
TIMER0_100mS = (uint16_t)100,
|
||||
TIMER0_200mS = (uint16_t)200,
|
||||
TIMER0_500mS = (uint16_t)500,
|
||||
TIMER0_1000mS = (uint16_t)1000,
|
||||
TIMER0_2000mS = (uint16_t)2000,
|
||||
} TIMER0_Value_t;
|
||||
|
||||
//定义结构体类型
|
||||
typedef struct
|
||||
{
|
||||
uint8_t volatile Error1_Timer; //系统错误监测计时
|
||||
uint8_t volatile Error2_Timer; //系统错误监测计时
|
||||
uint16_t volatile TM1650_Flag; //数码管切换显示标志
|
||||
uint16_t volatile msDelay_Timer; // mS计时
|
||||
uint16_t volatile ADC_Timer; // 采样计时
|
||||
uint16_t volatile usMCU_Run_Timer; //计数
|
||||
void (*Timer0_Init)(void); //定时器0初始化
|
||||
} Timer0_t;
|
||||
|
||||
/* extern variables-----------------------------------------------------------*/
|
||||
extern Timer0_t Timer0;
|
||||
|
||||
#endif
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
62
app/Timer3.c
Normal file
62
app/Timer3.c
Normal file
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Timer2.c
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <main.h>
|
||||
|
||||
/* Private function prototypes------------------------------------------------*/
|
||||
static void Timer3_Init(void); //定时器0初始化
|
||||
|
||||
/* Public variables-----------------------------------------------------------*/
|
||||
Timer3_t xdata Timer3 =
|
||||
{
|
||||
|
||||
0, //定时器计数标志位
|
||||
Timer3_Init};
|
||||
|
||||
/*
|
||||
* @name Timer0_Init
|
||||
* @brief 定时器0初始化
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Timer3_Init() // 10毫秒@16.000MHz
|
||||
{
|
||||
T3CON = 0x20; // Timer3 使用时钟 Fosc/64 分频
|
||||
TH3 = 0xF6;
|
||||
TL3 = 0x3C;
|
||||
ET3 = 1; //打开定时器3中断
|
||||
EA = 1; //打开总中断
|
||||
T3CON |= 0x04; //启动定时器3
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Timer0_isr()
|
||||
* @brief 定时器3中断函数(10ms中断一次)
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
/***********定时器3中断函数***********/
|
||||
void Timer3_isr() interrupt T3_VECTOR
|
||||
{
|
||||
|
||||
if (++Timer3.mSDelay_Timer >= TIMER3_300mS) //数码管闪烁
|
||||
{
|
||||
Timer3.mSDelay_Timer = 0;
|
||||
if (Public.Channel1_StatusFlag != FALSE)
|
||||
{
|
||||
PWM.PWM1_HeatingSetting(PID_Func.Realize(Temp1_CHANNEL, Public.Setting_Temp1));
|
||||
}
|
||||
|
||||
if (Public.Channel2_StatusFlag != FALSE)
|
||||
{
|
||||
PWM.PWM2_HeatingSetting(PID_Func.Realize(Temp2_CHANNEL, Public.Setting_Temp2));
|
||||
}
|
||||
}
|
||||
}
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
39
app/Timer3.h
Normal file
39
app/Timer3.h
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Timer2.h
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
#ifndef __Timer3_H__
|
||||
#define __Timer3_H__
|
||||
|
||||
//定义枚举类型
|
||||
typedef enum
|
||||
{
|
||||
|
||||
TIMER3_10mS = (uint16_t)1,
|
||||
TIMER3_50mS = (uint16_t)5,
|
||||
TIMER3_100mS = (uint16_t)10,
|
||||
TIMER3_200mS = (uint16_t)20,
|
||||
TIMER3_300mS = (uint16_t)30,
|
||||
TIMER3_500mS = (uint16_t)50,
|
||||
TIMER3_1S = (uint16_t)100,
|
||||
TIMER3_2S = (uint16_t)200,
|
||||
} TIMER3_Value_t;
|
||||
|
||||
//定义结构体类型
|
||||
typedef struct
|
||||
{
|
||||
|
||||
uint16_t volatile mSDelay_Timer; //定时器计数位
|
||||
|
||||
void (*Timer3_Init)(void); //定时器0初始化
|
||||
} Timer3_t;
|
||||
|
||||
/* extern variables-----------------------------------------------------------*/
|
||||
extern Timer3_t xdata Timer3;
|
||||
|
||||
#endif
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
47
app/UART.h
Normal file
47
app/UART.h
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* UART.h
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __UART_H_
|
||||
#define __UART_H_
|
||||
|
||||
#include <Public.h>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//定义异步串口结构体类型
|
||||
typedef struct
|
||||
{
|
||||
|
||||
uint8_t volatile ucTX_Busy_Flag; //发送忙碌标志
|
||||
uint8_t volatile ucRec_Flag; //接收标志位
|
||||
uint8_t volatile ucRec_Cnt; //接收计数
|
||||
|
||||
uint8_t* pucSend_Buffer; //发送缓存指针
|
||||
uint8_t* pucRec_Buffer; //接收缓存指针
|
||||
|
||||
void (*UART_Init)(void); //串口初始化
|
||||
void (*UART_SendData)(uint8_t); //串口发送字符
|
||||
void (*UART_SendArray)(uint8_t*,uint16_t); //串口发送数组
|
||||
void (*UART_SendString)(uint8_t*); //串口发送字符串
|
||||
void (*Protocol_Analy)(void); //接口协议
|
||||
|
||||
} UART_t;
|
||||
|
||||
/* extern variables-----------------------------------------------------------*/
|
||||
|
||||
extern UART_t idata UART1;
|
||||
|
||||
/* extern function prototypes-------------------------------------------------*/
|
||||
|
||||
#endif
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
195
app/UART1.c
Normal file
195
app/UART1.c
Normal file
@ -0,0 +1,195 @@
|
||||
/*
|
||||
* UART1.c
|
||||
*
|
||||
* Created on: 2022年03月12日
|
||||
* Author: User
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <Main.h>
|
||||
//#include <Timer0.h>
|
||||
/* Private define-------------------------------------------------------------*/
|
||||
|
||||
#define UART1_Send_LENGTH 10
|
||||
#define UART1_Rec_LENGTH 10
|
||||
|
||||
/* Private variables----------------------------------------------------------*/
|
||||
|
||||
static uint8_t xdata ucSend_Buffer[UART1_Send_LENGTH] = {0x00};
|
||||
static uint8_t xdata ucRec_Buffer[UART1_Rec_LENGTH] = {0x00};
|
||||
|
||||
/* Private function prototypes------------------------------------------------*/
|
||||
static void Init(void); //串口初始化
|
||||
static void SendData(uint8_t); //串口发送字符
|
||||
static void SendArray(uint8_t *, uint16_t); //串口发送数组
|
||||
static void SendString(uint8_t *); //串口发送字符串
|
||||
static void Protocol_Analy(void); //串口协议
|
||||
|
||||
/* Public variables-----------------------------------------------------------*/
|
||||
UART_t idata UART1 =
|
||||
{
|
||||
FALSE,
|
||||
FALSE,
|
||||
0,
|
||||
ucSend_Buffer,
|
||||
ucRec_Buffer,
|
||||
Init,
|
||||
SendData,
|
||||
SendArray,
|
||||
SendString,
|
||||
Protocol_Analy};
|
||||
|
||||
/*
|
||||
* @name Init
|
||||
* @brief 串口1初始化
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void Init() // 9600bps@16MHz
|
||||
{
|
||||
// P2M0 = P2M0 & 0xF0 | 0x20; // P20设置为上拉输入
|
||||
// P0M2 = P0M2 & 0x0F | 0x80; // P05设置为推挽输出
|
||||
TXD_MAP = 0x05; // TXD映射P05
|
||||
RXD_MAP = 0x20; // RXD映射P20
|
||||
BRTSEL = 0X00; // UART1的波特率:00 T4
|
||||
T4CON = 0x06; // T4工作模式:UART1波特率发生器
|
||||
|
||||
//波特率计算
|
||||
//波特率 = 1/16 * (T4时钟源频率 / 定时器4预分频比) / (65536 - 0xFF98)
|
||||
// = 1/16 * ((16000000 / 1) / 104)
|
||||
// = 9615.38(误差0.16%)
|
||||
|
||||
//波特率9600
|
||||
//反推初值 = (65536 - ((T4时钟源频率 / 定时器4预分频比) * (1 / 16)) / 波特率)
|
||||
// = (65536 - (16000000 * (1 / 16) / 9600))
|
||||
// = (65536 - 104.167)
|
||||
// = FF98
|
||||
|
||||
TH4 = 0xFF;
|
||||
TL4 = 0x98; //波特率9600
|
||||
SCON2 = 0x02; // 8位UART,波特率可变
|
||||
SCON = 0x10; //允许串行接收
|
||||
IE |= 0X10; //使能串口中断
|
||||
EA = 1; //使能总中断
|
||||
}
|
||||
|
||||
/*
|
||||
* @name SendData
|
||||
* @brief 发送字符
|
||||
* @param dat:待发送字符
|
||||
* @retval None
|
||||
*/
|
||||
static void SendData(uint8_t dat)
|
||||
{
|
||||
while (UART1.ucTX_Busy_Flag)
|
||||
; //等待前面的数据发送完
|
||||
UART1.ucTX_Busy_Flag = TRUE; //置位忙碌标志
|
||||
SBUF = dat; //写数据至UART寄存器
|
||||
}
|
||||
|
||||
/*
|
||||
* @name SendArray
|
||||
* @brief 串口发送数组
|
||||
* @param p_Arr:数组首地址,LEN:发送长度
|
||||
* @retval None
|
||||
*/
|
||||
static void SendArray(uint8_t *p_Arr, uint16_t LEN)
|
||||
{
|
||||
uint16_t i = 0;
|
||||
|
||||
for (i = 0; i < LEN; i++)
|
||||
{
|
||||
UART1.UART_SendData(*(p_Arr + i));
|
||||
}
|
||||
while (UART1.ucTX_Busy_Flag)
|
||||
; //等待数据发送完
|
||||
}
|
||||
|
||||
/*
|
||||
* @name SendString
|
||||
* @brief 发送字符串
|
||||
* @param p_Str:待发送字符串
|
||||
* @retval None
|
||||
// */
|
||||
static void SendString(uint8_t *p_Str)
|
||||
{
|
||||
while (*p_Str)
|
||||
{
|
||||
UART1.UART_SendData(*(p_Str++)); //发送当前字符
|
||||
}
|
||||
while (UART1.ucTX_Busy_Flag)
|
||||
; //等待数据发送完
|
||||
}
|
||||
|
||||
// putchar字符发送函数重定向
|
||||
// extern char putchar(char c)
|
||||
// {
|
||||
// UART1.UART_SendData((uint8_t)c);
|
||||
// return c;
|
||||
// }
|
||||
|
||||
/*
|
||||
* @name UART1_isr
|
||||
* @brief 串口1中断服务函数
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void UART1_isr() interrupt UART1_VECTOR
|
||||
{
|
||||
|
||||
if (RI)
|
||||
{
|
||||
RI = (bit)0; //清除接收中断标志
|
||||
|
||||
if (UART1.ucRec_Cnt < UART1_Rec_LENGTH)
|
||||
{
|
||||
ucRec_Buffer[UART1.ucRec_Cnt++] = SBUF;
|
||||
}
|
||||
|
||||
UART1.ucRec_Flag = TRUE;
|
||||
}
|
||||
|
||||
if (TI)
|
||||
{
|
||||
TI = (bit)0; //清除发送中断标志
|
||||
UART1.ucTX_Busy_Flag = FALSE; //清忙碌标志
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @name Protocol_Analy
|
||||
* @brief 串口协议
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
|
||||
static void Protocol_Analy(void)
|
||||
{
|
||||
if (UART1.ucRec_Flag == TRUE)
|
||||
{
|
||||
//过滤无用的数据
|
||||
if (ucRec_Buffer[0] != 0)
|
||||
{
|
||||
|
||||
Timer0.msDelay_Timer = 0;
|
||||
while (UART1.ucRec_Cnt < Protocol_Len)
|
||||
{
|
||||
|
||||
if (Timer0.msDelay_Timer >= TIMER0_100mS) // 100ms没有接收完 跳出循环
|
||||
break;
|
||||
}
|
||||
|
||||
// 协议解析
|
||||
Protocol.Analysis(&UART1); //串口协议处理
|
||||
}
|
||||
|
||||
//清除缓存
|
||||
Public.Memory_Clr(ucRec_Buffer, (uint16_t)UART1.ucRec_Cnt);
|
||||
//重新接收
|
||||
UART1.ucRec_Cnt = 0; //接收计数清零
|
||||
UART1.ucRec_Flag = FALSE; //接收标志位取消
|
||||
}
|
||||
}
|
||||
/********************************************************
|
||||
End Of File
|
||||
********************************************************/
|
Loading…
x
Reference in New Issue
Block a user