(1) Настройка последовательно порта для вывода результатов преобразования
(2) Настройка регистров АЦП
(3) Произвести преобразование
(4) Вывести результат на UART
На реальной микросхеме почему-то не работает пробовал и стандартные методы, за основу которых взяты примеры с сайтов производителей и через прерывания пробую, тоже не выдает данные на гипер терминал
Вот через прерывание:
Код
#include <ADUC814.H>
#include <stdio.h>
sbit BLINK = P3^3;
void pause (int i)
{
while ( i > 0 )
--i;
}
void ADC_int () interrupt 6
{
printf("\n%02BX%02BX\n", ADCDATAH, ADCDATAL);
return;
/*
while (ADCCON3 & 0x80);
BLINK = ~BLINK;
if(ADCDATAL != 0 || ADCDATAH != 0)
printf("We Have Some DATA!");
pause(10000);*/
}
void main (void)
{
int CHAN = 0;
// unsigned char chan_2_convert;
/*-----------------------------------------------
Configure the serial port to run at 9600 Baud.
-----------------------------------------------*/
PCON = 0x80;
PLLCON = 0x30;
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xF7;
TR1 = 1;
TI = 1;
/*-----------------------------------------------
Configure the A/D to sequentially convert each
input channel.
-----------------------------------------------*/
ADCCON1 = 0x80;
ADCCON2 = CHAN;
EA = 1;
EADC = 1;
while (1)
{
SCONV = 1;
BLINK = ~BLINK;
pause(10000);
}
}
#include <stdio.h>
sbit BLINK = P3^3;
void pause (int i)
{
while ( i > 0 )
--i;
}
void ADC_int () interrupt 6
{
printf("\n%02BX%02BX\n", ADCDATAH, ADCDATAL);
return;
/*
while (ADCCON3 & 0x80);
BLINK = ~BLINK;
if(ADCDATAL != 0 || ADCDATAH != 0)
printf("We Have Some DATA!");
pause(10000);*/
}
void main (void)
{
int CHAN = 0;
// unsigned char chan_2_convert;
/*-----------------------------------------------
Configure the serial port to run at 9600 Baud.
-----------------------------------------------*/
PCON = 0x80;
PLLCON = 0x30;
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xF7;
TR1 = 1;
TI = 1;
/*-----------------------------------------------
Configure the A/D to sequentially convert each
input channel.
-----------------------------------------------*/
ADCCON1 = 0x80;
ADCCON2 = CHAN;
EA = 1;
EADC = 1;
while (1)
{
SCONV = 1;
BLINK = ~BLINK;
pause(10000);
}
}
Вот другим способом, тут пытался подать напряжение Vref, программно:
Код
#include <ADUC814.H>
#include <stdio.h>
void pause (int i)
{
while ( i > 0 )
--i;
}
void main (void)
{
unsigned char chan_2_convert;
/*-----------------------------------------------
Configure the serial port to run at 9600 Baud.
-----------------------------------------------*/
PCON = 0x80;
PLLCON = 0x30;
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xF7;
TR1 = 1;
TI = 1;
/*-----------------------------------------------
Configure the A/D to sequentially convert each
input channel.
-----------------------------------------------*/
ADCCON1 = 0x80;
ADCCON2 = 0x1C;
while (1)
{
unsigned int conv_val;
/*-----------------------------------------------
Start a conversion and wait for it to complete.
-----------------------------------------------*/
chan_2_convert = 0;// (chan_2_convert + 1) % 6;
// ADCCON2 = (ADCCON2 & 0xF0) | chan_2_convert;
SCONV = 1;
while (ADCCON3 & 0x80);
pause(10000);
/*-----------------------------------------------
Read A/D data and print it out.
---------------------------------------------*/
conv_val = ADCDATAL | ((ADCDATAH & 0x0F) << 8);
printf ("ADC Channel %bu = 0x%4.4X\r\n", chan_2_convert, conv_val);
}
}
#include <stdio.h>
void pause (int i)
{
while ( i > 0 )
--i;
}
void main (void)
{
unsigned char chan_2_convert;
/*-----------------------------------------------
Configure the serial port to run at 9600 Baud.
-----------------------------------------------*/
PCON = 0x80;
PLLCON = 0x30;
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xF7;
TR1 = 1;
TI = 1;
/*-----------------------------------------------
Configure the A/D to sequentially convert each
input channel.
-----------------------------------------------*/
ADCCON1 = 0x80;
ADCCON2 = 0x1C;
while (1)
{
unsigned int conv_val;
/*-----------------------------------------------
Start a conversion and wait for it to complete.
-----------------------------------------------*/
chan_2_convert = 0;// (chan_2_convert + 1) % 6;
// ADCCON2 = (ADCCON2 & 0xF0) | chan_2_convert;
SCONV = 1;
while (ADCCON3 & 0x80);
pause(10000);
/*-----------------------------------------------
Read A/D data and print it out.
---------------------------------------------*/
conv_val = ADCDATAL | ((ADCDATAH & 0x0F) << 8);
printf ("ADC Channel %bu = 0x%4.4X\r\n", chan_2_convert, conv_val);
}
}
В чем может быть моя ошибка?