#include "12c5a.h" #include "uart.h" extern uint17 pwm[]; extern uint8 flag_vpwm; sbit pwm17=P3^0; sbit pwm16=P2^0; sbit pwm15=P2^1; sbit pwm14=P2^2; sbit pwm13=P2^3; sbit pwm12=P2^4; sbit pwm11=P2^5; sbit pwm10=P1^0; sbit pwm9=P2^7; sbit pwm8=P0^7; sbit pwm7=P0^6; sbit pwm6=P0^5; sbit pwm5=P0^4; sbit pwm4=P0^3; sbit pwm3=P0^2; sbit pwm2=P0^1; sbit pwm1=P0^0; sbit HY=P2^6; void Timer_init() { EA=1; AUXR|=0xC0; //T0,T1工作在1T TMOD|= 0x11; //T0工作在方式1,16位 ET0 = 1; //开定时器0中断 ET1 = 1; //开定时器1中断 } void Timer0(uint32 us) //定时器定时函数 { uint32 valu; if(us<14) us=14; valu=us*12; //工作在1T,最大定时时间2700μs valu=valu-240; valu=0xffff-valu; TH0=valu>>8; TL0=(valu<<8)>>8; TR0 = 1; //T0开始工作 } void Timer1(uint32 us) //定时器定时函数 { uint32 valu; if(us<14) us=14; valu=us*12; //工作在1T,最大定时时间2700μs valu=valu-240; valu=0xffff-valu; TH1=valu>>8; TL1=(valu<<8)>>8; TR1 = 1; //T1开始工作 } void T0zd(void) interrupt 1 { static uint8 i=1; flag_vpwm=1; switch(i) // { case 1: { pwm1=1; Timer0(pwm[1]); //定时 flag_vpwm=1; } break; case 2: { pwm1=0; //pwm1变低 Timer0(2500-pwm[1]); //定时 flag_vpwm=1; } break; case 3: { pwm2=1; //pwm2变高 Timer0(pwm[2]); //定时时常为pwm[2] flag_vpwm=1; } break; case 4: { pwm2=0; //pwm2变低 Timer0(2500-pwm[2]); //定时时常为pwm[2] flag_vpwm=1; } break; case 5: { pwm3=1; //pwm3变高 Timer0(pwm[3]); //定时时常为pwm[3] flag_vpwm=1; } break; case 6: { pwm3=0; //pwm3变低 Timer0(2500-pwm[3]); //定时 flag_vpwm=1; } break; case 7: { pwm4=1; //pwm4变高 Timer0(pwm[4]); //定时 flag_vpwm=1; } break; case 8: { pwm4=0; //pwm4变低 Timer0(2500-pwm[4]); //定时 flag_vpwm=1; } break; case 9: { pwm5=1; //pwm5变高 Timer0(pwm[5]); //定时 flag_vpwm=1; } break; case 10: { pwm5=0; //pwm5变低 Timer0(2500-pwm[5]); //定时 flag_vpwm=1; } break; case 11: { pwm6=1; //pwm6变高 Timer0(pwm[6]); //定时 flag_vpwm=1; } break; case 12: { pwm6=0; //pwm6变低 Timer0(2500-pwm[6]); //定时 flag_vpwm=1; } break; case 13: { pwm7=1; //pwm6变高 Timer0(pwm[7]); //定时 flag_vpwm=1; } break; case 14: { pwm7=0; //pwm7变低 Timer0(2500-pwm[7]); //定时 flag_vpwm=1; } break; case 15: { pwm8=1; //pwm8变高 Timer0(pwm[8]); //定时 flag_vpwm=1; } break; case 16: { pwm8=0; //pwm8变低 Timer0(2500-pwm[8]); //定时 flag_vpwm=1; i=0; } break; case 17: { pwm8=1; //pwm8变高 Timer0(pwm[8]); //定时 flag_vpwm=1; } break; default:break; } i++; } void T1zd(void) interrupt 3 { static uint8 i=1; switch(i) { case 1: { pwm9=1; Timer1(pwm[9]); //定时 } break; case 2: { pwm9=0; //pwm9变低 Timer1(2500-pwm[9]); //定时 } break; case 3: { pwm10=1; //pwm10变高 Timer1(pwm[10]); //定时时常为pwm[8] } break; case 4: { pwm10=0; //pwm10变低 Timer1(2500-pwm[10]); //定时时常为pwm[8] } break; case 5: { pwm11=1; //pwm11变高 Timer1(pwm[11]); //定时时常为pwm[11] } break; case 6: { pwm11=0; //pwm11变低 Timer1(2500-pwm[11]); //定时 } break; case 7: { pwm12=1; //pwm12变高 Timer1(pwm[12]); //定时 } break; case 8: { pwm12=0; //pwm12变低 Timer1(2500-pwm[12]); //定时 } break; case 9: { pwm13=1; //pwm13变高 Timer1(pwm[13]); //定时 } break; case 10: { pwm13=0; //pwm13变低 Timer1(2500-pwm[13]); //定时 } break; case 11: { pwm14=1; //pwm14变高 Timer1(pwm[14]); //定时 } break; case 12: { pwm14=0; //pwm14变低 Timer1(2500-pwm[14]); //定时 } break; case 13: { pwm15=1; //pwm15变高 Timer1(pwm[15]); //定时 } break; case 14: { pwm15=0; //pwm15变低 Timer1(2500-pwm[15]); //定时 } break; case 15: { pwm16=1; //pwm16变高 Timer1(pwm[16]); //定时 } break; case 16: { pwm16=0; //pwm16变低 Timer1(2500-pwm[16]); //定时 i=0; } break; case 17: { pwm16=1; //pwm16变高 Timer1(pwm[16]); //定时 default:break; } i++; }