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

📄 test_7135.c

📁 ad7135的avr16的源程序
💻 C
字号:
//************************************************* 
//测试功能:7135的ad功能。将采集到的数据以四位由高到低发给上位机显示
//测试方法:注意:采集到的电压单位为mv
//测试结果:ok
//时钟频率:外部8m
//管脚分配:1脚(pb0)接7135的25,4脚(pb3)接7135的22
//16脚(pd2)接7135的21
//注意事项:基准电压为:1v.输入电压不大于2v
//完成时间:2009.03.22
//**************************************************

//************************************************** 
//头文件
//************************************************** 
#include <iom16v.h>
#include <macros.h>
//************************************************** 


//***************************************************** 
//全局变量定义
//*****************************************************
unsigned char N=0;//用来区别是第一次外部中断还是第二次中断
unsigned int T1OVF_NUM=0;//用来计定时器T1的溢出次数
unsigned long int T1_NUM;//T1计的总时钟的个数
unsigned int VIN;//测到的电压,单位为mv

//***************************************************** 
//函数声明
//*****************************************************
void DELAY_1MS(void);
void DELAY_NMS(unsigned int n);
void PORT_INIT(void);
void INT0_INIT(void);
void T1_INIT(void);
void T0_125K(void);
void USART_INIT(void);
void USART_TX(unsigned char data);
void DATA_DISPLAY(unsigned int data);

//***************************************************** 
//函数名称:void DELAY_1MS(void)
//函数功能:延时1ms
//注意事项:i=143*n-2
//*****************************************************
void DELAY_1MS(void)
{    
	 unsigned int i;
	 for(i=1142;i>0;i--)    
     ;
}
//***************************************************** 
//函数名称:void DELAY_NMS(void)
//函数功能:延时Nms
//注意事项:
//*****************************************************
void DELAY_NMS(unsigned int n)
{	 
	 for(;n>0;n--)
	      DELAY_1MS();
}
//***************************************************** 
//函数名称:void INT0_INIT(void)  
//函数功能:int0初始化,上升沿产生中断,使能中断
//注意事项:未开总中断
//*****************************************************
void PORT_INIT(void)
{	 
	 DDRB=0X09;
	 PORTB=0X00;
	 DDRD=0X00;
	 PORTD=0XFF;
}
	 
//********************************************************** 
//函数名称:void T0_250K(void)   
//函数功能:t0工作于CTC模式,产生250k方波
//注意事项:一分频,pb3(oc0)接7135 clk
//********************************************************** 
void T0_125K(void)
{    
	TCCR0=0X00;
	TCNT0=0X00;
	OCR0=31;
	TIMSK&=~(1<<OCIE0);
	TCCR0=0X19;
}
//***************************************************** 
//函数名称:void INT0_INIT(void)  
//函数功能:int0初始化,上升沿产生中断,使能中断
//注意事项:未开总中断
//*****************************************************
void INT0_INIT(void)
{	 
	 MCUCR|=((1<<ISC01)|(1<<ISC00));
	 GICR|=(1<<INT0);
}
//***************************************************** 
//函数名称:void INT0_INTERRUPT(void) 
//函数功能:中断处理,N+1
//注意事项: 
//*****************************************************
#pragma interrupt_handler INT0_INTERRUPT:2
void INT0_INTERRUPT(void)
{	 
	 if(!N)
	 {    
	 	  TCCR1B=0X01;//开始内部计数
		  MCUCR=0X02;//设置外部中断0下降沿产生中断
		  N++;
	 }
	 else
	 {    
	 	  TCCR1B=0X00;//定时器t1停止工作
		  CLI();//关中断,进行数据处理
		  //数据处理
		  T1_NUM=T1OVF_NUM;
		  T1_NUM=(T1_NUM*65536+TCNT1);
		  T1_NUM/=64;
		  T1_NUM-=10001;
		  VIN=T1_NUM/10;
		  DATA_DISPLAY(VIN);
		  //数据处理结束
		  T1OVF_NUM=0;
		  TCNT1=0X0000;
		  MCUCR|=((1<<ISC01)|(1<<ISC00));//设置外部上升沿中断
		  N=0;//
		  PORTB&=~(1<<0);//上位机发0x01,测量一次,停止ad
		  //SEI();先进行1次采样
	 }
}
//************************************************** 
//函数名称:void T1_INIT(void)  
//函数功能:内部定时
//注意事项,定时器未工作,定时器工作,需+TCCR1B=0X01;
//************************************************** 
void T1_INIT(void)
{	 
	 TCCR1A=0X00;
	 TCNT1=0X0000;
	 TIMSK|=(1<<TOIE1);
}
//************************************************** 
//函数名称:void T1_OVF(void)  
//函数功能:ti溢出处理
//注意事项:
//**************************************************
#pragma interrupt_handler T1_OVF:9
void T1_OVF(void)
{	 
	 T1OVF_NUM++;
}
//***************************************************** 
//函数名称:void USART_INIT(void) 
//函数功能:8M,波特率9600
//注意事项:
//*****************************************************
void USART_INIT(void)
{	 
	 UBRR=0X33;//fosc=8mhz,波特率9600
	 UCSRA=0X20;
	 UCSRC=0X86;
	 UCSRB=0X98;
}
//***************************************************** 
//函数名称:void USART_INIT(void) 
//函数功能:8M,波特率9600
//注意事项:
//*****************************************************
void USART_TX(unsigned char data)
{	 
	 UDR=data;
	 while(!(UCSRA&(1<<TXC)))
	 ;
	 DELAY_NMS(1);
}
//***************************************************** 
//函数名称:void USART_INIT(void) 
//函数功能:下位机收到0x01,则进行1次ad转换
//注意事项:
//*****************************************************
#pragma interrupt_handler usart_receive:12
void usart_receive(void)
{	 
	 unsigned char d;
	 d=UDR;
	 if(d==0x01)
	 {    
	 	  PORTB|=(1<<0);
		  SEI();
	 }
	 else
	 {    
	 	  PORTB&=~(1<<0);
		  CLI();
	 }
}
//***************************************************** 
//函数名称:void USART_INIT(void) 
//函数功能:8M,波特率9600
//注意事项:
//*****************************************************
void DATA_DISPLAY(unsigned int data)
{	 
	 unsigned char temp[4],i;
	 temp[0]=data/1000;
	 temp[1]=(data/100)%10;
	 temp[2]=(data/10)%10;
	 temp[3]=data%10;
	 for(i=0;i<4;i++)
	 {
	      USART_TX(temp[i]);
		  DELAY_NMS(1);
	 }
} 
//********************************************************** 
//主函数
//**********************************************************
void main(void)
{	 
	 CLI();
	 PORT_INIT();
	 T0_125K();
	 INT0_INIT();
	 T1_INIT();
	 USART_INIT();
	 SEI();
	 //PORTB|=(1<<0);//先不 进行ad采样,等待上位机命令
	 while(1)
	 ;
}

⌨️ 快捷键说明

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