Sannex писал(а):
если правильно понял, то РС - системный счетчик, или счетчик команд, или как он там правильно зовется...
PC- Programm Counter , по-русски действительно счетчик команд.
В данном случае rjmp PC означает прыжок на саму себя - бесконечный цикл.
Как я понял Вам нужно только отображать результат преобразования на семисегментом четырехразрядном индикаторе для этого не стоит лезть в арифметику с плавающей точкой. Напряжение вычисляется по формуле: Vin=ADC*Vref/1024
Самому было лень писать, поэтому нашел вот что
http://www.caxapa.ru/134707.html
вам нужна самая первая программа
Прокомментирую принцип:
Если представлять Vin в миливольтах, то нужно результат домножить на 1000, т. е.
Vin=ADC*Vref*1000/1024
Vin=ADC*Vref*0,9765625 тоже самое получится если
Vin=ADC*Vref*0,9765625*62536/62536
Отсюда получаем Vin=ADC*Vref*64000/65536
Операция деления на 65536 - тривиальна нужно просто отбросить два младших байта результата
(единственное, что это без округления но ошибка там получается совсем небольшая)
поскольку у нас Vref=5 В, то результат преобразования нужно домножить на 5
это можно сделать и так как вы сделали, или вот так, в этом случае нужно быть увереннным, что ADC*5 не
будет больше 65535 (но оно точно не будет, ибо чтобы это произошло нужно умножить ADC на число большее 64)
Код: Выделить всё
; r4 = 5, r17r16 = ADCH:ADCL в r4 число на которое умножаем
; в r17 и r16 старший и младший байты результата аналого-цифрового преобразования (смещение правое)
; результат в R9:r8
mul r4,r16
movw r8,r0
mul r4,r17
add r8,r0
adc r9,r1 ; результат в r9:r8
Код: Выделить всё
Вот примерный код, который будет нормировать результат к 5000 мВ (миливольт)
mul r4,r16
movw r8,r0
mul r4,r17
add r8,r0
adc r9,r1
movw r4, r8 ;кидаем результат умножения на 5 в пару r5:r4
ldi r17, high(64000)
ldi r16, low(64000)
call scale16uu
;после выполнения подпрограммы результат будет в r9:r8, его нужно преобразовать из бинарной формы
; в двоично-десятичную и вывести на индикатор
вот нашел на сайте атмела апликейшен ноут по преобразованию в двоично-десятичный код - может пригодится,
http://www.atmel.com/dyn/products/app_n ... ily_id=607
по ссылке ищете на странице AVR204, там есть и прога и описание в ПДФ может пригодится.
После выполнения преобразования в двоично-десятичную форму остается только вывести число на индикатор и поставить запятую в нужном месте, т. е. после старшего разряда, в результате получим напругу в вольтах.
Вот как-то так. Дальше сами, если будет трудно - спрашивайте, думаю вам многие здесь смогут помочь.
Уфф, уморился писАть.