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

📄 last.c

📁 该源码是一个MicroChip的MPLAB工程。其中last.c为源码。这个程序实现了串口通信
💻 C
📖 第 1 页 / 共 2 页
字号:
    PIR1bits.ADIF=0;                        //清AD中断标志
	TRISAbits.TRISA0=1;                     //配置管脚为输入方向
    TRISAbits.TRISA1=1;
}

/*******************************
函数名:ADread()
AD转换子程序
********************************/
void ADread()
{
	unsigned int ADdata = 0;
	PIR1bits.ADIF = 0;
//	datace[datacount++] = ADRESH;        //一个数据用两个字节表示,高位在前,低位在后
//	datace[datacount++] = ADRESL;
	
	datace[0] = ADRESH;
	datace[1] = ADRESL;
}
	


/*******************************
函数名:datatest()
测量导轨数据 11.06 
*******************************/


void datatest(void)
{	unsigned char *direction;
	unsigned char right[]="rr";     //向右测数据标志
	unsigned char left[]="ll";      // 向左测数据标志
//	unsigned char end[]="@@";        // 数据传输完标志
//	unsigned char direction[2];
    unsigned int time = 300,j=1000,i=300;
//	unsigned char num_flag = 0;         //探头在左,标志为0,在右标志为1
   	datacount = 0; 
//	DATA_flag = 1;
	ADCON0 = 0X00;                      //选择通道0
	PIR1bits.ADIF = 0;                  //读数据前清标志位
	if((PORTDbits.RD6 == 0)&&(PORTDbits.RD7 == 0))
		{ 	
			control(0);                           //控制电机左转
			closeoropen(1);                       //开电机电源
			while(PORTDbits.RD7 == 0);         //等待电机到头,RD7变为1
       		 while(i-->0);
       		 while(PORTDbits.RD7 == 0);
			closeoropen(0); 
		}
		
	if(PORTDbits.RD6 == 1)      //在右边,左转
		while(i--);
	if(PORTDbits.RD6 == 1)
		{ 
				control(0);
				direction=left;
		}
	if(PORTDbits.RD7 == 1)	    // 左边,右转
		while(i--);	
	if(PORTDbits.RD7 == 1)
		{		 
				control(1);
				direction=right;
		}
    closeoropen(1);                     //开电机电源
	
	while(PORTDbits.RD6 == 1||PORTDbits.RD7 == 1); //没离开当前传感器之前不采样	

	ADCON0bits.ADON = 1; 
    ADCON0bits.GO = 1;
 	//	while(datacount < 400)
	while(PORTDbits.RD6 == 0&&PORTDbits.RD7 == 0)
   {
	/*		TXREG = 'p';
			while(PIR1bits.TXIF == 0);      //等待串口发送完成
				for(i = 300;i > 0;i--);
	*/
			while(PIR1bits.ADIF == 0);
      			ADread();
			senddata(datace);					
       		 ADCON0bits.ADON = 0; 
  	//	 for(j=4550;j>0;j--);            //延时正好到头

		while(PORTDbits.RD6 == 1||PORTDbits.RD7 == 1)
					break;

		//	delay(2);                                     //采样延时2*300US
/*
     	if(PORTDbits.RD6 == 1||PORTDbits.RD7 == 1)
			while(i--);
		if(PORTDbits.RD6 == 1||PORTDbits.RD7 == 1)
		{	 TXREG = 'q';
			while(PIR1bits.TXIF == 0);      //等待串口发送完成
			for(j = 300;j > 0;j--);
		    break;
		}
*/
        ADCON0bits.ADON = 1;
        ADCON0bits.GO = 1;          //AD转换继续  
	
	} 

    while(PORTDbits.RD6 == 0&&PORTDbits.RD7 == 0);     // 到达某一边
 // 		 while(i-->0);
//	while(PORTDbits.RD6 == 0&&PORTDbits.RD7 == 0);
	/*
			 TXREG = 'q';
			while(PIR1bits.TXIF == 0);      //等待串口发送完成
			for(j = 300;j > 0;j--);
	*/	    
			ADCON0bits.ADON = 0;                //关AD
			closeoropen(0);         			 //关电机
			
			
			senddata(direction);
			 TXREG = 0xaa;
			while(PIR1bits.TXIF == 0);      //等待串口发送完成
			for(j = 300;j > 0;j--);
		//	senddata(end);
/*
			TXREG = 0xff;                        //数据采集完标志
			while(PIR1bits.TXIF == 0);      //等待串口发送完成
				for(j = 300;j > 0;j--);

			TXREG = 0xff;
			while(PIR1bits.TXIF == 0);      //等待串口发送完成
				for(j = 300;j > 0;j--);	
*/
  //  senddata(datace,str,400);
}


   
/******************************
函数名:batterytest()
电量测试
*******************************/
void batterytest(void)
{	
	unsigned char str[]="dl";
	unsigned int j;
   // AD_flag = 0;
    DATA_flag = 0;                     //表示此时AD转换的是电量数据
	ADCON0 = 0X04;     	               //选择通道1
	ADCON0bits.ADON = 1;               //使能AD模块,启动AD转换
    ADCON0bits.GO = 1;                     
	while(PIR1bits.ADIF == 0);
    PIR1bits.ADIF = 0;
    databattery[1]=ADRESL;
    databattery[0]=ADRESH;
//    senddata(&databattery,str,2);
		senddata(battery);
		senddata(databattery);
	//	senddata(end);
   		ADCON0bits.ADON = 0;               //关闭AD模块
		
		 TXREG = 0xaa;
		while(PIR1bits.TXIF == 0);      //等待串口发送完成
		for(j = 300;j > 0;j--);
}
	
	
/****************************
  函数名:senddata()
  串行发送数据
*****************************/
/*
void senddata(unsigned char *p,unsigned char *q,unsigned int num)
{
	int j = 0;
	TXREG = *(q++);
	for(j = 300;j > 0;j--);
	while(PIR1bits.TXIF == 0); 
	TXREG = *(q++);
	while(PIR1bits.TXIF == 0);
	for(j = 300;j > 0;j--);
	while((num--) != 0)
    {
		TXREG = *(p++);
		while(PIR1bits.TXIF == 0);      //等待串口发送完成
		for(j = 300;j > 0;j--);
	}
		TXREG = 0xff;
		while(PIR1bits.TXIF == 0);      //等待串口发送完成
		for(j = 300;j > 0;j--);	
		TXREG = 0xff;
		while(PIR1bits.TXIF == 0);      //等待串口发送完成
		for(j = 300;j > 0;j--);		
}
*/
void senddata(unsigned char *p)
{
	int j = 0;
	/*
	TXREG = '#';
	for(j = 300;j > 0;j--);
	while(PIR1bits.TXIF == 0); 
	*/
	TXREG = '#';
	while(PIR1bits.TXIF == 0);
	for(j = 300;j > 0;j--);

	TXREG = *(p++);
	while(PIR1bits.TXIF == 0);      //等待串口发送完成
	for(j = 300;j > 0;j--);
		
	TXREG = *p;
	while(PIR1bits.TXIF == 0);      //等待串口发送完成
	for(j = 300;j > 0;j--);

		
}

/**************************
函数名:main()
**************************/
void main(void)
{
	unsigned char receivedata[2]={0,0};
    unsigned char i = 0,j;
	initial();
    serialinital();
	ADinitial();
	IICinitial();
	 timer0inition();
//	INTCON = INTCON|0XC0;            //开总中断

/*
		datatest();

		TXREG = 'q';
		while(PIR1bits.TXIF == 0);      //等待串口发送完成
		for(j = 300;j > 0;j--);

	while(1)
	{
		TXREG = 'q';
		while(PIR1bits.TXIF == 0);      //等待串口发送完成
		for(j = 300;j > 0;j--);
		
//		datatest();
		
		
	}

*/


	
 	while(1)
    {
        
	
	/*	 if(PIR1bits.RCIF == 1)
			{
				PIR1bits.RCIF=0; 
				 TXREG = 'q';
		while(PIR1bits.TXIF == 0);      //等待串口发送完成
		for(j = 300;j > 0;j--);

             }
 */
	  if(PIR1bits.RCIF == 1)
		{
           
			PIR1bits.RCIF=0;  
          
			receivedata[1] = receivedata[0];
            receivedata[0] = RCREG;   
            if((receivedata[1] == 'd')&&(receivedata[0] == 'l'))      //判断接收到的请求信息类型
            	{	RCSTAbits.CREN = 0;
					batterytest();
					RCSTAbits.CREN = 1;
				}
            if((receivedata[1] == 's')&&(receivedata[0] == 'j'))
				{
					RCSTAbits.CREN = 0;

				//	PIR1bits.RCIF=0; 
				// TXREG = 'q';		
				//	while(PIR1bits.TXIF == 0);      //等待串口发送完成
				//	for(j = 300;j > 0;j--);

					datatest();
					RCSTAbits.CREN = 1;

				}
          	if((receivedata[1] == 'w')&&(receivedata[0] == 'd')) 
				{	RCSTAbits.CREN = 0;
					Testtemp();
					RCSTAbits.CREN = 1;
				}
			
			if((receivedata[1] == 'r')&&(receivedata[0] == 'r')) 

				{	RCSTAbits.CREN = 0;
					reset();
					RCSTAbits.CREN = 1;
				}
				
           
  		}

	}

} 

                                  
                                        

⌨️ 快捷键说明

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