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

📄 lesson10._c

📁 用TMS320F2808芯片
💻 _C
字号:
#include <iom88v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int

//晶振 7.3728MHZ
#define  mclk   7372800	   
// #pragma interrupt_handler uart_rx:12
#pragma interrupt_handler uart_rx:iv_USART0_RXC
uchar rdata,flag=0;
uchar Rec_Data[27];
uchar Data_Len =0,i;
uchar adcL,adcH;
uint  adresult;
void delay(uint ms)	//延时函数
{
        uint i,j;
	for(i=0;i<ms;i++)
	   {
	   for(j=0;j<1100;j++);
       }
} 

//0D 0A 3E 0D 0A 52 65 61 64 20 46 77 64 20 33 3E 0D 0A 20 39 33 31 36 37 3F 20 20
//0D 0A 3E 0D 0A 52 65 61 64 20 46 6C 6F 77 20 31 3E 0D 0A 20 35 34 2E 39 32 30 3F 20 20
void uart_init(uint baud)	//串口初始化
{

    UCSR0B=0x00; 
   UCSR0A=0x00; 		    //控制寄存器清零
   UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);   
                                                        //选择UCSRC,异步模式,禁止                        
                                                     //   校验,1位停止位,8位数据位
   baud=mclk/16/baud-1	;   //波特率最大为65K
   UBRR0L=baud; 					     	  
   UBRR0H=baud>>8; 		   //设置波特率
   UCSR0B=(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0); 
                                                       //接收、发送使能,接收中断使能
   SREG=BIT(7);	                //全局中断开放
   DDRD|=0X02;	                //配置TX为输出(很重要)

}

void adc_init(void)
{
 ADCSRA = 0x00; //disable adc
 //ADMUX = 0x46;  //选择AVCC为参考,采集电压右对齐,1110 1.1V
}
void uart_sendB(uchar data)	//发送字符
{
   while(!(UCSR0A&(BIT(UDRE0)))) ;
   UDR0=data;
   while(!(UCSR0A&(BIT(TXC0))));
   UCSR0A|=BIT(TXC0);
}
void uart_rx()			//接收字符
{
    UCSR0B&=~BIT(RXCIE0);
	rdata=UDR0;
	//flag=1;
	Data_Len++;
	UCSR0B|=BIT(RXCIE0);
}
void main()
{
    //uchar i=4;
	//uchar j='a';
    uart_init(4800);	//初始化串口

	adc_init();			//初始化ADC
	
	while(1)
	{
	
	   if(rdata==0xaa)	//开始ADC转换标志
	   {
	   	  rdata=0x00;
		  //****************************************************
		  ADMUX = 0x46;  //选择AVCC为参考,采集电压右对齐 6通道
		  delay(100);
		  ADCSRA =0x84; //0b11000100	 8分频
		  ADCSRA |=BIT(ADSC);			 //开始转换
		  
		  while(!(ADCSRA&(1<<ADIF)));
		  
		  //while(ADCSRA&(1<<ADSC)); //为1等待
		  adcL=ADCL;
		  adcH=ADCH;
		  ADCSRA |=BIT(1<<ADIF);
		  //delay(100);
		  
		  
		  ADCSRA |=BIT(ADSC);			 //开始转换第二次,第一次的不准确
		  
		  while(!(ADCSRA&(1<<ADIF)));
		  
		  //while(ADCSRA&(1<<ADSC)); //为1等待
		  adcL=ADCL;
		  adcH=ADCH;
		  ADCSRA |=BIT(1<<ADIF);
		  
		  uart_sendB(adcH);
		  uart_sendB(adcL);
		  
		  //****************************************************
		  ADMUX = 0x47;  //选择AVCC为参考,采集电压右对齐 7通道
		  delay(100);
		  ADCSRA =0x84; //0b11000100	 8分频
		  ADCSRA |=BIT(ADSC);			 //开始转换
		  
		  while(!(ADCSRA&(1<<ADIF)));
		  
		  //while(ADCSRA&(1<<ADSC)); //为1等待
		  adcL=ADCL;
		  adcH=ADCH;
		  ADCSRA |=BIT(1<<ADIF);
		  
		  //delay(100);
		  
		  ADCSRA |=BIT(ADSC);			 //开始转换
		  
		  while(!(ADCSRA&(1<<ADIF)));
		  
		  //while(ADCSRA&(1<<ADSC)); //为1等待
		  adcL=ADCL;
		  adcH=ADCH;
		  ADCSRA |=BIT(1<<ADIF);
		  //delay(100);

		  uart_sendB(adcH);
		  uart_sendB(adcL);
		 
	   }
	   
	}
	
}

⌨️ 快捷键说明

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