单片机源程序如下:
- /**
- ******************************************************************************
- * @file main.c
- * @author 程序小菜鸟
- * @version V1.0
- * @date 2018-09-xx
- * @brief WF-ESP8266 WiFi模块测试
- ******************************************************************************
- *
- * @HP
- * 实验平台: STM32 开发板
- * 公司 : QLKM
- *
- ******************************************************************************
- */
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "time.h"
- #include "led.h"
- /**
- * @brief 主函数
- * @param 无
- * @retval 无
- */
- u32 ARPTimer=0; //ARP查询计时器
- u32 localtime; //本地时间计数器,单位:ms 32位,这样计数可以计数49天(产品周期)
- u16 localtime1; //本地时间计数器,单位:ms 16位,这样计数只可以计数65s,在变量超出取值范围前将变量重新赋初值,就可以连续计数
- u16 ARPTimer1=0; //ARP查询计时器
- #define INTERVALS 5000 //时间间隔
- #define INTERVALS1 5000 //时间间隔
- u32 i=0,j=0;
- int main(void)
- {
- /* 初始化 */
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- usart_init(115200);
- LED_Init();
- TIM3_Int_Init(1000-1,720-1);
- //ARP每5s周期性调用一次
- while(1)
- {
- if (localtime>=4294965000)//不加这一句,当localtime>2^32-1=4294967296时,函数调用就会失效
- {
- localtime=0;
- ARPTimer=0;
- }
- if ((localtime - ARPTimer) >= INTERVALS)
- {
- j++;
- LED0 =!LED0;
- i=(localtime - ARPTimer)/1000;
- u1_printf("ARPTimer:%d\r\n",ARPTimer);
- ARPTimer = localtime;
- u1_printf("localtime:%d\r\n",localtime);
- u1_printf("time:%ds\r\n",i*j);
- }
- if (localtime1>=65000)//不加这一句,当localtime1>2^16-1=65535时,函数调用就会失效
- {
- localtime1=0;
- ARPTimer1=0;
- }
- if ((localtime1 - ARPTimer1) >= INTERVALS1)
- {
- LED1 =!LED1;
- i=(localtime1 - ARPTimer1)/1000;
- u1_printf("u16 ARPTimer1:%d\r\n",ARPTimer1);
- ARPTimer1 = localtime1;
- u1_printf("u16 localtime1:%d\r\n",localtime1);
- u1_printf("i:%ds\r\n",i);
- }
- }
- }
复制代码
所有资料51hei提供下载:
定时发送.7z
(247.83 KB, 下载次数: 66)
|