Свежие обсуждения
Микроконтроллеры

Ликбез по С для микроконтроллеров PIC

1 27 64

раскидать восьмибитное число по регистрам - сотни , десятки , еденицы

С ЯВУ понятно. А не подскажите аналогичный алгоритм на ASMе. Допустим в регистре есть число 59 (десятичное), как наименее гиморно распилить его на два - в одном 5, в другом 9?

 

math
clrf temp_f
clrf edenici
clrf desatki
clrf sotni
clrf temp_d
movfw temp_e
movwf temp_f
movlw .100
subwf temp_f
btfss STATUS,C
goto $+5
movlw .1
addwf sotni
movlw .100
goto $-6
movfw sotni
call table
movwf temp_d
movfw temp_e
movwf temp_f
movfw temp_d
subwf temp_f
movfw temp_f
movwf temp_d
movlw .10
subwf temp_f
btfss STATUS,C
goto $+5
movlw .1
addwf desatki
movlw .10
goto $-6
movfw desatki
call table1
subwf temp_d
movfw temp_d
movwf edenici
return
table
addwf PCL
retlw .0
retlw .100
retlw .200
table1
addwf PCL
retlw .0
retlw .10
retlw .20
retlw .30
retlw .40
retlw .50
retlw .60

держите сударь. прога написана ночью..... когда у мну уже глаза слипались и я почти спал, так что не знаю как она работает..)))
знаю одно чтобы ее использовать, прежде нужно записать нужное число в temp_e. и еще кое что она будет вылетать ели таблица окажется между разными страницами в памяти. так что следите.

 

а так же ответьте наконец то!!!!!!! на 2!!!! моих самых длинных поста на предыдущей странице.И Allex дайте плиз свою аську а то я тут весь форум зас№у вопросами)))

 

Allex: А не подскажите аналогичный алгоритм на ASMе
Преобразование двоичных чисел в двоично-десятичные
Всё до мелочей рассмотренно здесь:
http://ikarab.narod.ru/Kea_36.html
а лучше идите в ветку Ликбеза на АСМе
http://pro-radio.ru/controllers/2108-1/

 

Кошмар ....
Господин electric .
Вдумайтесь в этот код может поймете что нибудь... и не будет бессоных ночей....

Взято здесь http://www.remexpert.com/forum/viewtopic.php?t=1285

Очень часто надо сделать преобразование int-char.
Это я подсмотрел у AVRа которого чаще всего можно найти на сахаре и телесистемах.

Это свернутая версия atoi С стандарта ANSI но в отличие от оригинала работает быстрее.
Вызываш itoa2(5999) результат будет в asc[5]

Код:

unsigned char asc[5];

void itoa2(unsigned int binval)
{
int step[]={10000,1000,100,10,1};
unsigned int temp,val;
unsigned char i,atemp;

val=binval;

for (i=0; i<5; i++)
{
temp=step[i];
atemp='0';
while(val >= temp)
{
atemp++;
val-=temp;
}
asc[i]=atemp;
}
}

 

Ну и естесно на двухзначное число...

unsigned char asc[2];

void itoa2(unsigned int binval)
{
int step[]={10,1};
unsigned int temp,val;
unsigned char i,atemp;

val=binval;

for (i=0; i<2; i++)
{
temp=step[i];
atemp='0';
while(val >= temp)
{
atemp++;
val-=temp;
}
asc[i]=atemp;
}
}

 

dosikus
Да ну, некрасиво. Особенно для двухзначного числа. То же самое можно в две строчки сделать:


void itoa2(unsigned char x) {
for (asc[0] = '0'; x >= 10; x -= 10) ++asc[0];
asc[1] = '0' + x;
}

Да и глобальная переменная asc[2] тоже не подарок.

 

caddr: Да ну, некрасиво. Особенно для двухзначного числа. То же самое можно в две строчки сделать:

Ну вот , дело сдвинулось , а то килограммы кода выкладывают .

 

Поставил ССS-PICC 4.58 , появлялась какая-то ошибка при установке. А теперь не могу в толк взять, должен ли при компиляции в MPLABe создаваться файл с расширением *.asm

 

Flop: должен ли при компиляции в MPLABe создаваться файл с расширением *.asm
нет. В файле .lst кусками есть асм.
а версия точно 58я? Я думал, что 38я последняя и в обменник сбросил.

А у меня после компиляции в файле статистики есть строчка:
Stack used: 8 worst case (out of 7 total available)
переполнение стека? Програма, вроди, работает нормально. МК PIC16F877A.