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

📄 fjv14.c

📁 一本关于控制系统仿真的书的程序 1、文件夹1中的程序是书中的一些仿真。 2、文件2中的是最近做的预测控制、PID控制及逻辑控制的对比综合研究。 3、文件夹3中是与maltab通信的数据采集板的设
💻 C
📖 第 1 页 / 共 2 页
字号:
                }
             if (temp[0]>temp[2])
                {
                  a=temp[2];
                  temp[2]=temp[0];
                  temp[0]=a;                  
                }
             if (temp[1]>temp[2])
                 {
                   a=temp[2];
                   temp[2]=temp[1];
                   temp[1]=a;
                 }  
             outdata=temp[1];
             return outdata;   
         }         
/*******************************************************************
 函数功能:AD采集,10位精度。
 入口参数:无
 出口参数:无
 说明:
*******************************************************/
 void ADC_Start(void)
     {
     	asm("NOP");//给通道切换留一点时间。
     	asm("NOP");
     	MCUCR =(1<<SE);//开启ADC休眠模式
        asm("SLEEP");
        MCUCR =(0<<SE);//关闭ADC休眠模式,关闭SE位
           	
     }
   
/*******************************************************************
 函数功能:DA传送数据,10位精度。固定通道A。
 入口参数:dac_data8位数据。
 出口参数:无
 说明:
*******************************************************/

void DAC_5617_10(unsigned char dac_dataH,unsigned char dac_dataL,unsigned char dac_channel)
{     
     unsigned char TempL,TempH;
	 if(dac_channel==0x01)   //使用通道A。(即out1)
	    {
	     set_cs;
	     TempH=0xc0;
	     TempL=0x00;
	     TempH|=(dac_dataH<<2)|(dac_dataL>>6);
	     TempL|=(dac_dataL<<2);
	     clr_cs;
	     SPI_Transmit(TempH);
	     SPI_Transmit(TempL);
	     set_cs;
		}
	 else if (dac_channel==0x02) //使用通道B。(即out2)
	   {
	     set_cs;
	     TempH=0x40;
	     TempL=0x00;
	     TempH|=(dac_dataH<<2)|(dac_dataL>>6);
	     TempL|=(dac_dataL<<2);
	     clr_cs;
	     SPI_Transmit(TempH);
	     SPI_Transmit(TempL);
	     set_cs;
	   }
	 
	else  
	 { 
	    asm("NOP");
	  }
}
/*****************************************************************/
//初始化spi
void SPI_Transmit(unsigned char dac_data)
{	 
    unsigned char i;
	SPCR=0x58; //SPI使能?此句是不是必须的?
 	SPDR=dac_data; //送值到SPDR
	while(!SPSR&(1<<SPIF))
		;		
	 for (i=0;i<3;i++)//保留足够的发送时间!!!
       {;} 
}   
/******************************************************************
 函数功能:IO输出数据。首先确定输出数据。然后给定输出通道。
 入口参数:IO_data输出数据。IO_channel输出通道。
 出口参数:无
 说明:
*******************************************************/

void IO_out(unsigned char IO_data,unsigned char IO_channel)
{     
    
     switch (IO_channel)
       {
           case IO_PB0: //启动PB0通道
               if (IO_data==0x00)
                   {
                   	DDRB |= (1<<DDB0);
                   	PORTB &= 0b11111110;//PB0置0,其他位不变
                   }
               else if (IO_data==0x01)
                  {
                        DDRB |= (1<<DDB0);
                   	PORTB |= (1<<PB0);//PB0置1,其他位不变	
                  }
               else  
	 	 { 
	    	  asm("NOP");
	  	 }
               break;   
          case IO_PB1:  
                if (IO_data==0x00)
                   {
                   	DDRB |= (1<<DDB1);
                   	PORTB &= 0b11111101;//输出0
                   }
               else if (IO_data==0x01)
                  {
                        DDRB |= (1<<DDB1);
                   	PORTB |= (1<<PB1);//输出1	
                  }
               else  
	 	         { 
	    	      asm("NOP");
				 }
		       break; 
          case IO_PB4: 
                if (IO_data==0x00)
                   {
                   	DDRB |= (1<<DDB4);
                   	PORTB &= 0b11101111;;//输出0
                   }
               else if (IO_data==0x01)
                  {
                        DDRB |= (1<<DDB4);
                   	PORTB |= (1<<PB4);//输出1	
                  }
               else  
	 	        { 
	    	       asm("NOP");    
				 }   
		       break;  
          case IO_PD5:  
                if (IO_data==0x00)
                   {
                   	DDRD |= (1<<DDD5);
                   	PORTD &= 0b11011111;//输出0
                   }
               else if (IO_data==0x01)
                  {
                        DDRD |= (1<<DDD5);
                   	PORTD |= (1<<PD5);//输出1	
                  }
               else  
	 	         { 
	    	       asm("NOP");
				 }
		       break;  
	  case IO_PD6:  
               if (IO_data==0x00)
                   {
                   	DDRD |= (1<<DDD6);
                   	PORTD &= 0b10111111;//输出0
                   }
               else if (IO_data==0x01)
                  {
                        DDRD |= (1<<DDD6);
                   	PORTD |= (1<<PD6);//输出1	
                  }
               else  
	 	         { 
	    	       asm("NOP");
				 }
		       break;  
		   
          case IO_PD7:  //如果为00则启动CH1通道
               if (IO_data==0x00)
                   {
                   	DDRD |= (1<<DDD7);
                   	PORTD &= 0b01111111;//输出0
                   }
               else if (IO_data==0x01)
                  {
                        DDRD |= (1<<DDD7);
                   	PORTD |= (1<<PD7);//输出1	
                  }
               else  
	 	         { 
	            	  asm("NOP");
				}
		       break;  
		         	              	
       	   default:break;
       	}
	 
	
}
/*****************************************************************/
unsigned char IO_in(unsigned char IO_channel)
{
  unsigned char temp;
  temp=0;
  switch (IO_channel)
       {
           case IO_PB0: //启动PB0通道
           	{
                  DDRB &= 0b11111110;
                  PORTB |= (1<<PB0);//输入、带上拉	
                  asm("NOP");//留出读写转换的时间。
               	  temp = PINB;//读取PB0通道的值。
               	  temp = temp & 0x01;
		}
               break;   
          case IO_PB1:  
                {
                  DDRB &= 0b11111101;
                  PORTB |= (1<<PB1);//输入、带上拉	
                  asm("NOP");
                  temp = PINB;
		  temp=(temp>>1)& 0x01;//提取位值。
		                 	  
                }
		       break; 
          case IO_PB4:  
                  {
                     DDRB &= 0b11101111;
                     PORTB |= (1<<PB4);//输入、带上拉
                     asm("NOP");	
               	     temp = PINB;
		     temp=(temp>>4)& 0x01;
               	 }     
		       break;  
          case IO_PD5:  
                {
                  DDRD &= 0b11011111;
                  PORTD |= (1<<PD5);//输入、带上拉	
                  asm("NOP");
                  temp = PIND;
		  temp=(temp>>5)& 0x01;
               	 }
		       break;  
	  case IO_PD6:  
              {
                  DDRD &= 0b10111111;
                  PORTD |= (1<<PD6);//输入、带上拉	
                  asm("NOP");
                  temp = PIND;
		  temp=(temp>>6)& 0x01;
               	 }
		       break;  
          case IO_PD7:  
              {
                  DDRD &= 0b01111111;
                  PORTD |= (1<<PD7);//输入、带上拉	
                  asm("NOP");
                  temp = PIND;
		  temp=(temp>>7)& 0x01;
               	 }
		       break;  	              	
       	   default:break;
	 }
  return temp;
}  
/*******************************************************************/
//1ms延时函数
void delay_1ms(void)
{
  unsigned int i;
  for (i=0;i<150;i++)
  {
  } 
}

⌨️ 快捷键说明

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