资源描述:
《机械计算机系统控制》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、//驱动步进电机以150r/min运动//#includesbitPL0=P1^0;sbitDIR0=P1^1;unsignedintTH1_R,TL1_R,num_R,a;voidT1_int(void)interrupt3{EA=0;关中断PL0=~PL0;中断到时脉冲取反TH1=TH1_R;重新装入定时器初值TL1=TL1_R;EA=1;允许总中断}voidmain(void){P1=0xff;do{DIR0=0;a=500;500为150r/min对应的频率EA=1;总段允许ET1=1;T1
2、定时器/计数器中断允许TMOD=TMOD&0x0f;设定T1工作方式TMOD=TMOD
3、0x10;TH1_R=(65536-11059200/24/a)/256;根据频率计算定时器初值TL1_R=(65536-11059200/24/a)%256;TH1=TH1_R;装入初值TL1=TL1_R;TR1=1;启动定时器1结束后会触发中断执行voidT_1子程序}while(1);}硬件接线图#includebdataunsignedcharX_IMG[2]={0x00,0x00};bdataunsig
4、nedcharY_IMG[2]={0x00,0x00};bitT0_flag,T0_triger,T0_end,T1_flag,T1_triger,rotate_trigger,rotate_end;unsignedcharT0_times,T1_times;sbitK1_IMG=X_IMG[0]^0;sbitK2_IMG=X_IMG[0]^1;sbitK3_IMG=X_IMG[0]^2;sbitK4_IMG=X_IMG[0]^3;sbitK1R=P1^4;sbitK2R=P1^5;sbitK3R=P1^6;sbit
5、K4R=P1^7;sbitPL0=P1^0;sbitDIR0=P1^1;unsignedintTH1_R,TL1_R,num_R;voidini_tialize(void)//初始化P1口//{P1=0xff;}Voidkey_scan(void)//读取卡关状态//{K1_IMG=!K1R;K2_IMG=!K2R;K3_IMG=!K3R;K4_IMG=!K4R;}voiddelay2000(void)//用T0延时2000秒//{T0_triger=1;T0_times=40;//延时次数//EA=1;//总中断允
6、许//ET0=1;//T0开中断//TMOD=TMOD&0xf0;//T016位定时器方式1//TMOD=TMOD
7、0x01;TH0=0x4b;//装入T0初始值//TL0=0xff;TR0=1;//启动定时器T0//}voidT0_int(void)interrupt1//T0中断响应子程序//{EA=0;T0_times--;if(!T0_times){T0_flag=1;TR0=0;//关定时器T0//T0_end=1;}else{TH0=0x4b;TL0=0xff;}EA=1;//总中断允许//}Voidro
8、tate(unsignedintpl_freq,unsignedintpl_num)//用T1进行P1.0口的脉冲输出//{inta=pl_freq;//设定转速//num_R=pl_num*2;//设定脉冲输出个数,即步进电机的位子控制//rotate_trigger=1;//标志位//EA=1;ET1=1;TMOD=TMOD&0x0f;TMOD=TMOD
9、0x10;TH1_R=(65536-11059200/24/a)/256;TL1_R=(65536-11059200/24/a)%256;TH1=TH1_R;T
10、L1=TL1_R;}voidT1_int(void)interrupt3//脉冲信号输出//{EA=0;PL0=~PL0;if(num_R){num_R--;TH1=TH1_R;TL1=TL1_R;EA=1;}Else{rotate_end=1;}}voidmain(void)//主程序判断键位决定电机工作方式//{ini_tialize();//初始化P0口//do{key_scan();//读入各各键位的值//if(K2_IMG){TR0=0;T0_end=0;T0_triger=0;TR1=0;rotate_t
11、rigger=0;rotate_end=0;}if(K1_IMG){if(!rotate_trigger){DIR0=0;rotate(500,400);TR1=1;}//r_t=0时正转2圈//}If(rotate_end&(!DIR0)){rotate_end=0;TR1=0;rotate_trigger=0;if(!T0_triger){