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

📄 ad.c

📁 PIC单片机的AD转换程序
💻 C
字号:

/**********************AD转换的实验**************************/
/*说明:用RA3脚来采样室内温度对应的端口,当室内温度对应     */
/*      的电阻值大于5.1K(分得的电压高于2.5V)的时候进入中断*/
/*      并报警,低于2.5V时退出中断服务程序并正常进行A/D采样,*/
/*      正常采样时亮首尾两盏等,报警时亮三盏灯。            */
/************************************************************/          
#include "pic1687x.h"
#include "pic.h"
union adres
{
	int y1;
	unsigned char adre[2];
}adresult;    //定义一个共用体,用于存放A/D转换的结果

unsigned char i,j;
/*系统各I/O初始化子程序*/
void initial()
{
	//TRISD=0X00;  //E端口为输出
  TRISB=0X00;
  i=0X00;
}
/*A/D转换初始化子程序*/
void adinitial()
{
	ADCON0=0X59;  //选择A/D通道为RA3,打开A/D转换器
	              //在工作状态,且使A/D转换时钟为8Tosc  
	ADCON1=0X80;  //转换结果右移,即ADRESH寄存器的高六位为零
	              //且把RA3口设置为模拟量输入方式
	PIE1=0X00;    
	PIE2=0X00;    
	ADIE=1;       //A/D转换中断允许
	PEIE=1;       //外围中断允许
	TRISA3=1;     //设置R3为输入方式
	//PORTD=0X00;   //置4051的S0,S1,S2脚,选择室内温度作为采样对象
}
/*延时子程序*/
void delay()
{
	for (j=255;--j;)
	continue;
}
/*报警子程序*/
void alarm()
{
	i=i^0X00;  //取反,用于显示LED
	PORTB=i;   //E口输出i的值
}
/*中断服务程序*/
void interrupt adint(void)
{   asm("clrwdt");  //清除看门狗
	ADIF=0;  //清除中断标志
	adresult.adre[0]=ADRESL;
	adresult.adre[1]=ADRESH;  //读取并存储A/D转换的结果,A/D转换的结果
	                          //用共用体的形式放入了变量y1中
	
	if(adresult.y1>0X200)
	{   
		alarm();  //如果输入量大于2.5V(对应的数子量为0X200,则
		          //调用报警子程序
		delay();  //延时程序,使电压检测不要过于频繁
	}
	else
	PORTB=0X01;     //如果输入的模拟量小于2.5V,则四盏灯亮,表示
	                  //系统正常
	ADGO=1;         //启动下一次A/D转换
}
/*主程序*/
main()
{   
        
	adinitial();  //A/D初始化
	initial();    //系统各I/O口初始化
	ei();         //总中断允许
	ADGO=1;       //启动A/D转换
	while(1)
	{
		;     //等待中断,在中断中循环检测外部电压
	}
}  

/******************************END*******************************/

		
	
	



	
	 

⌨️ 快捷键说明

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