求助:八细分步进电机驱动程序求助

[复制链接]
 楼主| qciqci 发表于 2007-9-14 14:42 | 显示全部楼层 |阅读模式
#include&ltreg51.h&gt<br />#include&nbsp;&ltintrins.h&gt<br />#define&nbsp;uint&nbsp;&nbsp;unsigned&nbsp;int<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br /><br />sbit&nbsp;&nbsp;key_right=&nbsp;P1^6;<br />sbit&nbsp;&nbsp;key_left=&nbsp;P1^7;<br /><br />uchar&nbsp;m;<br />uchar&nbsp;NP;<br />bit&nbsp;flag;<br /><br />const&nbsp;uchar&nbsp;motor_tb[]={0XCC,0XBD,0XAE,0X9F,0x8F,0X1F,0X2E,0X3D,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0X4C,0X5B,0X6A,0X79,0X78,0X71,0X62,0X53,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0X44,0X35,0X26,0X17,0X87,0X97,0XA6,0XB5,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0XC4,0XD3,0XE2,0XF1,0XF8,0XF9,0XEA,0XDB};&nbsp;<br />const&nbsp;uchar&nbsp;th0_tb[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff,0xff};<br />const&nbsp;uchar&nbsp;tl0_tb[]={0x33,0x66,0x99,0xcc,0xff,0x99,0x33,0xcc,0x66,0xff,0x99,0x33,0x66,0x99,0xcc,0xff,0x33,0x66,0x99,0xcc,0xff,0x99,0x33,0xcc,0x66,0xff,0x99,0x33,0x66,0x99,0xcc,0xff};<br /><br />void&nbsp;wait(uchar&nbsp;t)<br />{&nbsp;<br />uchar&nbsp;i;&nbsp;<br />&nbsp;&nbsp;for&nbsp;(i=0;i&ltt;i++)<br />&nbsp;&nbsp;_nop_();<br />&nbsp;}<br /><br />void&nbsp;delay(void)<br />{&nbsp;<br />flag=0;<br />TR0=0x01;<br />while(1)&nbsp;<br />{&nbsp;if(&nbsp;flag==1)break;}<br />}&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br />void&nbsp;int_t0(void)&nbsp;interrupt&nbsp;1<br />{&nbsp;<br />&nbsp;TMOD=0X01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//模式1,16位计数器<br />&nbsp;ET0=0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//T0开中断<br />&nbsp;EA=0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CPU开中断<br /><br />&nbsp;m++;<br />&nbsp;if(m&gt=31)&nbsp;<br />&nbsp;{&nbsp;m=31;<br />&nbsp;&nbsp;&nbsp;TH0=th0_tb[m];<br />&nbsp;&nbsp;&nbsp;TL0=tl0_tb[m];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;else<br />&nbsp;{<br />&nbsp;TH0=th0_tb[m];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;TL0=tl0_tb[m];<br />&nbsp;}<br /><br />&nbsp;&nbsp;flag=1;<br />}<br /><br /><br />void&nbsp;fourth_step(uchar&nbsp;d)&nbsp;&nbsp;&nbsp;//步进电机走1.8度&nbsp;&nbsp;d=0&nbsp;正转d=1&nbsp;反转<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(d&0x01)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(NP==0)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NP=31;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;NP--;&nbsp;//NP记录步数,全局变量<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(NP==31)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NP=0;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;NP++;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2=motor_tb[NP];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0=motor_tb[NP];&nbsp;//输出到单片机的P2口<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;four_step(uchar&nbsp;d)//&nbsp;步进电机走四步&nbsp;&nbsp;<br />{&nbsp;<br />&nbsp;uchar&nbsp;i;&nbsp;<br />&nbsp;for&nbsp;(i=0;i&lt15;i++)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;fourth_step(d);&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;<br />void&nbsp;a_turn(uchar&nbsp;d)&nbsp;&nbsp;//&nbsp;步进电机走一圈<br />{<br />&nbsp;&nbsp;uchar&nbsp;i;<br />&nbsp;&nbsp;for(i=0;i&lt50;i++)<br />&nbsp;&nbsp;four_step(d);<br />}<br />void&nbsp;main()<br />{&nbsp;TMOD=0X01;<br />&nbsp;&nbsp;TH0=0X03;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定时初值设定,实现35ms定时<br />&nbsp;&nbsp;TL0=0Xff;<br />&nbsp;&nbsp;ET0=0x03;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;EA=0xff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;m=0;<br />&nbsp;&nbsp;NP=0;<br />&nbsp;&nbsp;P2=0xFF;<br />&nbsp;&nbsp;P0=0xFF;<br /><br />&nbsp;&nbsp;while(1)<br />&nbsp;{&nbsp;<br />&nbsp;&nbsp;while((&nbsp;key_right==0)||(&nbsp;key_left==0))<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(key_right==0)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;wait(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(key_right==1)&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;four_step(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(key_right==1)&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;a_turn(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;while(key_left==0)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;wait(10);<br />&nbsp;&nbsp;&nbsp;if(key_left==1)&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;four_step(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(key_left==1)&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;a_turn(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;}<br />while((&nbsp;key_right==1)&&(&nbsp;key_left==1))&nbsp;<br />{P2=0xFF;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;P0=0xFF;&nbsp;break;}<br />&nbsp;<br />}<br />}<br /><br />程序编译后出现问题<br />Build&nbsp;target&nbsp;'Target&nbsp;1'<br />assembling&nbsp;STARTUP.A51...<br />compiling&nbsp;motor5.c...<br />linking...<br />***&nbsp;ERROR&nbsp;L107:&nbsp;ADDRESS&nbsp;SPACE&nbsp;OVERFLOW<br />&nbsp;&nbsp;&nbsp;&nbsp;SPACE:&nbsp;&nbsp;&nbsp;DATA&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT:&nbsp;?DT?MOTOR5<br />&nbsp;&nbsp;&nbsp;&nbsp;LENGTH:&nbsp;&nbsp;0062H<br />***&nbsp;ERROR&nbsp;L105:&nbsp;PUBLIC&nbsp;REFERS&nbsp;TO&nbsp;IGNORED&nbsp;SEGMENT<br />&nbsp;&nbsp;&nbsp;&nbsp;SYMBOL:&nbsp;&nbsp;M<br />&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT:&nbsp;?DT?MOTOR5<br />***&nbsp;ERROR&nbsp;L105:&nbsp;PUBLIC&nbsp;REFERS&nbsp;TO&nbsp;IGNORED&nbsp;SEGMENT<br />&nbsp;&nbsp;&nbsp;&nbsp;SYMBOL:&nbsp;&nbsp;MOTOR_TB<br />&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT:&nbsp;?DT?MOTOR5<br />***&nbsp;ERROR&nbsp;L105:&nbsp;PUBLIC&nbsp;REFERS&nbsp;TO&nbsp;IGNORED&nbsp;SEGMENT<br />&nbsp;&nbsp;&nbsp;&nbsp;SYMBOL:&nbsp;&nbsp;TL0_TB<br />&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT:&nbsp;?DT?MOTOR5<br />***&nbsp;ERROR&nbsp;L105:&nbsp;PUBLIC&nbsp;REFERS&nbsp;TO&nbsp;IGNORED&nbsp;SEGMENT<br />&nbsp;&nbsp;&nbsp;&nbsp;SYMBOL:&nbsp;&nbsp;TH0_TB<br />&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT:&nbsp;?DT?MOTOR5<br />***&nbsp;ERROR&nbsp;L105:&nbsp;PUBLIC&nbsp;REFERS&nbsp;TO&nbsp;IGNORED&nbsp;SEGMENT<br />&nbsp;&nbsp;&nbsp;&nbsp;SYMBOL:&nbsp;&nbsp;NP<br />&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT:&nbsp;?DT?MOTOR5<br />Program&nbsp;Size:&nbsp;data=107.1&nbsp;xdata=0&nbsp;code=500<br />Target&nbsp;not&nbsp;created<br /><br /><br />想问下各位大虾,,为什么呢??这个程序我用在四细分电机驱动上安全没问题啊
zgl7903 发表于 2007-9-17 19:54 | 显示全部楼层

把const uchar 改为code uchar试试看

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

62

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部