Page 274 - Programming Microcontrollers in C
P. 274

Timer Operations    259

                       OC1M.OC1M7=ON; /* sent OC1 tout to PA7 */
                       OC1M.OC1M5=ON; /* couple OC1 to OC3 */
                       TMSK1.OC3I=ON; /* enable the OC3 interrupt */
                       TMSK1.IC1I=ON; /* enable the IC1 interrupt */
                       OC1D.OC1D5=ON; /* turn on OC3 when OC1 occurs */
                       TCTL1.OL3=ON;  /* toggle OC3 when OC3 occurs */
                       PACTL.DDRA7=ON; /* make OC1 an output to PA7 */
                       TOC1=TCNT+PWM_period; /* set OC1 to the period */
                       TOC3=TOC1+time_on; /* set OC3 time on */
                       cli();              /* enable the system interrupts */


                       FOREVER
                       {
                                 /* put application code here */
                       }
                   }


                   @port void IC1_Isr( void)
                   {
                       time1=TIC1;
                       TFLG1=IC1F; /* reset IC1 interrupt flag */
                       measured_period=TIC1-time1;
                       TOC2=TCNT+MS3_DEBOUNCE; /* 3 ms debounce time */
                       TMSK1.IC1I=OFF; /* disable IC1 interrupt */
                       TMSK1.OC2I=ON; /* enable OC2 interrupt */
                   }


                   @port void OC2_Isr(void)
                   {
                       TFLG1=IC1F|OC2F; /*reset IC1 & OC2 interrupt flag */
                       TMSK1.OC2I=OFF; /* disable OC2 interrupt */
                       TMSK1.IC1I=ON; /* enable IC1 interrupt */
                   }

                   @port void OC3_Isr( void)
                   {
                       TFLG1=OC1F; /* reset OC1 interrupt flag */
                       TOC1+=PWM_period;
                       OC1D.OC1D7 ^=ON;
   269   270   271   272   273   274   275   276   277   278   279