手上沒有STC8A的單片機
試試這樣改
- void PWM_Isr() interrupt 22
- {
- static char dir[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- static int val[8]= {0, 0, 0, 0, 0, 0, 0, 0};
- static char Enb[8]= {0, 0, 0, 0, 0, 0, 0, 0};
- char store, index;
- static unsigned int delay_on = 0;
- static char delay_on_i = 0;
- if(!delay_on)
- {
- delay_on = 1500;//~0.5sec
- if(delay_on_i<8)
- {
- Enb[delay_on_i] = 1;
- delay_on_i++;
- }
- }else{
- delay_on--;
- }
- if (PWMCFG & 0x80)
- {
- PWMCFG &= ~0x80; //清中斷標志
- for(index = 0;index < 8; index++)
- {
- if(Enb[index])
- {
- if (!dir[index])
- {
- val[index]++;
- if (val[index] >= CYCLE) dir[index] = 0;
- }
- else
- {
- val[index]--;
- if (val[index] <= 1) dir[index] = 1;
- }
- }
- }
-
- store = P_SW2;
- P_SW2 |= 0x80;
- PWM0T2 = val[0];
- PWM1T2 = val[1];
- PWM2T2 = val[2];
- PWM3T2 = val[3];
- PWM4T2 = val[4];
- PWM5T2 = val[5];
- PWM6T2 = val[6];
- PWM7T2 = val[7];
- P_SW2 = store;
- }
- }
復制代碼
|