📄 adc_tp01.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 + -