| 
#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 />想问下各位大虾,,为什么呢??这个程序我用在四细分电机驱动上安全没问题啊 |   
     
  
 |