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

📄 adc_tp01.c

📁 pic16f877a AD采集
💻 C
字号:
//AD转换
//只使用AN0通道进行AD转换
//4MHz
//中断方式

#include <pic.h>

//中间变量,缓存AD结果
unsigned char ADC1,ADC2;


void USART_initial()
{
	//串口设置
	TRISC = 0b10000000;
	PORTC = 0x00;
	TXIF = 0;
	SPBRG = 0x19;		//9600,4MHz
					//BRGH=1
	TXSTA = 0xa6;
	RCSTA = 0x80; 		
}
	
void AD_initial()
{
	//设置输入/输出方向
	TRISA = 0x01;
	PORTA = 0x00;
	//AD寄存器初始化
	ADCON1 = 0b11001110;//  Fs = Fosc/16
	ADCON0  = 0b01000000;

	ADIF = 0;//清AD中断标志
	ADIE = 1;//AD中断允许
	PEIE = 1;//外部中断允许
	GIE = 1;//全局中断使能
}



interrupt ADC_INT()
{

	ADIF = 0;//清AD中断标志位
	ADC1 = ADRESH;//存ADC高位
	ADC2 = ADRESL;//存ADC低位

	//通过串口发送AD数据
	TXREG = ADC1;
	asm("nop");	
	while(!TXIF)
		{;}	
	TXIF = 0;	
	TXREG = ADC2;
	asm("nop");	
	while(!TXIF)
		{;}	
	TXIF = 0;

//	ADGO = 1;//启动下一次中断
	ADCON0 = ADCON0 | 0b00000100;
	RC0 = !RC0;
}


//主函数
main()
{
	unsigned int DownCount;
	//关中断
	INTCON = 0x00;
	PIE1 = 0x00;
	PIR1 = 0x00;
	PIE2 = 0x00;
	PIR2 = 0x00;

	//串口初始化
	USART_initial();

	//AD初始化
	AD_initial();

	DownCount = 30000;
	while(--DownCount)
		{;}


	//开始工作标志
	TXREG = 0x55;
	asm("nop");	
	while(!TXIF)
		{;}	
	TXIF = 0;
	TXREG = 0xaa;
	asm("nop");	
	while(!TXIF)
		{;}	
	TXIF = 0;

	// 延时
	DownCount = 256;
	while(--DownCount)
		{;}

	RC0 = 1;

//	ADGO = 1;//启动AD
	ADCON0 = ADCON0 | 0b00000100;

	//等待中断
	while(1)
	{;}
	
	
}
	

⌨️ 快捷键说明

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