|
基本思路為pca用于產(chǎn)生50hz脈沖,兩個(gè)定時(shí)器分別控制8個(gè)舵機(jī)
單片機(jī)源程序如下:
- #include"STC12C5A60S2.h" //@12Mhz
- #include<intrins.h>
- typedef unsigned int u16; //對數(shù)據(jù)類型進(jìn)行聲明定義
- typedef unsigned char u8;
- u16 time;//PCA counts 20ms
- u8 pwm_turn[2]={0,0};
- u8 data1[8]={1500,1500,1500,1500,1500,1500,1500,1500};
- u8 data2[8]={1500,1500,1500,1500,1500,1500,1500,1500};
- void sys_init()
- {
- P0M0=0xff;
- P2M0=0xff;
-
- time=20000;
- CCON=0;
- CL=0;
- CH=0;
- CMOD=0x00;
- CCAP0L=time;
- CCAP0H=time>>8;
- CCAPM0=0x49;
- CR=1;
-
- TMOD|=0X11;
- TH0=0XFE;
- TL0=0X0C;
- TH1=0XFC;
- TL1=0X18;
- ET0=1;//打開定時(shí)器0中斷允許
- ET1=1;//打開定時(shí)器1中斷允許
-
- EA=1;
- }
- void main()
- {
- int j,k;
- for(j=0;j<100;j++)
- for(k=0;k<100;k++);
- sys_init();
- while(1);
- }
- void Timer0() interrupt 1
- {
- if(pwm_turn[0]>8)
- {
- pwm_turn[0]=0;
- TR0=0;
- P0=0;
- }
- else
- {
- pwm_turn[0]++;
- P0<<=1;
- }
- TH0=(65536-data1[pwm_turn[0]])>>8;
- TL0=(65536-data1[pwm_turn[0]])%256;
- }
- void Timer1() interrupt 3
- {
- if(pwm_turn[1]>8)
- {
- pwm_turn[1]=0;
- TR1=0;
- P2=0;
- }
- else
- {
- pwm_turn[1]++;
- P2<<=1;
- }
- TH1=(65536-data2[pwm_turn[1]])>>8;
- TL1=(65536-data2[pwm_turn[1]])%256;
- }
- void PCA() interrupt 7
- {
- CCF0=0;
- TR0=1;//打開定時(shí)器
- TR1=1;//打開定時(shí)器
- P0=0x01;
- P2=0x01;
- time+=20000;
- CCAP0L=time;
- CCAP0H=time>>8;
- }
復(fù)制代碼
所有資料51hei提供下載:
Text1.rar
(673 Bytes, 下載次數(shù): 15)
2019-11-5 10:52 上傳
點(diǎn)擊文件名下載附件
|
|