开发工具:
文件大小: 65kb
下载次数: 0
上传时间: 2010-07-25
详细说明: #include #include #define uchar unsigned char //用uchar代替unsigned char #define uint unsigned int //uint代替unsigned int #define MotPort P1 #define TH0VAL -64608/256 #define TL0VAL -64608%256 //定时初始 uchar code Mot1Code[]={0xf2,0xf6,0xf4,0xfc,0xf8,0xf9,0xf1,0xf3}; //M1步码表 uchar code Mot2Code[]={0x2f,0x6f,0x4f,0xcf,0x8f,0x9f,0x1f,0x3f}; //M2步码表 uchar code SpeedTab[]={45,38,30,23,17,12,8,5,3,2}; //10级速度表 /*马达状态字定义 --------------------------------------------- MotorWorkMode | D3 | D2 | D1 | D0 | 16进制值 --------------------------------------------- M1停止M2正转 | 0 | 1 | x | 0 |0x4或0x6 --------------------------------------------- M1停止M2反转 | 1 | 1 | x | 0 |0xc或0xe --------------------------------------------- M1正转M2停止 | x | 0 | 0 | 1 |0x1或0x9 --------------------------------------------- M1反转M2停止 | x | 0 | 1 | 1 |0x3或0xb --------------------------------------------- M1正转M2正转 | 0 | 1 | 0 | 1 |0x5 --------------------------------------------- M1反转M2正转 | 0 | 1 | 1 | 1 |0x7 --------------------------------------------- M1正转M2反转 | 1 | 1 | 0 | 1 |0xd --------------------------------------------- M1反转M2反转 | 1 | 1 | 1 | 1 |0xf --------------------------------------------- */ uchar bdata MotorWorkMode=0; //马达工作状态寄存器 sbit B_M1StartStop=MotorWorkMode^0; //M2运动/停止(0:停止;1:运动) sbit B_M1Face=MotorWorkMode^1; //M2方向(0:正转;1:反转) sbit B_M2StartStop=MotorWorkMode^2; //M1运动/停止(0:停止;1:运动) sbit B_M2Face=MotorWorkMode^3; //M1方向(0:正转;1:反转) sbit K_M1StartStop=P0^0; //M1停止/运行 sbit K_M1Face=P0^1; //M1方向 sbit K_M2StartStop=P0^2; //M2停止/运行 sbit K_M2Face=P0^3; //M2方向 sbit K_SpeedAdd=P0^4; //速度加 sbit K_SpeedDec=P0^5; //速度减 sbit P_M1H=P3^0; //M1上限 sbit P_M1L=P3^1; //M1下限 sbit P_M2H=P3^2; //M2上限 sbit P_M2L=P3^3; //M2下限 uchar count; //计数器 uchar SpeedStep; //速度级0-9 //主函数 void main() { TH0 = TH0VAL; TL0 = TL0VAL; //定时器0初值 TR0 = 1; //定时器0开始计数 ET0 = 1; //开CTC0中断 EA = 1; //开总中断 P0=0xff; while(1) { if (!K_M1StartStop){ while(!K_M1StartStop);B_M1StartStop=!B_M1StartStop;} if (!K_M1Face){ while(!K_M1Face);B_M1Face=!B_M1Face;} if (!K_M2StartStop){ while(!K_M2StartStop);B_M2StartStop=!B_M2StartStop;} if (!K_M2Face){ while(!K_M2Face);B_M2Face=!B_M2Face;} if (!K_SpeedAdd) //速度加 { while(!K_SpeedAdd); SpeedStep++; if (SpeedStep==10) {SpeedStep=9;} } if (!K_SpeedDec) //速度减 { while(!K_SpeedDec); SpeedStep--; if (SpeedStep==255) {SpeedStep=0;} } } } //定时器0中断 void Timer0(void) interrupt 1 using 2 { static uchar M1Index,M2Index; //步码索引 TH0 = TH0VAL; TL0 = TL0VAL; //定时器0初值 count--; if (count==0) { count=SpeedTab[SpeedStep]; //根据速度级重装计数器,需要更快速度请更改定时器初值 switch (MotorWorkMode) { case 0x4:{if (P_M2H==1) {M2Index++;} break;} //M2正转,M1停止 case 0x6:{if (P_M2H==1) {M2Index++;} break;} //M2正转,M1停止 case 0xc:{if (P_M2L==1) {M2Index--;} break;} //M2反转,M1停止 case 0xe:{if (P_M2L==1) {M2Index--;} break;} case 0x1:{if (P_M1H==1) {M1Index++;} break;} //M1正转,M2停止 case 0x9:{if (P_M1H==1) {M1Index++;} break;} case 0x3:{if (P_M1L==1) {M1Index--;} break;} //M1反转,M1停止 case 0xb:{if (P_M1L==1) {M1Index--;} break;} case 0x5:{if (P_M1H==1) {M1Index++;} if (P_M2H==1) {M2Index++;} break;} //M1正转,M2正转 case 0x7:{if (P_M1L==1) {M1Index--;} if (P_M2H==1) {M2Index++;} break;} //M1反转,M2正转 case 0xd:{if (P_M1H==1) {M1Index++;} if (P_M2L==1) {M2Index--;} break;} //M1正转,M2反转 case 0xf:{if (P_M1L==1) {M1Index--;} if (P_M2L==1) {M2Index--;} break;} //M1反转,M2反转 default:break; } if (M1Index==8) {M1Index=0;} else { if (M1Index==255) {M1Index=7;} } if (M2Index==8) {M2Index=0;} else { if (M2Index==255) {M2Index=7;} } MotPort=Mot1Code[M1Index]&Mot2Code[M2Index]; //输出M1和M2步码 } } ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.