Timer.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. #include "Timer.h"
  2. #include "gd32f30x_libopt.h"
  3. #include "main.h"
  4. #include "ReadEeprom.h"
  5. #include "Key.h"
  6. #include "Relay.h"
  7. /*********************************************************************************************************
  8. * 宏定义
  9. *********************************************************************************************************/
  10. /*********************************************************************************************************
  11. * 枚举结构体
  12. *********************************************************************************************************/
  13. /*********************************************************************************************************
  14. * 内部变量定义
  15. *********************************************************************************************************/
  16. static unsigned char s_i100msFlag = 0; //将100ms标志位的值设置为0
  17. static unsigned char s_i2msFlag = 0; //将2ms标志位的值设置为0
  18. static unsigned char s_i1secFlag = 0; //将1s标志位的值设置为0
  19. volatile unsigned long int g_del_ms =0;
  20. unsigned long int Delay_Ms_2=0;
  21. unsigned int All_On_Flag;
  22. unsigned int All_Off_Flag;
  23. extern uint16_t detection_value;
  24. extern uint32_t write_2_minute_flag;
  25. uint16_t detection_count_1 = 0;
  26. uint16_t detection_count_2 = 0;
  27. #if SUPPORT_DETECTION
  28. extern uint8_t key_detection_1;
  29. extern uint8_t key_detection_2;
  30. #endif
  31. /*********************************************************************************************************
  32. * 内部函数声明
  33. *********************************************************************************************************/
  34. //static void ConfigTimer2(unsigned short arr, unsigned short psc); //配置TIMER2
  35. static void ConfigTimer2(unsigned short arr, unsigned short psc); //配置TIMER14
  36. static void ConfigTimer3(unsigned short arr, unsigned short psc); //配置TIMER15
  37. static void ConfigTimer4(unsigned short arr, unsigned short psc); //配置TIMER16
  38. static void ConfigTimer2(unsigned short arr, unsigned short psc)
  39. {
  40. timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
  41. //使能RCU相关时钟
  42. rcu_periph_clock_enable(RCU_TIMER2); //使能TIMER14的时钟
  43. timer_deinit(TIMER2); //设置TIMER14参数恢复默认值
  44. timer_struct_para_init(&timer_initpara); //初始化timer_initpara
  45. //配置TIMER14
  46. timer_initpara.prescaler = psc; //设置预分频器值
  47. timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
  48. timer_initpara.period = arr; //设置自动重装载值
  49. timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
  50. timer_init(TIMER2, &timer_initpara); //根据参数初始化定时器
  51. timer_interrupt_enable(TIMER2, TIMER_INT_UP); //使能定时器的更新中断
  52. nvic_irq_enable(TIMER2_IRQn,0,3); //配置NVIC设置优先级
  53. timer_enable(TIMER2); //使能定时器
  54. }
  55. /*********************************************************************************************************
  56. * 函数名称:ConfigTimer15
  57. * 函数功能:配置TIMER15
  58. * 输入参数:arr-自动重装值,psc-预分频器值
  59. * 输出参数:void
  60. * 返 回 值:void
  61. * 创建日期:2021年07月01日
  62. * 注 意:APB2时钟为72MHz,TIMER14和TIMER15和TIMER16时钟选择为APB2的1分频,因此,TIMER14和TIMER15和TIMER16时钟为72MHz
  63. *********************************************************************************************************/
  64. static void ConfigTimer3(unsigned short arr, unsigned short psc)
  65. {
  66. timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
  67. //使能RCU相关时钟
  68. rcu_periph_clock_enable(RCU_TIMER3); //使能TIMER15的时钟
  69. timer_deinit(TIMER3); //设置TIMER15参数恢复默认值
  70. timer_struct_para_init(&timer_initpara); //初始化timer_initpara
  71. //配置TIMER15
  72. timer_initpara.prescaler = psc; //设置预分频器值
  73. timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
  74. timer_initpara.period = arr; //设置自动重装载值
  75. timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
  76. timer_init(TIMER3, &timer_initpara); //根据参数初始化定时器
  77. timer_interrupt_enable(TIMER3, TIMER_INT_UP); //使能定时器的更新中断
  78. nvic_irq_enable(TIMER3_IRQn,0, 4); //配置NVIC设置优先级
  79. timer_enable(TIMER3); //使能定时器
  80. }
  81. void TIMER2_IRQHandler(void)
  82. {
  83. static unsigned short s_iCnt2 = 0; //定义一个静态变量s_iCnt2作为2ms计数器
  84. if(timer_interrupt_flag_get(TIMER2, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
  85. {
  86. timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
  87. }
  88. s_iCnt2++; //2ms计数器的计数值加1
  89. if(s_iCnt2 >= 1) //2ms计数器的计数值大于或等于
  90. {
  91. s_iCnt2 = 0; //重置2ms计数器的计数值为0
  92. Delay_Ms_2 = Delay_Ms_2 +1;
  93. s_i2msFlag = 1;
  94. if(All_Off_Flag)
  95. {
  96. #if SUPPORT_DETECTION
  97. if(detection_value == 0) // no elect
  98. {
  99. timer_disable(TIMER2); //关闭定时器
  100. Delay_Ms_2 = 0;
  101. All_On_Flag = 0;
  102. All_Off_Flag = 0;
  103. return;
  104. }
  105. #endif
  106. #if (RelaySlaveChaNum >= 1)
  107. 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))//确保这里的和读取电能参数的顺序是一致的
  108. {
  109. Relay1State();
  110. }
  111. #endif
  112. #if (RelaySlaveChaNum >= 2)
  113. 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))//确保这里的和读取电能参数的顺序是一致的
  114. {
  115. Relay2State();
  116. }
  117. #endif
  118. #if (RelaySlaveChaNum >= 3)
  119. 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))//确保这里的和读取电能参数的顺序是一致的
  120. {
  121. Relay3State();
  122. }
  123. #endif
  124. #if (RelaySlaveChaNum >= 4)
  125. 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))//确保这里的和读取电能参数的顺序是一致的
  126. {
  127. Relay4State();
  128. }
  129. #endif
  130. #if (RelaySlaveChaNum >= 5)
  131. 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))//确保这里的和读取电能参数的顺序是一致的
  132. {
  133. Relay5State();
  134. }
  135. #endif
  136. #if (RelaySlaveChaNum >= 6)
  137. 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))//确保这里的和读取电能参数的顺序是一致的
  138. {
  139. Relay6State();
  140. }
  141. #endif
  142. #if (RelaySlaveChaNum >= 7)
  143. 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))//确保这里的和读取电能参数的顺序是一致的
  144. {
  145. Relay7State();
  146. }
  147. #endif
  148. #if (RelaySlaveChaNum >= 8)
  149. 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))//确保这里的和读取电能参数的顺序是一致的
  150. {
  151. Relay8State();
  152. }
  153. #endif
  154. if((Sort_Offbuf[RelaySlaveChaNum-1]==Delay_Ms_2)||(Sort_Offbuf[RelaySlaveChaNum-1]==0xffff)||(Sort_Offbuf[RelaySlaveChaNum-1]==0)) //当达到最大延时时间后退出当前循环
  155. {
  156. timer_disable(TIMER2); //关闭定时器
  157. Delay_Ms_2 = 0;
  158. All_Off_Flag = 0;
  159. }
  160. }else if(All_On_Flag)
  161. {
  162. #if SUPPORT_DETECTION
  163. if(detection_value == 0) // no elect
  164. {
  165. timer_disable(TIMER2); //关闭定时器
  166. Delay_Ms_2 = 0;
  167. All_On_Flag = 0;
  168. All_Off_Flag = 0;
  169. return;
  170. }
  171. #if SUPPORT_2_DETECTION
  172. if((detection_value & 0x1) == 0)
  173. {
  174. uint8_t k = 0;
  175. for(k=0;k <(RelaySlaveChaNum)/2;k++)
  176. EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State = false;
  177. }
  178. if((detection_value & 0x2) == 0)
  179. {
  180. uint8_t k = 0;
  181. for(k=(RelaySlaveChaNum)/2;k <RelaySlaveChaNum;k++)
  182. EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State = false;
  183. }
  184. #endif
  185. #endif
  186. #if (RelaySlaveChaNum >= 1)
  187. 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))//确保这里的和读取电能参数的顺序是一致的
  188. {
  189. Relay1State();
  190. }
  191. #endif
  192. #if (RelaySlaveChaNum >= 2)
  193. 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))//确保这里的和读取电能参数的顺序是一致的
  194. {
  195. Relay2State();
  196. }
  197. #endif
  198. #if (RelaySlaveChaNum >= 3)
  199. 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))//确保这里的和读取电能参数的顺序是一致的
  200. {
  201. Relay3State();
  202. }
  203. #endif
  204. #if (RelaySlaveChaNum >= 4)
  205. 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))//确保这里的和读取电能参数的顺序是一致的
  206. {
  207. Relay4State();
  208. }
  209. #endif
  210. #if (RelaySlaveChaNum >= 5)
  211. 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))//确保这里的和读取电能参数的顺序是一致的
  212. {
  213. Relay5State();
  214. }
  215. #endif
  216. #if (RelaySlaveChaNum >= 6)
  217. 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))//确保这里的和读取电能参数的顺序是一致的
  218. {
  219. Relay6State();
  220. }
  221. #endif
  222. #if (RelaySlaveChaNum >= 7)
  223. 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))//确保这里的和读取电能参数的顺序是一致的
  224. {
  225. Relay7State();
  226. }
  227. #endif
  228. #if (RelaySlaveChaNum >= 8)
  229. 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))//确保这里的和读取电能参数的顺序是一致的
  230. {
  231. Relay8State();
  232. }
  233. #endif
  234. if((Sort_Onbuf[RelaySlaveChaNum-1]==Delay_Ms_2)||(Sort_Onbuf[RelaySlaveChaNum-1]==0xffff)||(Sort_Offbuf[RelaySlaveChaNum-1]==0)) //当达到最大延时时间后退出当前循环
  235. {
  236. timer_disable(TIMER2); //关闭定时器
  237. Delay_Ms_2 = 0;
  238. All_On_Flag = 0;
  239. }
  240. }else {
  241. }
  242. s_i2msFlag = 1; //将2ms标志位的值设置为1
  243. }
  244. }
  245. /*********************************************************************************************************
  246. * 函数名称:TIMER15_IRQHandler
  247. * 函数功能:TIMER15中断服务函数
  248. * 输入参数:void
  249. * 输出参数:void
  250. * 返 回 值:void
  251. * 创建日期:2021年07月01日
  252. * 注 意:每毫秒进入一次中断服务函数
  253. *********************************************************************************************************/
  254. #if SUPPORT_2_DETECTION
  255. extern uint8_t input_1_en;
  256. extern uint8_t input_2_en;
  257. extern uint32_t input_1_ms_count;
  258. extern uint32_t input_2_ms_count;
  259. static void detection_remember()
  260. {
  261. if(input_1_en == 1)
  262. {
  263. input_1_ms_count++;
  264. for(int i = 0;i < (RelaySlaveChaNum/2);i++)
  265. {
  266. if((EE_ACDC_Delay_ReadReg_On[i].ACDC_Delay==input_1_ms_count)||(EE_ACDC_Delay_ReadReg_On[i].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[i].ACDC_Delay==0))
  267. {
  268. //BUFF;
  269. RelayState_ch(i);
  270. //LOCK;
  271. break;
  272. }
  273. }
  274. if((Sort_Onbuf[(RelaySlaveChaNum / 2)-1]==input_1_ms_count)||(Sort_Onbuf[(RelaySlaveChaNum / 2)-1]==0xffff)||(Sort_Onbuf[(RelaySlaveChaNum / 2)-1]==0)) //当达到最大延时时间后退出当前循环
  275. {
  276. input_1_en = 0;
  277. input_1_ms_count = 0;
  278. }
  279. }
  280. if(input_2_en == 1)
  281. {
  282. input_2_ms_count++;
  283. for(int i = RelaySlaveChaNum / 2;i < RelaySlaveChaNum;i++)
  284. {
  285. if((EE_ACDC_Delay_ReadReg_On[i].ACDC_Delay==input_2_ms_count)||(EE_ACDC_Delay_ReadReg_On[i].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[i].ACDC_Delay==0))
  286. {
  287. RelayState_ch(i);
  288. break;
  289. }
  290. }
  291. if((Sort_Onbuf[RelaySlaveChaNum -1]==input_2_ms_count)||(Sort_Onbuf[RelaySlaveChaNum-1]==0xffff)||(Sort_Onbuf[RelaySlaveChaNum-1]==0)) //当达到最大延时时间后退出当前循环
  292. {
  293. input_2_en = 0;
  294. input_2_ms_count = 0;
  295. }
  296. }
  297. }
  298. #endif
  299. extern uint8_t relay_delay_flag[RelaySlaveChaNum];
  300. extern uint8_t relay_delay_counter[RelaySlaveChaNum];
  301. uint8_t relay_close_cnt[RelaySlaveChaNum]={0};
  302. uint8_t _count = 0;
  303. void TIMER3_IRQHandler(void)
  304. {
  305. static unsigned short s_iCnt100 = 0; //定义一个静态变量s_iCnt100作为100ms计数器
  306. static unsigned short s_iCnt1000 = 0;
  307. if(timer_interrupt_flag_get(TIMER3, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
  308. {
  309. timer_interrupt_flag_clear(TIMER3, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
  310. }
  311. s_iCnt100++; //100ms计数器的计数值加1
  312. #if SUPPORT_DETECTION
  313. detection_count_1++;
  314. detection_count_2++;
  315. if(detection_count_1 >= 1000)
  316. {
  317. key_detection_1 = 0;
  318. detection_count_1 = 0;
  319. }
  320. if(detection_count_2 >= 1000)
  321. {
  322. key_detection_2 = 0;
  323. detection_count_2 = 0;
  324. }
  325. #endif
  326. s_iCnt1000++;
  327. if(s_iCnt1000 >= 1000)
  328. {
  329. s_iCnt1000 = 0;
  330. s_i1secFlag = 1;
  331. _count++;
  332. if(_count >= 120)
  333. {
  334. write_2_minute_flag = 1;
  335. _count = 0;
  336. }
  337. }
  338. if(s_iCnt100 >= 100) //100ms计数器的计数值大于或等于
  339. {
  340. s_iCnt100 = 0; //重置100ms计数器的计数值为0
  341. s_i100msFlag = 1; //将100ms标志位的值设置为1
  342. }
  343. for(int i = 0 ;i < RelaySlaveChaNum;i++)
  344. {
  345. if(relay_delay_flag[i])
  346. {
  347. relay_close_cnt[i]++;
  348. if(relay_close_cnt[i] >= relay_delay_counter[i])
  349. {
  350. relay_delay_flag[i] = 0;
  351. relay_close_cnt[i] = 0;
  352. magnetic_hold_ctrl(i,RELAY_CLEAR);
  353. }
  354. }
  355. }
  356. #if (SUPPORT_2_DETECTION)
  357. detection_remember();
  358. #endif
  359. }
  360. /*********************************************************************************************************
  361. * 函数名称:TIMER16_IRQHandler
  362. * 函数功能:TIMER16中断服务函数
  363. * 输入参数:void
  364. * 输出参数:void
  365. * 返 回 值:void
  366. * 创建日期:2021年07月01日
  367. * 注 意:每毫秒进入一次中断服务函数
  368. *********************************************************************************************************/
  369. /*********************************************************************************************************
  370. * API函数实现
  371. *********************************************************************************************************/
  372. /*********************************************************************************************************
  373. * 函数名称:InitTimer
  374. * 函数功能:初始化Timer模块
  375. * 输入参数:void
  376. * 输出参数:void
  377. * 返 回 值:void
  378. * 创建日期:2021年07月01日
  379. * 注 意:使用的TIMER15-16由APB2(72MHz)预分频后输出。如果预分频为1,则由APB1*1输出,否则由APB1*2(72MHz)输出
  380. *********************************************************************************************************/
  381. void InitTimer(void)
  382. {
  383. ConfigTimer2(999, 71); //72MHz/(71+1)=1MHz,由0计数到999为1ms
  384. ConfigTimer3(999, 71); //72MHz/(71+1)=1MHz,由0计数到999为1ms
  385. }
  386. /*********************************************************************************************************
  387. * 函数名称:Get20msFlag
  388. * 函数功能:获取2ms标志位的值
  389. * 输入参数:void
  390. * 输出参数:void
  391. * 返 回 值:s_i2msFlag-2ms标志位的值
  392. * 创建日期:2021年07月01日
  393. * 注 意:
  394. *********************************************************************************************************/
  395. unsigned char Get2msFlag(void)
  396. {
  397. return(s_i2msFlag); //返回2ms标志位的值
  398. }
  399. /*********************************************************************************************************
  400. * 函数名称:Clr20msFlag
  401. * 函数功能:清除2ms标志位
  402. * 输入参数:void
  403. * 输出参数:void
  404. * 返 回 值:void
  405. * 创建日期:2021年07月01日
  406. * 注 意:
  407. *********************************************************************************************************/
  408. void Clr2msFlag(void)
  409. {
  410. s_i2msFlag = 0; //将2ms标志位的值设置为0
  411. }
  412. /*********************************************************************************************************
  413. * 函数名称:Get100msFlag
  414. * 函数功能:获取100ms标志位的值
  415. * 输入参数:void
  416. * 输出参数:void
  417. * 返 回 值:s_i2msFlag-100ms标志位的值
  418. * 创建日期:2021年07月01日
  419. * 注 意:
  420. *********************************************************************************************************/
  421. unsigned char Get100msFlag(void)
  422. {
  423. return(s_i100msFlag); //返回100ms标志位的值
  424. }
  425. /*********************************************************************************************************
  426. * 函数名称:Clr100msFlags
  427. * 函数功能:清除100ms标志位
  428. * 输入参数:void
  429. * 输出参数:void
  430. * 返 回 值:void
  431. * 创建日期:2021年07月01日
  432. * 注 意:
  433. *********************************************************************************************************/
  434. void Clr100msFlag(void)
  435. {
  436. s_i100msFlag = 0; //将100ms标志位的值设置为0
  437. }
  438. /*********************************************************************************************************
  439. * 函数名称:Get1SecFlag
  440. * 函数功能:获取1s标志位的值
  441. * 输入参数:void
  442. * 输出参数:void
  443. * 返 回 值:s_i1secFlag-1s标志位的值
  444. * 创建日期:2021年07月01日
  445. * 注 意:
  446. *********************************************************************************************************/
  447. unsigned char Get1SecFlag(void)
  448. {
  449. return(s_i1secFlag); //返回1s标志位的值
  450. }
  451. /*********************************************************************************************************
  452. * 函数名称:Clr1SecFlag
  453. * 函数功能:清除1s标志位
  454. * 输入参数:void
  455. * 输出参数:void
  456. * 返 回 值:void
  457. * 创建日期:2021年07月01日
  458. * 注 意:
  459. *********************************************************************************************************/
  460. void Clr1SecFlag(void)
  461. {
  462. s_i1secFlag = 0; //将1s标志位的值设置为0
  463. }