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

📄 addc2.5.c

📁 pic16f上12864液晶显示
💻 C
字号:
//程序实现A/D转换功能,A/D采用中断方式。该程序通过单片机的RA2模拟通道送入一直流电压,
//当送入的直流电压大于2.5V时,与PORTD口相连的8个发光二极管闪动,当直流电压恢复到
//2.5V以下时,发光二极管停止闪动,且只有低四个发光。

#include	"pic18.h"
#define  u8  unsigned char
#define  u16 unsigned int
union		adres
{
	int		y1;
	unsigned  char  adre[2];
}adresult;					//定义一个共用体,用于存放A/D转换的结果

unsigned   char	i;
unsigned   int	j;
unsigned   int	adress,test,temp;
u16 flag=1;
//unsigned int al=0xF0;
			
//unsigned int ah=0x02;

//void	InterruptHandlerHigh(void);

//系统各I/O口初始化子程序
void	initial()
{
	TRISD=0X00;			//D口为输出
	i=0x00;
}

	
	
//A/D转化初始化子程序
void	adinitial1()
{
	INTCON=0X00;		//禁止总中断和外围中断
	ADCON0=0x51;		//选择A/D通道为RA2,打开A/D转换器ADCON0 
		     			//在工作状态,且使A/D转换时钟为8tosc
	ADCON1=0X80;		//转换结果右移,及ADRESH寄存器的高6位为"0"
	                 		//且把RA2口设置为模拟量输入方式
	ADIF=0;		//清除A/D转换标志
	ADIE=1;		//A/D转换中断允许
	PEIE=1;		//外围中断允许
	ADIP=1;		//B口变位中断高优先级
	IPEN=1;		//使能中断优先级
	PORTA=PORTA|0X06;		//设置RA2为输入方式
	//PORTA=PORTA|0X06;//RA1,RA2输入
}

//延时子程序
void	delay()
{
	for(j=5535;--j;)	continue;
}

//报警子程序
void	alarm1()
{
	//i=i^0xFF;					//通过异或方式每次把i的各位值取反	
	//PORTD=i;	//D口输出i的值
 	PORTD=0X08;
	delay();
}
void	alarm2()
{
	//i=i^0xFF;					//通过异或方式每次把i的各位值取反	
	//PORTD=i;	//D口输出i的值
 	PORTD=0X04;
	delay();
}
//高优先级中断向量
void interrupt HI_ISR()//#pragma code InterruptVectorHigh=0x08
//void	InterruptVectorHigh (void)
{
  //_asm

   	ADIF=0;			//清除中断标志
	adresult.adre[0]=ADRESL;
	adresult.adre[1]=ADRESH;		//读取并存储A/D转换结果,A/D转换的结果通过共
	adresult.y1=adresult.adre[0]+adresult.adre[1]<<8;
	//adresult.y1=al+(ah<<8);
	adress=(adresult.y1*50)>>10;
	temp=adress;
	adress=(((temp/10)<<4)&0xf0)+(adress%10);
	                                  //有太多的问题!!!
				//用体的形式放入了变量y1中 
	 
	if(adresult.y1>0x200)
	{	flag=flag&0x01;
		if(flag==1) 
		{	alarm2();
			ADCON0=0X49;//启动通道1					//如果输入的模拟量大于2.5V(对应数字量
		}
		else	
		{	alarm1();
			ADCON0=0X51;		
		}	//启动通道2					//0X200h),则调用报警子程序
		delay();					//调用延时子程序,使电压检测不要过于频繁
	}
	else	PORTD=0XF0	;		//如果输入的模拟量小于2.5V,则与D口相连的
	flag++;	
delay();
					//8个发光二极管的低4个发亮,表示系统正常
	ADCON0=ADCON0|0x04;			//启动下一次A/D转换
	
  //_endasm
}

//高优先级中断服务程序
//#pragma code
//#pragma interrupt InterruptHandlerHigh
//void	InHand ()
//{

//}  

//主程序
main()
{
	adinitial1();					//A/D转换初始化
	initial();					//系统各I/O口初始化	
	GIE=1;			//总中断允许
	ADCON0=ADCON0|0x04;			//启动A/D转换
	while(1)
	{
		;
	}						//等待中断,在中断中循环检测外部电压
}

⌨️ 快捷键说明

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