![]() |
發布時間: 2023-8-27 17:14
正文摘要:想做一個開1秒關0.5秒效果 這是代碼。 現在狀態是,時間是對的,但是pwm輸出好像有延時一樣,做不到開1關0.5,要么就開一下關一下(迅速的)或者開兩三秒關一下 |
coody_sz 發表于 2023-8-28 10:37 謝謝大佬 |
coody_sz 發表于 2023-8-28 10:37 寫的很好 ,應該是邏輯問題, |
PWM操作是馬上起作用的,不會出現延時的,有延時是你的額程序操作邏輯問題。 STC8H系列的高級PWM,連續輸出0或1有2種方法(以PWM1P為例): 1、使用PWMx_ENO禁止輸出PWM,對應IO成為普通IO,禁止PWM輸出后,由這個IO直接輸出高或低電平。 PWMA_ENO |= 0x01; // 允許PWM1P輸出 delay_ms(5); // P1.0輸出PWM 5ms P10 = 1; // P1.0輸出高電平 PWMA_ENO &= ~0x01; // 關閉PWM輸出 delay_ms(5); // P1.0輸出高電平5ms PWMA_ENO |= 0x01; // 允許PWM1P輸出 delay_ms(5); // P1.0輸出PWM 5ms P10 = 0; // P1.0輸出低電平 PWMA_ENO &= ~0x01; // 關閉PWM輸出 delay_ms(5); // P1.0輸出高電平5ms 2、設置PWMx_CCMRn,強制PWM輸出有效(高)電平/無效(低)電平。 PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x60; // PWM正常輸出 delay_ms(5); // PWM輸出5ms PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x40; // 強制PWM輸出無效(低)電平 delay_ms(5); // PWM輸出低電平5ms PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x60; // PWM正常輸出 delay_ms(5); // PWM輸出5ms PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x50; //強制PWM輸出有效(高)電平 delay_ms(5); // PWM輸出高電平5ms |
代碼不全 你是如何定時的? 為啥不截行數? |