Timer.c 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894
  1. /*********************************************************************************************************
  2. * 模块名称:Timer.c
  3. * 摘 要:Timer模块
  4. * 当前版本:1.0.0
  5. * 作 者:Leyutek(COPYRIGHT 2018 - 2021 Leyutek. All rights reserved.)
  6. * 完成日期:2021年07月01日
  7. * 内 容:
  8. * 注 意:
  9. **********************************************************************************************************
  10. * 取代版本:
  11. * 作 者:
  12. * 完成日期:
  13. * 修改内容:
  14. * 修改文件:
  15. *********************************************************************************************************/
  16. /*********************************************************************************************************
  17. * 包含头文件
  18. *********************************************************************************************************/
  19. #include "Timer.h"
  20. #include "gd32e230x_conf.h"
  21. #include "Main.h"
  22. #include "ReadEeprom.h"
  23. #include "Sn74lvc573.h"
  24. /*********************************************************************************************************
  25. * 宏定义
  26. *********************************************************************************************************/
  27. /*********************************************************************************************************
  28. * 枚举结构体
  29. *********************************************************************************************************/
  30. /*********************************************************************************************************
  31. * 内部变量定义
  32. *********************************************************************************************************/
  33. static unsigned char s_i100msFlag = 0; //将100ms标志位的值设置为0
  34. static unsigned char s_i2msFlag = 0; //将2ms标志位的值设置为0
  35. static unsigned char s_i1secFlag = 0; //将1s标志位的值设置为0
  36. volatile unsigned long int g_del_ms =0;
  37. unsigned long int Delay_Ms_2=0;
  38. unsigned int All_On_Flag;
  39. unsigned int All_Off_Flag;
  40. /*********************************************************************************************************
  41. * 内部函数声明
  42. *********************************************************************************************************/
  43. //static void ConfigTimer2(unsigned short arr, unsigned short psc); //配置TIMER2
  44. static void ConfigTimer14(unsigned short arr, unsigned short psc); //配置TIMER14
  45. static void ConfigTimer15(unsigned short arr, unsigned short psc); //配置TIMER15
  46. static void ConfigTimer16(unsigned short arr, unsigned short psc); //配置TIMER16
  47. /*********************************************************************************************************
  48. * 内部函数实现
  49. *********************************************************************************************************/
  50. ///*********************************************************************************************************
  51. //* 函数名称:ConfigTimer2
  52. //* 函数功能:配置TIMER2
  53. //* 输入参数:arr-自动重装值,psc-预分频器值
  54. //* 输出参数:void
  55. //* 返 回 值:void
  56. //* 创建日期:2021年07月01日
  57. //* 注 意:APB1时钟为72MHz,TIMER2时钟选择为APB2的1分频,因此,TIMER2时钟为72MHz
  58. //*********************************************************************************************************/
  59. //static void ConfigTimer2(unsigned short arr, unsigned short psc)
  60. //{
  61. // timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
  62. // //使能RCU相关时钟
  63. // rcu_periph_clock_enable(RCU_TIMER2); //使能TIMER2的时钟
  64. // timer_deinit(TIMER2); //设置TIMER2参数恢复默认值
  65. // timer_struct_para_init(&timer_initpara); //初始化timer_initpara
  66. // //配置TIMER14
  67. // timer_initpara.prescaler = psc; //设置预分频器值
  68. // timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
  69. // timer_initpara.period = arr; //设置自动重装载值
  70. // timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
  71. // timer_init(TIMER2, &timer_initpara); //根据参数初始化定时器
  72. // timer_interrupt_enable(TIMER2, TIMER_INT_UP); //使能定时器的更新中断
  73. // nvic_irq_enable(TIMER2_IRQn, 3); //配置NVIC设置优先级
  74. // timer_enable(TIMER2); //使能定时器
  75. //}
  76. /*********************************************************************************************************
  77. * 函数名称:ConfigTimer14
  78. * 函数功能:配置TIMER14
  79. * 输入参数:arr-自动重装值,psc-预分频器值
  80. * 输出参数:void
  81. * 返 回 值:void
  82. * 创建日期:2021年07月01日
  83. * 注 意:APB2时钟为72MHz,TIMER14和TIMER15和TIMER16时钟选择为APB2的1分频,因此,TIMER14和TIMER15和TIMER16时钟为72MHz
  84. *********************************************************************************************************/
  85. static void ConfigTimer14(unsigned short arr, unsigned short psc)
  86. {
  87. timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
  88. //使能RCU相关时钟
  89. rcu_periph_clock_enable(RCU_TIMER14); //使能TIMER14的时钟
  90. timer_deinit(TIMER14); //设置TIMER14参数恢复默认值
  91. timer_struct_para_init(&timer_initpara); //初始化timer_initpara
  92. //配置TIMER14
  93. timer_initpara.prescaler = psc; //设置预分频器值
  94. timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
  95. timer_initpara.period = arr; //设置自动重装载值
  96. timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
  97. timer_init(TIMER14, &timer_initpara); //根据参数初始化定时器
  98. timer_interrupt_enable(TIMER14, TIMER_INT_UP); //使能定时器的更新中断
  99. nvic_irq_enable(TIMER14_IRQn, 2); //配置NVIC设置优先级
  100. timer_enable(TIMER14); //使能定时器
  101. }
  102. /*********************************************************************************************************
  103. * 函数名称:ConfigTimer15
  104. * 函数功能:配置TIMER15
  105. * 输入参数:arr-自动重装值,psc-预分频器值
  106. * 输出参数:void
  107. * 返 回 值:void
  108. * 创建日期:2021年07月01日
  109. * 注 意:APB2时钟为72MHz,TIMER14和TIMER15和TIMER16时钟选择为APB2的1分频,因此,TIMER14和TIMER15和TIMER16时钟为72MHz
  110. *********************************************************************************************************/
  111. static void ConfigTimer15(unsigned short arr, unsigned short psc)
  112. {
  113. timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
  114. //使能RCU相关时钟
  115. rcu_periph_clock_enable(RCU_TIMER15); //使能TIMER15的时钟
  116. timer_deinit(TIMER15); //设置TIMER15参数恢复默认值
  117. timer_struct_para_init(&timer_initpara); //初始化timer_initpara
  118. //配置TIMER15
  119. timer_initpara.prescaler = psc; //设置预分频器值
  120. timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
  121. timer_initpara.period = arr; //设置自动重装载值
  122. timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
  123. timer_init(TIMER15, &timer_initpara); //根据参数初始化定时器
  124. timer_interrupt_enable(TIMER15, TIMER_INT_UP); //使能定时器的更新中断
  125. nvic_irq_enable(TIMER15_IRQn, 3); //配置NVIC设置优先级
  126. timer_enable(TIMER15); //使能定时器
  127. }
  128. /*********************************************************************************************************
  129. * 函数名称:ConfigTimer16
  130. * 函数功能:配置TIMER16
  131. * 输入参数:arr-自动重装值,psc-预分频器值
  132. * 输出参数:void
  133. * 返 回 值:void
  134. * 创建日期:2021年07月01日
  135. * 注 意:APB2时钟为72MHz,TIMER15和TIMER16时钟选择为APB2的1分频,因此,TIMER15和TIMER16时钟为72MHz
  136. *********************************************************************************************************/
  137. static void ConfigTimer16(unsigned short arr,unsigned short psc)
  138. {
  139. timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
  140. //使能RCU相关时钟
  141. rcu_periph_clock_enable(RCU_TIMER16); //使能TIMER16的时钟
  142. timer_deinit(TIMER16); //设置TIMER16参数恢复默认值
  143. timer_struct_para_init(&timer_initpara); //初始化timer_initpara
  144. //配置TIMER16
  145. timer_initpara.prescaler = psc; //设置预分频器值
  146. timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
  147. timer_initpara.period = arr; //设置自动重装载值
  148. timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
  149. timer_init(TIMER16, &timer_initpara); //根据参数初始化定时器
  150. timer_interrupt_enable(TIMER16, TIMER_INT_UP); //使能定时器的更新中断
  151. nvic_irq_enable(TIMER16_IRQn, 3); //配置NVIC设置优先级
  152. timer_enable(TIMER16); //使能定时器
  153. }
  154. ///*********************************************************************************************************
  155. //* 函数名称:TIMER2_IRQHandler
  156. //* 函数功能:TIMER14中断服务函数
  157. //* 输入参数:void
  158. //* 输出参数:void
  159. //* 返 回 值:void
  160. //* 创建日期:2021年07月01日
  161. //* 注 意:每毫秒进入一次中断服务函数
  162. //*********************************************************************************************************/
  163. //void TIMER2_IRQHandler(void)
  164. //{
  165. // if(timer_interrupt_flag_get(TIMER2, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
  166. // {
  167. // timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
  168. // g_del_ms--;
  169. // }
  170. //}
  171. ///*********************************************************************************************************
  172. //* 函数名称:Delay_Ms_2
  173. //* 函数功能: 定义毫秒级别的延时函数
  174. //* 输入参数:n_del_ms延时毫秒数
  175. //* 输出参数:void
  176. //* 返 回 值:void
  177. //* 创建日期:2021年07月01日
  178. //* 注 意:
  179. //*********************************************************************************************************/
  180. //void delay_ms(unsigned long int n_del_ms)
  181. //{
  182. // g_del_ms = n_del_ms;
  183. // while(g_del_ms);
  184. //}
  185. /*********************************************************************************************************
  186. * 函数名称:TIMER14_IRQHandler
  187. * 函数功能:TIMER14中断服务函数
  188. * 输入参数:void
  189. * 输出参数:void
  190. * 返 回 值:void
  191. * 创建日期:2021年07月01日
  192. * 注 意:每毫秒进入一次中断服务函数
  193. *********************************************************************************************************/
  194. void TIMER14_IRQHandler(void)
  195. {
  196. static unsigned short s_iCnt2 = 0; //定义一个静态变量s_iCnt2作为2ms计数器
  197. if(timer_interrupt_flag_get(TIMER14, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
  198. {
  199. timer_interrupt_flag_clear(TIMER14, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
  200. }
  201. s_iCnt2++; //2ms计数器的计数值加1
  202. if(s_iCnt2 >= 1) //2ms计数器的计数值大于或等于
  203. {
  204. s_iCnt2 = 0; //重置2ms计数器的计数值为0
  205. Delay_Ms_2 = Delay_Ms_2 +1;
  206. if(All_Off_Flag) //
  207. {
  208. if(RelaySlaveChaNum==8)
  209. {
  210. if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  211. {
  212. BUFF;
  213. Relay1State();
  214. LOCK;
  215. }
  216. if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  217. {
  218. BUFF;
  219. Relay2State();
  220. LOCK;
  221. }
  222. if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  223. {
  224. BUFF;
  225. Relay3State();
  226. LOCK;
  227. }
  228. if((EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  229. {
  230. BUFF;
  231. Relay4State();
  232. LOCK;
  233. }
  234. if((EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  235. {
  236. BUFF;
  237. Relay5State();
  238. LOCK;
  239. }
  240. if((EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  241. {
  242. BUFF;
  243. Relay6State();
  244. LOCK;
  245. }
  246. if((EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  247. {
  248. BUFF;
  249. Relay7State();
  250. LOCK;
  251. }
  252. if((EE_ACDC_Delay_ReadReg_Off[7].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[7].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[7].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  253. {
  254. BUFF;
  255. Relay8State();
  256. LOCK;
  257. }
  258. }
  259. else if(RelaySlaveChaNum==7)
  260. {
  261. if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  262. {
  263. BUFF;
  264. Relay1State();
  265. LOCK;
  266. }
  267. if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  268. {
  269. BUFF;
  270. Relay2State();
  271. LOCK;
  272. }
  273. if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  274. {
  275. BUFF;
  276. Relay3State();
  277. LOCK;
  278. }
  279. if((EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  280. {
  281. BUFF;
  282. Relay4State();
  283. LOCK;
  284. }
  285. if((EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  286. {
  287. BUFF;
  288. Relay5State();
  289. LOCK;
  290. }
  291. if((EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  292. {
  293. BUFF;
  294. Relay6State();
  295. LOCK;
  296. }
  297. if((EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  298. {
  299. BUFF;
  300. Relay7State();
  301. LOCK;
  302. }
  303. }
  304. else if(RelaySlaveChaNum==6)
  305. {
  306. if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  307. {
  308. BUFF;
  309. Relay1State();
  310. LOCK;
  311. }
  312. if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  313. {
  314. BUFF;
  315. Relay2State();
  316. LOCK;
  317. }
  318. if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  319. {
  320. BUFF;
  321. Relay3State();
  322. LOCK;
  323. }
  324. if((EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  325. {
  326. BUFF;
  327. Relay4State();
  328. LOCK;
  329. }
  330. if((EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  331. {
  332. BUFF;
  333. Relay5State();
  334. LOCK;
  335. }
  336. if((EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  337. {
  338. BUFF;
  339. Relay6State();
  340. LOCK;
  341. }
  342. }
  343. else if(RelaySlaveChaNum==5)
  344. {
  345. if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  346. {
  347. BUFF;
  348. Relay1State();
  349. LOCK;
  350. }
  351. if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  352. {
  353. BUFF;
  354. Relay2State();
  355. LOCK;
  356. }
  357. if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  358. {
  359. BUFF;
  360. Relay3State();
  361. LOCK;
  362. }
  363. if((EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  364. {
  365. BUFF;
  366. Relay4State();
  367. LOCK;
  368. }
  369. if((EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  370. {
  371. BUFF;
  372. Relay5State();
  373. LOCK;
  374. }
  375. }
  376. else if(RelaySlaveChaNum==4)
  377. {
  378. if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  379. {
  380. BUFF;
  381. Relay1State();
  382. LOCK;
  383. }
  384. if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  385. {
  386. BUFF;
  387. Relay2State();
  388. LOCK;
  389. }
  390. if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  391. {
  392. BUFF;
  393. Relay3State();
  394. LOCK;
  395. }
  396. if((EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  397. {
  398. BUFF;
  399. Relay4State();
  400. LOCK;
  401. }
  402. }
  403. else if(RelaySlaveChaNum==3)
  404. {
  405. if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  406. {
  407. BUFF;
  408. Relay1State();
  409. LOCK;
  410. }
  411. if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  412. {
  413. BUFF;
  414. Relay2State();
  415. LOCK;
  416. }
  417. if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  418. {
  419. BUFF;
  420. Relay3State();
  421. LOCK;
  422. }
  423. }
  424. else if(RelaySlaveChaNum==2)
  425. {
  426. if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  427. {
  428. BUFF;
  429. Relay1State();
  430. LOCK;
  431. }
  432. if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  433. {
  434. BUFF;
  435. Relay2State();
  436. LOCK;
  437. }
  438. }
  439. else if(RelaySlaveChaNum==1)
  440. {
  441. if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  442. {
  443. BUFF;
  444. Relay1State();
  445. LOCK;
  446. }
  447. }
  448. if((Sort_Offbuf[RelaySlaveChaNum-1]==Delay_Ms_2)||(Sort_Offbuf[RelaySlaveChaNum-1]==0xffff)||(Sort_Offbuf[RelaySlaveChaNum-1]==0)) //当达到最大延时时间后退出当前循环
  449. {
  450. timer_disable(TIMER14); //关闭定时器
  451. Delay_Ms_2 = 0;
  452. All_Off_Flag = 0;
  453. }
  454. }
  455. else if(All_On_Flag)
  456. {
  457. if(RelaySlaveChaNum==8)
  458. {
  459. if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  460. {
  461. BUFF;
  462. Relay1State();
  463. LOCK;
  464. }
  465. if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  466. {
  467. BUFF;
  468. Relay2State();
  469. LOCK;
  470. }
  471. if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  472. {
  473. BUFF;
  474. Relay3State();
  475. LOCK;
  476. }
  477. if((EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  478. {
  479. BUFF;
  480. Relay4State();
  481. LOCK;
  482. }
  483. if((EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  484. {
  485. BUFF;
  486. Relay5State();
  487. LOCK;
  488. }
  489. if((EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  490. {
  491. BUFF;
  492. Relay6State();
  493. LOCK;
  494. }
  495. if((EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  496. {
  497. BUFF;
  498. Relay7State();
  499. LOCK;
  500. }
  501. if((EE_ACDC_Delay_ReadReg_On[7].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[7].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[7].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  502. {
  503. BUFF;
  504. Relay8State();
  505. LOCK;
  506. }
  507. }
  508. else if(RelaySlaveChaNum==7)
  509. {
  510. if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  511. {
  512. BUFF;
  513. Relay1State();
  514. LOCK;
  515. }
  516. if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  517. {
  518. BUFF;
  519. Relay2State();
  520. LOCK;
  521. }
  522. if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  523. {
  524. BUFF;
  525. Relay3State();
  526. LOCK;
  527. }
  528. if((EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  529. {
  530. BUFF;
  531. Relay4State();
  532. LOCK;
  533. }
  534. if((EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  535. {
  536. BUFF;
  537. Relay5State();
  538. LOCK;
  539. }
  540. if((EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  541. {
  542. BUFF;
  543. Relay6State();
  544. LOCK;
  545. }
  546. if((EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  547. {
  548. BUFF;
  549. Relay7State();
  550. LOCK;
  551. }
  552. }
  553. else if(RelaySlaveChaNum==6)
  554. {
  555. if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  556. {
  557. BUFF;
  558. Relay1State();
  559. LOCK;
  560. }
  561. if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  562. {
  563. BUFF;
  564. Relay2State();
  565. LOCK;
  566. }
  567. if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  568. {
  569. BUFF;
  570. Relay3State();
  571. LOCK;
  572. }
  573. if((EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  574. {
  575. BUFF;
  576. Relay4State();
  577. LOCK;
  578. }
  579. if((EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  580. {
  581. BUFF;
  582. Relay5State();
  583. LOCK;
  584. }
  585. if((EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  586. {
  587. BUFF;
  588. Relay6State();
  589. LOCK;
  590. }
  591. }
  592. else if(RelaySlaveChaNum==5)
  593. {
  594. if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  595. {
  596. BUFF;
  597. Relay1State();
  598. LOCK;
  599. }
  600. if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  601. {
  602. BUFF;
  603. Relay2State();
  604. LOCK;
  605. }
  606. if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  607. {
  608. BUFF;
  609. Relay3State();
  610. LOCK;
  611. }
  612. if((EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  613. {
  614. BUFF;
  615. Relay4State();
  616. LOCK;
  617. }
  618. if((EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  619. {
  620. BUFF;
  621. Relay5State();
  622. LOCK;
  623. }
  624. }
  625. else if(RelaySlaveChaNum==4)
  626. {
  627. if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  628. {
  629. BUFF;
  630. Relay1State();
  631. LOCK;
  632. }
  633. if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  634. {
  635. BUFF;
  636. Relay2State();
  637. LOCK;
  638. }
  639. if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  640. {
  641. BUFF;
  642. Relay3State();
  643. LOCK;
  644. }
  645. if((EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  646. {
  647. BUFF;
  648. Relay4State();
  649. LOCK;
  650. }
  651. }
  652. else if(RelaySlaveChaNum==3)
  653. {
  654. if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  655. {
  656. BUFF;
  657. Relay1State();
  658. LOCK;
  659. }
  660. if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  661. {
  662. BUFF;
  663. Relay2State();
  664. LOCK;
  665. }
  666. if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  667. {
  668. BUFF;
  669. Relay3State();
  670. LOCK;
  671. }
  672. }
  673. else if(RelaySlaveChaNum==2)
  674. {
  675. if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  676. {
  677. BUFF;
  678. Relay1State();
  679. LOCK;
  680. }
  681. if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  682. {
  683. BUFF;
  684. Relay2State();
  685. LOCK;
  686. }
  687. }
  688. else if(RelaySlaveChaNum==1)
  689. {
  690. if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
  691. {
  692. BUFF;
  693. Relay1State();
  694. LOCK;
  695. }
  696. }
  697. if((Sort_Onbuf[RelaySlaveChaNum-1]==Delay_Ms_2)||(Sort_Onbuf[RelaySlaveChaNum-1]==0xffff)||(Sort_Offbuf[RelaySlaveChaNum-1]==0)) //当达到最大延时时间后退出当前循环
  698. {
  699. timer_disable(TIMER14); //关闭定时器
  700. Delay_Ms_2 = 0;
  701. All_On_Flag = 0;
  702. }
  703. }
  704. s_i2msFlag = 1; //将2ms标志位的值设置为1
  705. }
  706. }
  707. /*********************************************************************************************************
  708. * 函数名称:TIMER15_IRQHandler
  709. * 函数功能:TIMER15中断服务函数
  710. * 输入参数:void
  711. * 输出参数:void
  712. * 返 回 值:void
  713. * 创建日期:2021年07月01日
  714. * 注 意:每毫秒进入一次中断服务函数
  715. *********************************************************************************************************/
  716. void TIMER15_IRQHandler(void)
  717. {
  718. static unsigned short s_iCnt100 = 0; //定义一个静态变量s_iCnt100作为100ms计数器
  719. if(timer_interrupt_flag_get(TIMER15, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
  720. {
  721. timer_interrupt_flag_clear(TIMER15, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
  722. }
  723. s_iCnt100++; //100ms计数器的计数值加1
  724. if(s_iCnt100 >= 100) //100ms计数器的计数值大于或等于
  725. {
  726. s_iCnt100 = 0; //重置100ms计数器的计数值为0
  727. s_i100msFlag = 1; //将100ms标志位的值设置为1
  728. }
  729. }
  730. /*********************************************************************************************************
  731. * 函数名称:TIMER16_IRQHandler
  732. * 函数功能:TIMER16中断服务函数
  733. * 输入参数:void
  734. * 输出参数:void
  735. * 返 回 值:void
  736. * 创建日期:2021年07月01日
  737. * 注 意:每毫秒进入一次中断服务函数
  738. *********************************************************************************************************/
  739. void TIMER16_IRQHandler(void)
  740. {
  741. static short s_iCnt1000 = 0; //定义一个静态变量s_iCnt1000作为1s计数器
  742. if (timer_interrupt_flag_get(TIMER16, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
  743. {
  744. timer_interrupt_flag_clear(TIMER16, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
  745. }
  746. s_iCnt1000++; //1000ms计数器的计数值加1
  747. if(s_iCnt1000 >= 1000) //1000ms计数器的计数值大于或等于1000
  748. {
  749. s_iCnt1000 = 0; //重置1000ms计数器的计数值为0
  750. s_i1secFlag = 1; //将1s标志位的值设置为1
  751. }
  752. }
  753. /*********************************************************************************************************
  754. * API函数实现
  755. *********************************************************************************************************/
  756. /*********************************************************************************************************
  757. * 函数名称:InitTimer
  758. * 函数功能:初始化Timer模块
  759. * 输入参数:void
  760. * 输出参数:void
  761. * 返 回 值:void
  762. * 创建日期:2021年07月01日
  763. * 注 意:使用的TIMER15-16由APB2(72MHz)预分频后输出。如果预分频为1,则由APB1*1输出,否则由APB1*2(72MHz)输出
  764. *********************************************************************************************************/
  765. void InitTimer(void)
  766. {
  767. // ConfigTimer2(999, 71); //72MHz/(71+1)=1MHz,由0计数到999为1ms
  768. ConfigTimer14(999, 71); //72MHz/(71+1)=1MHz,由0计数到999为1ms
  769. ConfigTimer15(999, 71); //72MHz/(71+1)=1MHz,由0计数到999为1ms
  770. ConfigTimer16(999, 71); //72MHz/(71+1)=1MHz,由0计数到999为1ms
  771. }
  772. /*********************************************************************************************************
  773. * 函数名称:Get20msFlag
  774. * 函数功能:获取2ms标志位的值
  775. * 输入参数:void
  776. * 输出参数:void
  777. * 返 回 值:s_i2msFlag-2ms标志位的值
  778. * 创建日期:2021年07月01日
  779. * 注 意:
  780. *********************************************************************************************************/
  781. unsigned char Get2msFlag(void)
  782. {
  783. return(s_i2msFlag); //返回2ms标志位的值
  784. }
  785. /*********************************************************************************************************
  786. * 函数名称:Clr20msFlag
  787. * 函数功能:清除2ms标志位
  788. * 输入参数:void
  789. * 输出参数:void
  790. * 返 回 值:void
  791. * 创建日期:2021年07月01日
  792. * 注 意:
  793. *********************************************************************************************************/
  794. void Clr2msFlag(void)
  795. {
  796. s_i2msFlag = 0; //将2ms标志位的值设置为0
  797. }
  798. /*********************************************************************************************************
  799. * 函数名称:Get100msFlag
  800. * 函数功能:获取100ms标志位的值
  801. * 输入参数:void
  802. * 输出参数:void
  803. * 返 回 值:s_i2msFlag-100ms标志位的值
  804. * 创建日期:2021年07月01日
  805. * 注 意:
  806. *********************************************************************************************************/
  807. unsigned char Get100msFlag(void)
  808. {
  809. return(s_i100msFlag); //返回100ms标志位的值
  810. }
  811. /*********************************************************************************************************
  812. * 函数名称:Clr100msFlags
  813. * 函数功能:清除100ms标志位
  814. * 输入参数:void
  815. * 输出参数:void
  816. * 返 回 值:void
  817. * 创建日期:2021年07月01日
  818. * 注 意:
  819. *********************************************************************************************************/
  820. void Clr100msFlag(void)
  821. {
  822. s_i100msFlag = 0; //将100ms标志位的值设置为0
  823. }
  824. /*********************************************************************************************************
  825. * 函数名称:Get1SecFlag
  826. * 函数功能:获取1s标志位的值
  827. * 输入参数:void
  828. * 输出参数:void
  829. * 返 回 值:s_i1secFlag-1s标志位的值
  830. * 创建日期:2021年07月01日
  831. * 注 意:
  832. *********************************************************************************************************/
  833. unsigned char Get1SecFlag(void)
  834. {
  835. return(s_i1secFlag); //返回1s标志位的值
  836. }
  837. /*********************************************************************************************************
  838. * 函数名称:Clr1SecFlag
  839. * 函数功能:清除1s标志位
  840. * 输入参数:void
  841. * 输出参数:void
  842. * 返 回 值:void
  843. * 创建日期:2021年07月01日
  844. * 注 意:
  845. *********************************************************************************************************/
  846. void Clr1SecFlag(void)
  847. {
  848. s_i1secFlag = 0; //将1s标志位的值设置为0
  849. }