144
1702
2655
金牌会员
#include <STC8H.H> sbit LED1=P3^3; sbit KEY1=P3^2; #define MAIN_Fosc 11059200UL //定义主频12MHz,请根据实际使用频率修改(用于delay函数自适应主频) #define ON 0 #define OFF 1 #define PWM_ARR 999 #define PWM_CCR 500 typedef unsigned char u8; //unsigned char 类型,用u8表示 typedef unsigned int u16; //unsigned int 类型,用u16表示 typedef unsigned long int u32; //unsigned long int 类型,用u32表示 void sysini(void); // STC32初始化设置 void Timer0_Init(void); // 定时器0初始化 void delayms(u16 ms); // ms*1毫秒延时函数 void PWMA_Init(void); //----------------------- void main(void) { P_SW2 = 0x80; sysini(); // STC8h初始化设置 Timer0_Init(); // 定时器0初始化 PWMA_Init(); EA = 1; // 使能EA总中断 // PWMA_PS = 0xc0; // PWMA_CCER2 = 0x00; //写CCMRx前必须先清零CCERx关闭通道 // PWMA_CCMR1 = 0x68; //设置CC1为PWMA输出模式 // PWMA_CCER2 = 0x40; //使能CC1通道 //// PWMA_CCR1 = 20; //设置占空比时间 // PWMA_CCR2 = 495; //设置占空比时间 // PWMA_ARR = 500; //设置周期时间 // PWMA_ENO = 0x80; //使能PWM1P端口输出 // PWMA_BKR = 0x80; //使能主输出 // PWMA_CR1 = 0x01; //开始计时 while (1); } void sysini() { P0M1 = 0xFF;P0M0 = 0x00;P1M1 = 0x00;P1M0 = 0x00;P2M1 = 0x00;P2M0 = 0x00; P4M1 = 0x00;P4M0 = 0x00;P5M1 = 0x00;P5M0 = 0x00;P6M1 = 0x00;P6M0 = 0x00; P7M1 = 0x00;P7M0 = 0x00; P3M1 = 0x00;P3M0 = 0x00; } //void Timer0_Isr(void) interrupt 1 //{ // //} void Timer0_Init(void) //1毫秒@12.000MHz { AUXR |= 0x80; //定时器时钟1T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0x20; //设置定时初始值 TH0 = 0xD1; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //使能定时器0中断 } //======================================================================== void delayms(u16 ms) //延时函数的自定义代码 { u16 i; do{ i = MAIN_Fosc /10000; while(--i); }while(--ms); } void PWMA_Init(void) { //1,时钟源选择 //2,时基单元选择 PWMA_PSCRH = 0; //1分频 0+1 1分频 PWMA_PSCRH = 0; PWMA_ARRH = (u8)(PWM_ARR>>8); PWMA_ARRL = (u8)(PWM_ARR); PWMA_CCR1H = (u8)(PWM_CCR>>8); PWMA_CCR1L = (u8)(PWM_CCR); //3,输入输出的引脚配置 PWMA_ENO = 0x00; //使能PWM4N通道输出 PWMA_ENO |= 0x80; PWMA_PS = 0x00; //选择PWM4N P33引脚输出 //PWMA_PS |= 0xc0; PWMA_PS |= 0xc0; //4,输入输出模式设置 PWMA_CCER2 =0x00; PWMA_CCMR1 =0x68; //pwm模式1 配置置位输出 PWMA_CCER2 =0x40; //开启输出比较通道 PWMA_BKR =0x80; //使能主输出 PWMA_CR1 |= 0x01; //启动计数器 } //void PWMA_Init(void) //{ // //1,时钟源选择 // //2,时基单元选择 // PWMA_PSCRH = 0; //1分频 0+1 1分频 // PWMA_PSCRH = 0; // PWMA_ARRH = (u8)(PWM_ARR>>8); // PWMA_ARRL = (u8)(PWM_ARR); // // PWMA_CCR1H = (u8)(PWM_CCR>>8); // PWMA_CCR1L = (u8)(PWM_CCR); // //3,输入输出的引脚配置 //PWMA_ENO = 0x00; //使能PWM4N通道输出 //PWMA_ENO |= 0x01; // //PWMA_PS = 0x00; //选择PWM4N P33引脚输出 ////PWMA_PS |= 0xc0; //PWMA_PS |= (2<<0); // // //4,输入输出模式设置 // PWMA_CCER1 =0x00; // PWMA_CCMR1 =0x68; //pwm模式1 配置置位输出 // PWMA_CCER1 =0x01; //开启输出比较通道 // PWMA_BKR =0x80; //使能主输出 // //PWMA_CR1 |= 0x01; //启动计数器 //}复制代码
使用道具 举报 送花
梁*** 发表于 2024-6-28 13:46 但我在各论坛很少看到有人抱怨ARM的PWM难学、难用,他们会花几个月时间来啃明白。 ...
75
6163
1万
超级版主
vb2*** 发表于 2024-6-28 13:54 原来要花几个月啊 那估计我要花1年多了
神*** 发表于 2024-6-28 13:51 30个小时,全学懂的 都是高手
8
360
2532
vb2*** 发表于 2024-6-28 14:01 PWM4N和PWM4N_2(PWM4N_4) 怎么选择哦. 没找到怎么弄
梁*** 发表于 2024-6-28 14:34 但是对于STC8H1K08-SOP6或TSSOP20,PWM选择的IO不同,比如SPWM4N_2在P3.3,其余的型号在P2.7。 ...
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-6-29 07:34 , Processed in 0.824970 second(s), 104 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.