#include<reg51.h><br />#include <intrins.h><br />#define uint unsigned int<br />#define uchar unsigned char<br /><br />sbit key_right= P1^6;<br />sbit key_left= P1^7;<br /><br />uchar m;<br />uchar NP;<br />bit flag;<br /><br />const uchar motor_tb[]={0XCC,0XBD,0XAE,0X9F,0x8F,0X1F,0X2E,0X3D,<br /> 0X4C,0X5B,0X6A,0X79,0X78,0X71,0X62,0X53,<br /> 0X44,0X35,0X26,0X17,0X87,0X97,0XA6,0XB5,<br /> 0XC4,0XD3,0XE2,0XF1,0XF8,0XF9,0XEA,0XDB}; <br />const uchar 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 uchar 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 wait(uchar t)<br />{ <br />uchar i; <br /> for (i=0;i<t;i++)<br /> _nop_();<br /> }<br /><br />void delay(void)<br />{ <br />flag=0;<br />TR0=0x01;<br />while(1) <br />{ if( flag==1)break;}<br />} <br /><br /><br />void int_t0(void) interrupt 1<br />{ <br /> TMOD=0X01; //模式1,16位计数器<br /> ET0=0x01; //T0开中断<br /> EA=0x01; //CPU开中断<br /><br /> m++;<br /> if(m>=31) <br /> { m=31;<br /> TH0=th0_tb[m];<br /> TL0=tl0_tb[m];<br /> } <br /> else<br /> {<br /> TH0=th0_tb[m]; <br /> TL0=tl0_tb[m];<br /> }<br /><br /> flag=1;<br />}<br /><br /><br />void fourth_step(uchar d) //步进电机走1.8度 d=0 正转d=1 反转<br />{ <br /> if (d&0x01) <br /> { <br /> if (NP==0) <br /> NP=31; <br /> else NP--; //NP记录步数,全局变量<br /> } <br /> else <br /> { <br /> if (NP==31) <br /> NP=0; <br /> else NP++; <br /> } <br /> P2=motor_tb[NP];<br /> P0=motor_tb[NP]; //输出到单片机的P2口<br /> <br /> delay();<br /> <br />}<br /><br />void four_step(uchar d)// 步进电机走四步 <br />{ <br /> uchar i; <br /> for (i=0;i<15;i++) <br /> fourth_step(d); <br /><br /> <br />} <br />void a_turn(uchar d) // 步进电机走一圈<br />{<br /> uchar i;<br /> for(i=0;i<50;i++)<br /> four_step(d);<br />}<br />void main()<br />{ TMOD=0X01;<br /> TH0=0X03; //定时初值设定,实现35ms定时<br /> TL0=0Xff;<br /> ET0=0x03; <br /> EA=0xff; <br /> m=0;<br /> NP=0;<br /> P2=0xFF;<br /> P0=0xFF;<br /><br /> while(1)<br /> { <br /> while(( key_right==0)||( key_left==0))<br /> {<br /> while(key_right==0) <br /> { wait(10);<br /> if(key_right==1) break;<br /> four_step(1);<br /> wait(10);<br /> if(key_right==1) break;<br /> a_turn(1);<br /> }<br /> <br /> while(key_left==0) <br /> { wait(10);<br /> if(key_left==1) break;<br /> four_step(0);<br /> wait(10);<br /> if(key_left==1) break;<br /> a_turn(0);<br /> <br /> }<br /><br /> }<br />while(( key_right==1)&&( key_left==1)) <br />{P2=0xFF; break;<br /> P0=0xFF; break;}<br /> <br />}<br />}<br /><br />程序编译后出现问题<br />Build target 'Target 1'<br />assembling STARTUP.A51...<br />compiling motor5.c...<br />linking...<br />*** ERROR L107: ADDRESS SPACE OVERFLOW<br /> SPACE: DATA <br /> SEGMENT: ?DT?MOTOR5<br /> LENGTH: 0062H<br />*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT<br /> SYMBOL: M<br /> SEGMENT: ?DT?MOTOR5<br />*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT<br /> SYMBOL: MOTOR_TB<br /> SEGMENT: ?DT?MOTOR5<br />*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT<br /> SYMBOL: TL0_TB<br /> SEGMENT: ?DT?MOTOR5<br />*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT<br /> SYMBOL: TH0_TB<br /> SEGMENT: ?DT?MOTOR5<br />*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT<br /> SYMBOL: NP<br /> SEGMENT: ?DT?MOTOR5<br />Program Size: data=107.1 xdata=0 code=500<br />Target not created<br /><br /><br />想问下各位大虾,,为什么呢??这个程序我用在四细分电机驱动上安全没问题啊 |
|