加一段输出占空比10%#include "config.h" #include "timer.h" #include "GPIO.h" #include "delay.h" #define Fre(X) (65536-((float)(22118400/12/100000.0)*X)) sbit F=P5^4; u16 Data_A=100; u16 Data_B; u16 Data_C; u16 Data_D; u16 Data_E; u16 Data_F; void GPIO_config(void) { GPIO_InitTypeDef GPIO_InitStructure; //结构定义 GPIO_InitStructure.Pin = GPIO_Pin_4; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作 GPIO_InitStructure.Mode = GPIO_OUT_PP; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP GPIO_Inilize(GPIO_P5,&GPIO_InitStructure); //初始化 } /************************ 定时器配置 ****************************/ void Timer0_config(void) { TIM_InitTypeDef TIM_InitStructure; //结构定义 TIM_InitStructure.TIM_Mode = TIM_16Bit; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask TIM_InitStructure.TIM_Priority = Priority_0; //指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3 TIM_InitStructure.TIM_Interrupt = ENABLE; //中断是否允许, ENABLE或DISABLE TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext TIM_InitStructure.TIM_ClkOut = DISABLE; //是否输出高速脉冲, ENABLE或DISABLE TIM_InitStructure.TIM_Value = Fre(100); //初值, TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE Timer_Inilize(Timer0,&TIM_InitStructure); //初始化Timer0 Timer0,Timer1,Timer2,Timer3,Timer4 } /******************** 主函数**************************/ void main(void) { GPIO_config(); Timer0_config(); EA = 1; while (1) { delay_ms(10); Data_A++; if(Data_A<=100) Data_A=100; if(Data_A>=1000) Data_A=100; Data_B=100000/Data_A;//频率 Data_C=Data_B/20; //高电平 Data_D=Data_B-Data_C;//低电平 Data_E=(u16)Fre(Data_D); } } /********************* Timer0中断函数************************/ void timer0_int (void) interrupt TIMER0_VECTOR { F = ~F; Data_F=Data_E; TH0=Data_F>>8; TL0=Data_F; }
时间: 2023-07-23 08:03:40 浏览: 95
24V直流电机H桥驱动电路及单片机C程序.pdf
根据你提供的代码,我注意到一个问题。在主函数的`while`循环中,你使用了`delay_ms(10)`延时函数。但是在代码中并没有包含相关的头文件和实现。你需要确保已经包含了正确的头文件,并且延时函数的实现也正确。
另外,如果你想要观察占空比为10%的输出,可以在定时器中断函数的末尾添加一个输出语句,以便在每次触发中断时打印一些信息,以验证占空比是否正确。
例如,你可以在`timer0_int`函数的末尾添加以下代码:
```c
printf("Output: %d%%\n", (Data_C * 100) / Data_B);
```
这样每次定时器中断触发时,都会打印输出占空比的信息。
请注意,在嵌入式系统中,可能没有标准库函数提供直接的打印功能。你需要根据你所使用的开发环境和硬件平台,适配相应的输出函数。
希望这些信息对你有帮助!如果还有其他问题,请继续提问。
阅读全文