adc_tp01.c

来自「pic16f877a AD采集」· C语言 代码 · 共 117 行

C
117
字号
//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 + =
减小字号Ctrl + -
显示快捷键?