Оскільки попереду можуть зустрітися труднощі (помилки) повторимо зчитування значення перетворення АЦП з виведенням на РКІ з керівництва ROBOPICA Програму я наводити не буду, вона є в одній з попередніх глав, але перевірку в ISIS проведу:

Рис 5110 Повторення програми з керівництва ROBOPICA

Написавши свою програму, ми підставимо hex-файл в цю схему і повинні отримати схожі результати в плані виведеного числа

Прямий переказ програми, наведеної на початку цієї глави, на жаль, дає невтішну картинку

Рис 5111 Перша перевірка програми з SDCC Проблема, як зясувалося, виникла у функції читання:

Read_Adc()

{

ADCON0 = 0xCD / / Вибір Analog2 RC_Mode і ADON

GO = 1 / / Запуск перетворення

while (GO) / / Чекаємо, доки перетворення завершиться dat = (ADRESH * 4) + (ADRESL/64) / / 10 біт Даних ==> Adc

}

Остання операція після її зміни dat = (ADRESH < < 2) + (ADRESL/64); приносить успіх.

Рис 5112 Остаточна перевірка програми

І сама програма, яку я перевіряю, виглядає так:

#include <pic16f887h>

#include &quotlcdh&quot

#include &quotdelay_20h&quot

typedef unsigned int wrd

wrd at 0x2007 CONFIG1 = 0x2FF2

char text[4] unsigned int dat

wrdToStr(unsigned int wrd,char txt[4])

{

unsigned int tmp = 0 tmp = wrd/1000

if (tmp == 0)txt[3] = 48 else txt[3] = tmp + 48

if (tmp = 0) wrd = wrd – 1000*tmp tmp = wrd/100

if (tmp == 0) txt[2] = 48 else txt[2] = tmp + 48

if (tmp = 0) wrd = wrd – 100*tmp tmp = wrd/10

if (tmp == 0) txt[1] = 48 else txt[1] = tmp + 48

if (tmp = 0) wrd = wrd – 10*tmp txt[0] = wrd + 48

}

Read_Adc()

{

ADCON0 = 0xCD / / Вибір RA3, RC_Mode і дозвіл GO = 1 / / Запуск перетворення

while (GO) / / Чекаємо, доки перетворення завершиться dat = (ADRESH < < 2) + (ADRESL >> 6) / / 10 біт даних ==> dat

}

void main(void)

{

TRISD = 0x03 PORTD &amp= 0x03

lcd_init() pause(5000)

ANSEL = 0xFF / / PORTA ==> Аналоговий TRISA = 0xFF / / PORTA ==> вхід

while(1)

{

lcd_com(0x01) Read_Adc() wrdToStr(dat,text) lcd_dat(text[3]) lcd_dat(text[2]) lcd_dat(text[1]) lcd_dat(text[0]) DELAY_MS(500)

}

}

У програмі використані раніше створені файли, які я додаю в папку з поточним проектом Також я використовую функцію виведення на РКІ, яку створив у попередньому розділі

Буде хорошим вправою так змінити цю задачу, щоб можна було, як і в програмі керівництва до ROBOPICA, вивести перед результатом роботи АЦП рядок, яка пояснює, що за числа зявляються на дисплеї

В одному з додатків, розповідаючи про нову версію програми Flowcode, я мав намір звязати два мікроконтролера по USART Але цей компонент не працює в демо-версії, так що я відмовився від цієї ідеї Але при роботі з компілятором SDCC ви можете зіткнутися з необхідністю самостійно створювати необхідні функції для роботи з цим модулем

Джерело: Гололобов ВН, – Самовчитель гри на паяльнику (Про електроніці для школярів і не тільки), – Москва 2012