Отправленный код (согласно вашим расчетам) переключает вывод каждые ~ 7 циклов.и делает это 692 раза.Всего 346 циклов, однако общее время включения импульса составляет всего ~ 7 циклов.Предложите:
if((P1IN & BIT3)!=BIT3)
{ // if button is pressed
// start pwm signal
P2OUT = 0x01;
for(int i=0; i< (9*1000);i++) // may need to be adjusted
{ // so pwm signal's duration is 9ms
_delay( 1 );
}
// stop pwm signal
P2OUT=0x00;
// wait for button to be released
while( P1IN & BIT3)!=BIT3 ){;}
}
Я не знаком с деталями ШИМ вашего микроконтроллера. Однако большинство из них имеют инициализацию для установки скорости подсчета таймера ШИМ и его счетчика начала / завершения, а также повторения и выходаявляется прямоугольной волной или сигналом повышения или понижения и процентом времени ON .vs.OFF.
Однако опубликованный код указывает на то, что ШИМ является только обычным битом GPIO.
Опубликованный код указывает на то, что ШИМ в процентах должно составлять 50 процентов.Это то, что вы хотите?