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

📄 uart1.c

📁 ATMEGA64读取AD7791程序
💻 C
字号:
#include<iom64v.h>
#include<macros.h>
#define fosc 16000000 //晶振4MHZ
#define baud 38400	 //波特率
#define xtal 4
#define DIN 0x80;
#define SCLK 0x40;
//#define CS 0x04;
unsigned char com;
unsigned long ad;
unsigned char vol[3];
unsigned long spi_read ( void )
{
   unsigned long addata = 0 ;
   unsigned char k ;
   //PORTA &=~CS;
   PORTA |=SCLK;
   for (k=0;k<24;k++)
    { 
	  _NOP();_NOP();_NOP();		
      PORTA &=~SCLK;						
      addata*=2;				
      if(PIND &0x02) addata++;	
      PORTA |=SCLK;		
	 		
    }
    //CS=1;
	//PORTA |=CS;
	return(addata);	
/*******************************************************************************************/
}

void spi_write( unsigned char sw )
{
   unsigned char j;
 //  CS=0;
   //PORTA &=~CS;
   PORTA |=SCLK;
   for (j=0;j<8;j++)
    {
	   _NOP();_NOP();_NOP();	
	   PORTA &=~SCLK;		  
	  // DIN = (bit)(sw&0x80);	
	   if(sw & 0x80)
	   {
	     PORTA |= DIN ;
	   }
	   else
	   {
	     PORTA &= ~DIN ;
	   }
	   sw=sw<<1;					   
	   PORTA |=SCLK;	
	  // _NOP();_NOP();_NOP();				   
	   
	}
   PORTA |= DIN ;
  // PORTA |=CS;
}
void delay_1ms(void)
	 {
	  unsigned int i;
 	  for(i=1;i<(unsigned int)(xtal*143-2);i++)
      	; 
	 }
void delay_ms(unsigned int n)
	 {
 	  unsigned int i=0;
   	  while(i<n)
   	  		{
			 delay_1ms();
			 i++;
   			}
	 }
	 
void uart0_init(void)
{
 UCSR0B = 0x00; //disable while setting baud rate
 UCSR0A = 0x00;
 UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop
 UBRR0L=(fosc/16/(baud+1))%256;
 UBRR0H=(fosc/16/(baud+1))/256;
 UCSR0B =(1<<RXEN0)|(1<<TXEN0);//RXCEN TXCEN
}

void putchar0(unsigned char c)
	{	 
     while (!(UCSR0A&(1<<UDRE0)));
	 UDR0=c;    
	}
void INT1_init(void)
{
  EIFR=0xff;
  EIMSK |=0x02;
 // EICRA |=0x08;
  DDRD &=~0x02;
} 
#pragma interrupt_handler INT1_isr:3   
void INT1_isr(void)   
{  //CLI();
   
   ad=0;
   spi_write(0x38) ;
   //_NOP();//_NOP();//_NOP();_NOP();
   ad = spi_read(); 
  // putchar0(0xff);
   //delay_ms(10);
   //_NOP();
   //ad=ad>>16;
   //putchar0(((unsigned char)ad));
   com=1;
   //_NOP();//_NOP();//_NOP();
   //_NOP();_NOP();_NOP();
  // _NOP();_NOP();_NOP();
   //SEI();
   //while((PIND &0x02)==0);
}
/***********************************AD7791*************************************************/

/*******************************************************************************************/
//function Inituart();
/*******************************************************************************************/
void delay ( unsigned int i )
{ 
	while ( --i ) ;
}


void main(void)
{

 
    CLI();
	DDRA |=0xff;
	INT1_init();
	uart0_init();					// initialize 232 uart
	
	SEI();
	//spi_write( 0x3C ) ;
	//spi_write( 0x10 ) ;
	//spi_write( 0x82 ) ;
	while(1)				
	{	
	    
		if(com)
		{
		 CLI();
		 com=0;
		 vol[1]=((unsigned char)ad);
		 vol[2]=((unsigned char)(ad>>8));
		 vol[3]=((unsigned char)(ad>>16));
		 putchar0(0xff);
		 putchar0(vol[1]);
		 putchar0(vol[2]);
		 putchar0(vol[3]);
		 SEI();
		}
		//CS = 0 ;				
        
	    //spi_write( 0x3c ) ; 

		//delay ( 50000 ) ;
		
		//putchar0('v');
		
		delay_ms(1);
		
		//if(DOUT_RDY)
		  // ad = spi_read(); 
	}	
}	
		

⌨️ 快捷键说明

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