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

📄 serial.c

📁 MSC1210单片机在TINY操作系统下的C语言例程
💻 C
字号:
#include <REG1210.H>      /* special function register 1210       */
#include <stdio.h>        /* standard I/O .h-file                 */
#include <rtx51tny.h>	  /* RTX-51 tiny functions & defines      */
#include <stdlib.h>
#include <string.h>
#include <16b.h>
#include "motorcontrol.h"




void read_command(void)
{
    uint  xdata   address;
	uchar xdata   temp1[2];
	uchar xdata   i,j;
	uint  xdata   l,m;
    if(h_cmd.buf[h_cmd.exe_p].n==ADDRESS)  //如果站地址等于'z'
    {
    	if(h_cmd.buf[h_cmd.exe_p].a==card_addr)  //功能地址为板地址
    	{
    		switch(h_cmd.buf[h_cmd.exe_p].f)  //功能地址	
    		{
    			case cmdf_read: //读参数
        		{
    				if((h_cmd.buf[h_cmd.exe_p].da[0]>=0)&&(h_cmd.buf[h_cmd.exe_p].da[0]<137))
    				{
    					Uart0Send(card_addr,cmdf_read,h_cmd.buf[h_cmd.exe_p].da[0],data_buf,h_cmd.buf[h_cmd.exe_p].da[0],1);
    				}
    			}break;
    			case cmdf_write://写参数
        		{
    				if((h_cmd.buf[h_cmd.exe_p].da[0]>10)&&(h_cmd.buf[h_cmd.exe_p].da[0]<30))
    				{								
    					switch(h_cmd.buf[h_cmd.exe_p].da[0])  //功能地址	
    					{
    						case 11: //输出口高16位
        					{
    								data_buf[11]=h_cmd.buf[h_cmd.exe_p].da[1];
    								output[1]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
    								output[0]=h_cmd.buf[h_cmd.exe_p].da[1];
    								Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
    								BUSDEV_BASE_IOOUTPUTC->MSB_32 = output[0];
    								BUSDEV_BASE_IOOUTPUTC->MSB_24 = output[1];
    						}break;
    						case 12: //输出口低16位
        					{
    								data_buf[12]=h_cmd.buf[h_cmd.exe_p].da[1];
    								output[3]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
    								output[2]=h_cmd.buf[h_cmd.exe_p].da[1];
    								Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
    								BUSDEV_BASE_IOOUTPUTC->LSB_16 = output[2];
    								BUSDEV_BASE_IOOUTPUTC->LSB_8 = output[3];
    						}break;
    						case 13: //报警
        					{
    							data_buf[13]=h_cmd.buf[h_cmd.exe_p].da[1];
    							Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
    						}break;
    						case 14: //软输入高16位
        					{
    							softinput[0]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
    							softinput[1]=h_cmd.buf[h_cmd.exe_p].da[1];
    							data_buf[14]=h_cmd.buf[h_cmd.exe_p].da[1];
    							Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
    							if(0x2000==(data_buf[13]&0x2000)) 
                               	{
                                    if(!(softinput[0]&clearworkcount))      //清除工作次数
                                    {
                                    	workCount=0;
                                  		eeprom_buf[0]=workCount>>8;
    									eeprom_buf[1]=workCount;
    									eprom_rw = 0;
    									rw_eeprom(42,eeprom_buf,2);			//储存加工次数          	
                                      	data_buf[21]=workCount;	
                                     	data_buf[13] &=(~(0x2000));         //取消洗盘报警    
                                    }
                                    else if(softinput[0]&clearworkcount)
                                    {
                                     	data_buf[13] &=(~(0x2000));         //取消洗盘报警  
                                        NowGy=9;  //工艺
                                        NowGx=1;   //工序
                                        data_buf[16]=660;
                                        softinput[1] |= gearQuickUp;                                                 
                                    } 
                                }            
    						}break;
    						case 15: //软输入低16位									
        					{
    							softinput[2]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
    							softinput[3]=h_cmd.buf[h_cmd.exe_p].da[1];
    							data_buf[15]=h_cmd.buf[h_cmd.exe_p].da[1];
    							Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
    						}break;
    						case 16: //工艺工序号
        					{
    							if((runFlag==0)&&(workCount<data_buf[71])) //工作次数到置工艺9   12。20
    							{
    								data_buf[16]=h_cmd.buf[h_cmd.exe_p].da[1];
    								NowGy=(data_buf[16]-500)/20+1;
    								NowGx=(data_buf[16]-500)%20+1;
    							}
    							Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
    						}break;
    						default:
    						{
    							data_buf[h_cmd.buf[h_cmd.exe_p].da[0]]=h_cmd.buf[h_cmd.exe_p].da[1];
    							eeprom_buf[0]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
    							eeprom_buf[1]=h_cmd.buf[h_cmd.exe_p].da[1];
    							address=(h_cmd.buf[h_cmd.exe_p].da[0])*2;
    							eprom_rw = 0;
    							rw_eeprom(address,eeprom_buf,2);
    							Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,h_cmd.buf[h_cmd.exe_p].da[0],1);
    						}break;
    	  				}
    				}
    				if((h_cmd.buf[h_cmd.exe_p].da[0]>29)&&(h_cmd.buf[h_cmd.exe_p].da[0]<120))
    				{
    					data_buf[h_cmd.buf[h_cmd.exe_p].da[0]]=h_cmd.buf[h_cmd.exe_p].da[1];
    					EEPROM=1;
    					DAC8532 =1;
    					eprom_rw = 0;
    					eeprom_buf[0]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
    					eeprom_buf[1]=h_cmd.buf[h_cmd.exe_p].da[1];
    					address=(h_cmd.buf[h_cmd.exe_p].da[0])*2;
    					rw_eeprom(address,eeprom_buf,2);
    					Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
    					if(h_cmd.buf[h_cmd.exe_p].da[0]==69)
    					{
    						daFlag=0;
    					}
    				}
    			}break;
    			case cmdf_write1: //写一个工序参数
        		{
    				if((h_cmd.buf[h_cmd.exe_p].da[0]>=500)&&(h_cmd.buf[h_cmd.exe_p].da[0]<=899))
        			{
            			
    					DAC8532=1;
    					j=0;
       					for(i=0;i<10;i++)
            			{   
                 			eeprom_buf[j]=h_cmd.buf[h_cmd.exe_p].da[i+1]>>8;
                 			eeprom_buf[j+1]=h_cmd.buf[h_cmd.exe_p].da[i+1];
                 			j=j+2;
            			}
    
            			l=((h_cmd.buf[h_cmd.exe_p].da[0]-500)/20)+1;  //工艺
            			m=((h_cmd.buf[h_cmd.exe_p].da[0]-500)%20)+1;  //工序  
    
    					address=l*1000+(m-1)*50;
    					eprom_rw = 0;
             			rw_eeprom(address,eeprom_buf,20);       //储存一个工序参数
    
    					eeprom_buf[0]=h_cmd.buf[h_cmd.exe_p].da[1];	
    					GX_SUM[l]=eeprom_buf[0];
    					address=500+l;									
    					eprom_rw = 0;
             			rw_eeprom(address,eeprom_buf,1);        //储存一个工艺的工序数
    					Uart0Send(card_addr,cmdf_write1,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,10);			    
    			}
    			}break;
    			case cmdf_read1:  //读实时数据
        		{
    				if(h_cmd.buf[h_cmd.exe_p].da[0]==0)
    				{
    					Uart0Send(card_addr,cmdf_read1,0,data_buf,0,24); 
    				}
    			}break;
    			case cmdf_read2: //读电机参数
        		{
    				if(h_cmd.buf[h_cmd.exe_p].da[0]==120)
    				{
    					Uart0Send(card_addr,cmdf_read2,120,data_buf,120,16);
    				}		
    			}break;
    			case cmdf_read3://读工艺设置参数
        		{
    				if(h_cmd.buf[h_cmd.exe_p].da[0]==30)
    				{
    					Uart0Send(card_addr,cmdf_read3,30,data_buf,30,50);
    				}	
    			}break;
    			case cmdf_read4: //读维护设置参数
        		{
    				if(h_cmd.buf[h_cmd.exe_p].da[0]==80)
    				{
    					Uart0Send(card_addr,cmdf_read4,80,data_buf,80,40);
    				}
    			}break;
    			case cmdf_read5://读工艺参数
        		{
    				if((h_cmd.buf[h_cmd.exe_p].da[0]>499)&&(h_cmd.buf[h_cmd.exe_p].da[0]<899))
    				{
    					testFlag=1;
    					r_gy=((h_cmd.buf[h_cmd.exe_p].da[0]-500)/20)+1;  //工艺
    					rallgyFlag=0;
    					os_send_signal(READ_GY);							
    				}
    				if(h_cmd.buf[h_cmd.exe_p].da[0]==1000)
    				{
    					rallgyFlag=1;
    					testFlag=1;
    					os_send_signal(READ_GY);			
    				}
    			}break;
    			default:break;
    		}
    	}
    	else if(h_cmd.buf[h_cmd.exe_p].a>=sun_addr&&h_cmd.buf[h_cmd.exe_p].a<=down_tray_addr)//是电机地址
    	{						
    		switch(h_cmd.buf[h_cmd.exe_p].f)  //功能地址	
    		{
    			case cmdf_read: //读参数
        		{
    				motorparameter[0]=0x02;
    				temp1[0]=h_cmd.buf[h_cmd.exe_p].a;temp1[1]=0;
    				address=atoi(temp1);
    				motorparameter[1]=address;
    				motorparameter[2]=0x86;motorparameter[3]=0x31;motorparameter[4]=0x00;
    				motorparameter[5]=h_cmd.buf[h_cmd.exe_p].da[0]>>8;
    				motorparameter[6]=h_cmd.buf[h_cmd.exe_p].da[0];
    				motorparameter[7]=0x00;motorparameter[8]=0x00;motorparameter[9]=0x00;motorparameter[10]=0x00;
    				motorparameter[11]=HexBcc(motorparameter, 11);
    				c_s=1;
    			}break;
    			case cmdf_write://写参数
        		{
    				if(h_cmd.buf[h_cmd.exe_p].da[0]==0) //写速度
    				{
    					switch(h_cmd.buf[h_cmd.exe_p].a)
    					{
    						case sun_addr:
    						{
    							switch(h_cmd.buf[h_cmd.exe_p].da[1])
    							{
    								case 0:
    								{
    									SetMotorSpeed(&sun, 0x00,0,1, time_space);    
    								}break;
    								case 1:
    								{
    									SetMotorSpeed(&sun, 0x02,0, h_cmd.buf[h_cmd.exe_p].da[3],time_space);  
    								}break;
    								case 2:
    								{
    									SetMotorSpeed(&sun, 0x06,h_cmd.buf[h_cmd.exe_p].da[2], h_cmd.buf[h_cmd.exe_p].da[3], time_space);  
    								}break;
    							}
    						}break;
    						case radula_addr:
    						{
    							switch(h_cmd.buf[h_cmd.exe_p].da[1])
    							{
    								case 0:
    								{
    									SetMotorSpeed(&gear, 0x00,0, 1, time_space);    
    								}break;
    								case 1:
    								{
    									SetMotorSpeed(&gear, 0x02,0, h_cmd.buf[h_cmd.exe_p].da[3],time_space);  
    								}break;
    								case 2:
    								{
    									SetMotorSpeed(&gear, 0x06,h_cmd.buf[h_cmd.exe_p].da[2], h_cmd.buf[h_cmd.exe_p].da[3], time_space);  
    								}break;
    							} 
    						}break;
    						case up_tray_addr:
    						{
    							switch(h_cmd.buf[h_cmd.exe_p].da[1])
    							{
    								case 0:
    								{
    									SetMotorSpeed(&up, 0x00,0, 1, time_space);    
    								}break;
    								case 1:
    								{
    									SetMotorSpeed(&up, 0x02,0, h_cmd.buf[h_cmd.exe_p].da[3], time_space);  
    								}break;
    								case 2:
    								{
    									SetMotorSpeed(&up, 0x06,h_cmd.buf[h_cmd.exe_p].da[2], h_cmd.buf[h_cmd.exe_p].da[3],time_space);  
    								}break;
    							} 
    						}break;
    						case down_tray_addr:
    						{
    							switch(h_cmd.buf[h_cmd.exe_p].da[1])
    							{
    								case 0:
    								{
    									SetMotorSpeed(&down, 0x00,0, 1, time_space);    
    								}break;
    								case 1:
    								{
    									SetMotorSpeed(&down, 0x02,0, h_cmd.buf[h_cmd.exe_p].da[3],time_space);  
    								}break;
    								case 2:
    								{
    									SetMotorSpeed(&down, 0x06,h_cmd.buf[h_cmd.exe_p].da[2], h_cmd.buf[h_cmd.exe_p].da[3], time_space);  
    								}break;
    							} 
    						}break; 
    					}  
    				}
    				else
    				{
    					motorparameter[0]=0x02;
    					temp1[0]=h_cmd.buf[h_cmd.exe_p].a;temp1[1]=0;
    					address=atoi(temp1);
    					motorparameter[1]=address;
    					motorparameter[2]=0x86;motorparameter[3]=0x32;motorparameter[4]=0x00;
    					motorparameter[5]=h_cmd.buf[h_cmd.exe_p].da[0]>>8;
    					motorparameter[6]=h_cmd.buf[h_cmd.exe_p].da[0];
    					motorparameter[7]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
    					motorparameter[8]=h_cmd.buf[h_cmd.exe_p].da[1];
    					motorparameter[9]=h_cmd.buf[h_cmd.exe_p].da[2]>>8;
    					motorparameter[10]=h_cmd.buf[h_cmd.exe_p].da[2];
    					motorparameter[11]=HexBcc(motorparameter, 11);
    					c_s=1;
    				}
    			}break;
    			default:break;
            }
        }
    }
    h_cmd.cont--;
    h_cmd.exe_p++;
    h_cmd.exe_p=h_cmd.exe_p&3;    
}

⌨️ 快捷键说明

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