⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainloop.c

📁 这是一个89c52的USB固件系统的源码 使用keilc 生成hex文件 可直接烧录
💻 C
📖 第 1 页 / 共 3 页
字号:
		    if (work_status != 2){
		      if ((XBYTE[xytype(cur_order)] == 0)&&(cur_order == 0)){
		        work_status = 2;
              }
              else{
		        work_status = 1;
                open_gao_pin();
              }
			}
		  }
		}
		else if (GenEpBuf[3] == 2){
		  if (work_status != 2){
		    work_status = 0;
          }
          close_gao_pin();
		}
		else if (GenEpBuf[3] == 3){
	      gaopzt = GAOPIN_KAI;
          open_gao_pin();
		}
		else if (GenEpBuf[3] == 4){
	      gaopzt = GAOPIN_GUAN;
          close_gao_pin();
		}
		else if (GenEpBuf[3] == 5){
	      dianjzt = MOT_RUN;
          open_mot();
		}
		else if (GenEpBuf[3] == 6){
	      dianjzt = MOT_CLOSE;
          close_mot();
		}
		else if (GenEpBuf[3] == 7){
		  read_jing_flag = 1;
		}
		else if (GenEpBuf[3] == 8){
		}
		else if (GenEpBuf[3] == 9){
          read_jing_flag = 0;
	      diand_flag = 0;
 	      diand_axis = 0;
	      diandbz = 0;
    	  read_prog_flag = 0;
          read_max_loop_flag = 0;
          send_req_flag = 0;
		  read_nc_num_flag = 0;
	      io_wrong_flag = 0;
	      cur_order1 = 0;
          e_order = cur_order = 0;		  
		  work_status = 0;
	  	  cur_off = 0;
		  XBYTE[xytype(0)] = 0;
		  XBYTE[xytype(1)] = 0;
		  XBYTE[xytype(2)] = 0;
		  XBYTE[xytype(3)] = 0;
		  XBYTE[xytype(4)] = 0;
		  if (dianjzt == MOT_RUN){
		    XBYTE[xytype(0)] = 1;
            (long)(*((long *)(&(XBYTE[lpdata(cur_order,2)])))) = cur_x;
            (long)(*((long *)(&(XBYTE[lpdata(cur_order,3)])))) = cur_y;
            (long)(*((long *)(&(XBYTE[lpdata(cur_order,4)])))) = 0;
            (long)(*((long *)(&(XBYTE[lpdata(cur_order,5)])))) = 0;
			work_status = 1;
		  }
		  else{
            cur_x = cur_y = cur_u = cur_v  = cur_seg = cur_off = 0;
		    cur_x_step_order = cur_y_step_order = cur_u_step_order = cur_v_step_order = 0;
		  }
		  stop_flag = 0;
		  stop_byte = 0;
		}
		else if (GenEpBuf[3] == 10){
		  io_wrong_flag = 0;
		  read_prog_flag = 1;
		  mask_cc = 0;
		}
		else if (GenEpBuf[3] == 11){
		  read_max_loop_flag = 1;
		}
		else if (GenEpBuf[3] == 12){
		  if (gaopzt == GAOPIN_KAI){
		    if (dianjzt == MOT_RUN)
              cc = 0x86;
			else
              cc = 0x87;
		  }
		  else{
		    if (dianjzt == MOT_RUN)
              cc = 0x88;
			else
              cc = 0x89;
		  }
          RAMCS = 1;
          MCU_D12CS = 0;
          D12_WriteEndpoint(3, 1, &cc);  
		}
		else if (GenEpBuf[3] == 13){
		  read_nc_num_flag = 1;
        }
		else if (GenEpBuf[3] == 14){
          read_jing_flag = 0;
    	  read_prog_flag = 0;
          read_max_loop_flag = 0;
          send_req_flag = 0;
		  read_nc_num_flag = 0;
	      io_wrong_flag = 0;
	      cur_order1 = 0;
          e_order = cur_order = 0;		  
		  work_status = 0;
	  	  cur_off = 0;
		  XBYTE[xytype(0)] = 0;
		  XBYTE[xytype(1)] = 0;
		  XBYTE[xytype(2)] = 0;
		  XBYTE[xytype(3)] = 0;
		  XBYTE[xytype(4)] = 0;
		}
		else if (GenEpBuf[3] == 20){
          RAMCS = 1;
  		  MCU_D12CS = 0;
	      MCU_D12CS = 0x1;
	      CKCON = 0x00;
	      D12_DATA = 0xff02;			//定义数据地址
 	      D12_COMMAND = 0xff03;		//定义命令地址
	      MCU_D12CS = 0x0;
//	      D12SUSPD = 0x0;
	      IT0 = 0;//初始化中断
	      EX0 = 1;
	      PX0 = 0;
	      EA = 1;
	      MCU_D12CS = 0x1;
	      MCU_D12CS = 0x0;
	      bEPPflags.value = 0;
	      reconnect_USB();//联接USB总线
		}
		else if (GenEpBuf[3] == 30){
	      diand_flag = 1;
	      diand_axis = 1;		  
		}
		else if (GenEpBuf[3] == 31){
	      diand_flag = 1;
	      diand_axis = 2;		  
		}
		else if (GenEpBuf[3] == 32){
	      diand_flag = 1;
	      diand_axis = 3;		  
		}
		else if (GenEpBuf[3] == 33){
	      diand_flag = 1;
	      diand_axis = 4;		  
		}
		else if (GenEpBuf[3] == 40){//回退
	      anti_work_flag = 1;
	      old_cur_jing = cur_jing;
		  cur_jing = 200;
		  if (cur_off == 0){
		    cur_order --;
			if (cur_order == -1){
	          cur_order1 = 0;
			  cur_order = 0;
              cc = 0x8e;
              RAMCS = 1;
              MCU_D12CS = 0;
              D12_WriteEndpoint(3, 1, &cc);
			}
			else{
			  cur_off = (long)(*((long *)(&(XBYTE[counterlen(cur_order)]))));
		      work_status = 1;
			}
		  }
		  else
		    work_status = 1;
		}
		else if (GenEpBuf[3] == 60){//五相十拍
		  xiangxlx = 0;
		}
		else if (GenEpBuf[3] == 61){//三相六拍
		  xiangxlx = 1;
		}
		else if (GenEpBuf[3] == 62){//方向电平
		  xiangxlx = 2;
		}
		else if (GenEpBuf[3] == 70){//不自动开高频继续加工
		  work_status = 1;
		}
		else if (GenEpBuf[3] == 80){//自动开高频继续加工
		  if (io_wrong_flag == 0){
		    work_status = 1;
            open_gao_pin();
		  }
		}
	}
}

void send_a_step(void)
{
  char bz;

  MCU_D12CS = 1;
  RAMCS = 0;
  bx = (long)(*((long *)(&(XBYTE[lpdata(cur_order,2)]))));
  by = (long)(*((long *)(&(XBYTE[lpdata(cur_order,3)]))));
  ex = (long)(*((long *)(&(XBYTE[lpdata(cur_order,4)]))));
  ey = (long)(*((long *)(&(XBYTE[lpdata(cur_order,5)]))));

  l1 = ex-bx;
  l2 = ey-by;
  if (l1 < 0)
    l1 = -l1;
  if (l2 < 0)
    l2 = -l2;
  xyt = XBYTE[xytype(cur_order)];
  uvt = XBYTE[uvtype(cur_order)];
  cur_work_seg = (long)(*((long *)(&(XBYTE[ncorder(cur_order)]))));
  if (xyt == 1){  //直线
	if (anti_work_flag == 0)
      cur_off ++;
	else
      cur_off --;
    if (l1 > l2){  //X计数
	  if (ex > bx){  //ex > bx
	    if (anti_work_flag == 0){
	      cur_x ++;
		  x_z();
		}
		else{
	      cur_x --;
		  x_z();
		}
	  }
	  else{    //ex < bx
	    if (anti_work_flag == 0){
	      cur_x --;
		  x_f();
		}
		else{
	      cur_x ++;
		  x_z();
		}
	  }
	  if (anti_work_flag == 0){
	    if (cur_x == ex) //末点
		  bz = 1;
		else
		  bz = 0;
      }
	  else{
	    if (cur_x == bx) //末点
		  bz = 1;
		else
		  bz = 0;
	  }
	  if (bz == 1){
	    if (anti_work_flag == 0){
		  if (ey > cur_y)
		    y_z();
		  else if (ey < cur_y)
		    y_f();
	      cur_y = ey;
          XBYTE[xytype(cur_order)] = 0;
	      cur_order1 = (cur_order+1)%MAX_ORDER;
	      cur_order = (cur_order+1)%MAX_ORDER;
	      cur_off = 0;
		  if (diandbz == 1){
		    diandbz = 0;
		    work_status = 0;
            cc = 0x8c;
            RAMCS = 1;
            MCU_D12CS = 0;
            D12_WriteEndpoint(3, 1, &cc);  
		  }
		  else{
		    if (XBYTE[xytype(cur_order)] == 0){
		      work_status = 2;
			  e_order = 0;
	          cur_order1 = 0;
			  cur_order = 0;
		      send_req_order(0);
			  close_gao_pin();
		   }
		  }
		}
		else{
		  if (by > cur_y)
		    y_z();
		  else if (by < cur_y);
		    y_f();
	      cur_y = by;
		  cur_off = 0;
		  anti_work_flag = 0;
	      cur_jing = old_cur_jing;
		}
	  }
	  else{  //中间点
        l3 = by + 1.0*(ey-by)*(cur_x-bx)/(ex-bx);
 	    if (l3 != cur_y){  //Y也要走
	      if (ey > by)
		    y_z();
		  else
		    y_f();
	      cur_y = l3;
		}
	  }
	}
	else{//Y计数
	  if (ey > by){  //ey > by
	    if (anti_work_flag == 0){
	      cur_y ++;
		  y_z();
		}
		else{
	      cur_y --;
		  y_f();
		}
	  }
	  else{   // ey < by
	    if (anti_work_flag == 0){
	      cur_y --;
		  y_f();
		}
		else{
	      cur_y ++;
		  y_z();
		}
	  }
	  if (anti_work_flag == 0){
	    if (cur_y == ey) //末点
		  bz = 1;
		else
		  bz = 0;
      }
	  else{
	    if (cur_y == by) //末点
		  bz = 1;
		else
		  bz = 0;
	  }
	  if (bz == 1){
	    if (anti_work_flag == 0){
		  if (ex > cur_x)
		    x_z();
		  else if (ex < cur_x)
		    x_f();
	      cur_x = ex;
          XBYTE[xytype(cur_order)] = 0;
	      cur_order1 = (cur_order+1)%MAX_ORDER;
	      cur_order = (cur_order+1)%MAX_ORDER;
	      cur_off = 0;
		  if (diandbz == 1){
		    diandbz = 0;
		    work_status = 0;
            cc = 0x8c;
            RAMCS = 1;
            MCU_D12CS = 0;
            D12_WriteEndpoint(3, 1, &cc);  
		  }
		  else{
		    if (XBYTE[xytype(cur_order)] == 0){
		      work_status = 2;
			  e_order = 0;
	          cur_order1 = 0;
			  cur_order = 0;
		      send_req_order(0);
			  close_gao_pin();
			}
		  }
		}
		else{
		  if (bx > cur_x)
		    x_z();
		  else if (bx < cur_x)
		    x_f();
	      cur_x = bx;
		  anti_work_flag = 0;
	      cur_jing = old_cur_jing;
	      cur_off = 0;
		}
	  }
	  else{//中间点
        l3 = bx + 1.0*(ex-bx)*(cur_y-by)/(ey-by);
	    if (l3 != cur_x){//X也要走
		  if (ex > bx)
		    x_z();
		  else
		    x_f();
	      cur_x = l3;
		}
      }
	}
  }
  else if ((xyt == 2)||(xyt == 3)){
    bx = (long)(*((long *)(&(XBYTE[lpdata(cur_order,0)]))));
    by = (long)(*((long *)(&(XBYTE[lpdata(cur_order,1)]))));
    r = (ex*1.0-bx)*(ex*1.0-bx)+(ey*1.0-by)*(ey*1.0-by);

	if ((cur_x > bx)&&(cur_y >= by)){
	  if (cur_x-bx > cur_y-by)
	    cc = 1;
	  else
	    cc = 2;
	}
	else if ((cur_x <= bx)&&(cur_y > by)){
	  if (bx-cur_x > cur_y-by)
	    cc = 4;
	  else
	    cc = 3;
	}
	else if ((cur_x < bx)&&(cur_y <= by)){
	  if (bx-cur_x > by-cur_y)
	    cc = 5;
	  else
	    cc = 6;
	}
	else{
	  if (cur_x-bx > by-cur_y)
	    cc = 8;
	  else
	    cc = 7;
	}

    if (xyt == 2){//ni yuan
      if ((cc == 2)||(cc == 3)){
  	    if (XBYTE[xy(cur_order)] == 0){
		  if (anti_work_flag == 0)
  		    cur_off ++;
		  else
  		    cur_off --;
		}
		if (anti_work_flag == 0){
		  cur_x --;
		  x_f();
		}
		else{
		  cur_x ++;
		  x_z();
		}
	  }
	  else if ((cc == 6)||(cc == 7)){
	    if (XBYTE[xy(cur_order)] == 0){
		  if (anti_work_flag == 0)
  		    cur_off ++;
		  else
  		    cur_off --;
		}
		if (anti_work_flag == 0){
	      cur_x ++;
		  x_z();
		}
		else{
	      cur_x --;
		  x_f();
		}
	  }
	  else if ((cc == 4)||(cc == 5)){
	    if (XBYTE[xy(cur_order)] == 1){
		  if (anti_work_flag == 0)
  		    cur_off ++;
		  else
  		    cur_off --;
		}
		if (anti_work_flag == 0){
	      cur_y --;
		  y_f();
		}
		else{
	      cur_y ++;
		  y_z();
		}
	  }
	  else{
	    if (XBYTE[xy(cur_order)] == 1){
		  if (anti_work_flag == 0)
  		    cur_off ++;
		  else
  		    cur_off --;
		}
		if (anti_work_flag == 0){
	      cur_y ++;
		  y_z();
		}
		else{
	      cur_y --;
		  y_f();
		}
	  }
    }
    else{//shun yuan
	  if ((cc == 2)||(cc == 3)){
	    if (XBYTE[xy(cur_order)] == 0){
		  if (anti_work_flag == 0)
  		    cur_off ++;
		  else
  		    cur_off --;
		}
		if (anti_work_flag == 0){
	      cur_x ++;
		  x_z();
		}
		else{
	      cur_x --;
		  x_f();
		}
	  }
	  else if ((cc == 6)||(cc == 7)){
	    if (XBYTE[xy(cur_order)] == 0){
		  if (anti_work_flag == 0)
  		    cur_off ++;
		  else
  		    cur_off --;
		}
		if (anti_work_flag == 0){
	      cur_x --;
		  x_f();
		}
		else{
	      cur_x ++;
		  x_z();
		}
	  }
	  else if ((cc == 4)||(cc == 5)){
	    if (XBYTE[xy(cur_order)] == 1){
		  if (anti_work_flag == 0)
  		    cur_off ++;
		  else
  		    cur_off --;
		}
		if (anti_work_flag == 0){
	      cur_y ++;
		  y_z();
		}
		else{
	      cur_y --;
		  y_f();
		}
	  }
	  else{
	    if (XBYTE[xy(cur_order)] == 1){
		  if (anti_work_flag == 0)
  		    cur_off ++;
		  else
  		    cur_off --;
		}
		if (anti_work_flag == 0){
	      cur_y --;
		  y_f();
		}
		else{
		  cur_y ++;
		  y_z();
		}
	  }
    }

	f1 = fabs((cur_x*1.0-bx)*(cur_x*1.0-bx)+(cur_y*1.0-by)*(cur_y*1.0-by)-r);
	if (xyt == 2){// ni yuan
	  if ((cc == 1)||(cc == 4)){
	    if (f1 > fabs((cur_x*1.0-1-bx)*(cur_x*1.0-1-bx)+(cur_y*1.0-by)*(cur_y*1.0-by)-r)){
	      if (XBYTE[xy(cur_order)] == 0){
		    if (anti_work_flag == 0)
  		      cur_off ++;
		    else
  		      cur_off --;
 		  }
		  if (anti_work_flag == 0){
	        cur_x --;
		    x_f();
          }
		  else{
		    cur_x ++;
			x_z();
		  }
		}
	  }
	  if ((cc == 2)||(cc == 7)){
	    if (f1 > fabs((cur_x*1.0-bx)*(cur_x*1.0-bx)+(cur_y*1.0+1-by)*(cur_y*1.0+1-by)-r)){
	      if (XBYTE[xy(cur_order)] == 1){
		    if (anti_work_flag == 0)
  		      cur_off ++;
		    else
  		      cur_off --;
 		  }
		  if (anti_work_flag == 0){
	        cur_y ++;
		    y_z();
		  }
		  else{
		    cur_y --;
			y_f();
		  }
		}
	  }
	  if ((cc == 3)||(cc == 6)){
	    if (f1 > fabs((cur_x*1.0-bx)*(cur_x*1.0-bx)+(cur_y*1.0-1-by)*(cur_y*1.0-1-by)-r)){
	      if (XBYTE[xy(cur_order)] == 1){
		    if (anti_work_flag == 0)
  		      cur_off ++;
		    else
  		      cur_off --;
 		  }
		  if (anti_work_flag == 0){
	        cur_y --;
		    y_f();
	      }
		  else{
		    cur_y ++;
			y_z();
		  }
		}
	  }
	  if ((cc == 5)||(cc == 8)){
	    if (f1 > fabs((cur_x*1.0+1-bx)*(cur_x*1.0+1-bx)+(cur_y*1.0-by)*(cur_y*1.0-by)-r)){
	      if (XBYTE[xy(cur_order)] == 0){
		    if (anti_work_flag == 0)
  		      cur_off ++;
		    else
  		      cur_off --;
 		  }
		  if (anti_work_flag == 0){
	        cur_x ++;
		    x_z();
	      }
		  else{
		    cur_x --;
			x_f();
		  }
		}
	  }
	}
	else if (xyt == 3){// shun yuan
	  if ((cc == 1)||(cc == 4)){
	    if (f1 > fabs((cur_x*1.0+1-bx)*(cur_x*1.0+1-bx)+(cur_y*1.0-by)*(cur_y*1.0-by)-r)){
	      if (XBYTE[xy(cur_order)] == 0){
		    if (anti_work_flag == 0)
  		      cur_off ++;
		    else
  		      cur_off --;
 		  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -