Вопросы начинающих PIC ASM

Поклонники продукции Microchip Technology Inc тусуются тут.
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Попытка скомпилировать gpasm

Код: Выделить всё

 $ gpasm -i bob51-pos-starsh-bit.asm 
bob51-pos-starsh-bit.asm:40:Warning[231] Found lower case match for include filename.
bob51-pos-starsh-bit.asm:59:Error[149]   Directive only allowed when generating an object file: "UDATA_SHR"
bob51-pos-starsh-bit.asm:80:Error[149]   Directive only allowed when generating an object file: "CODE"
bob51-pos-starsh-bit.asm:87:Error[149]   Directive only allowed when generating an object file: "CODE"
bob51-pos-starsh-bit.asm:97:Error[149]   Directive only allowed when generating an object file: "CODE"
bob51-pos-starsh-bit.asm:104:Error[149]   Directive only allowed when generating an object file: "CODE"
bob51-pos-starsh-bit.asm:107:Message[1302] RAM Bank undefined in this chunk of code. Ensure that bank bits are correct. Assuming bank 0 from now on.
bob51-pos-starsh-bit.asm:121:Error[149]   Directive only allowed when generating an object file: "CODE"
Error[181]   Error generating hex file.
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопросы начинающих PIC ASM

Сообщение BOB51 »

[uquote="Родэрик",url="/forum/viewtopic.php?p=4597226#p4597226"]ну так и в чем же суть ...
если, скажем, входное значение 0х81, что будет на выходе ?
или, например, на входе 0хС0 ?[/uquote]
0x81 выдаст 0x01
0xC0 - 0x40
а,вот для чего та задача Х/З...
Я просто очередной разок потренировался...
:sleep:
Насчёт gpasm не ведаю...
Листик исходника то для мплабовского проекта - ессно 1:1 использовать может и не получится.
Тем более, что использовался режим для относительной адресации...
Будет возможность скину полный исходник проекта (пока сайт "не пускает" Вложения)
Алгоритм остаётся в любом случае - переписываем по правилам того компилятора, которым пользуемся.
8)
Реклама
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Родэрик »

по этим двум примерам я вижу лишь откидывание старшего бита ... а если на входе будет 0х77?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопросы начинающих PIC ASM

Сообщение BOB51 »

01110111 ->> 00100000
8)
Маска представляет собой "бегущую 1", она же и конечный результат.
8)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Родэрик »

ну и как 0х20 соотносится с предделителем в option_reg, о котором вроде как речь шла раньше? или это уже другая задача?
Как всё-таки, если на словах, звучит последовательность преобразования? Допустим, обнаружился первый слева единичный бит, и что дальше?
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопросы начинающих PIC ASM

Сообщение BOB51 »

Дальше ищем следующий возможный бит с 1 и усе...
По крайней мере я так сие понял.
Позже вроде появилось дополнительное условие для добавочной перекодировки...
:dont_know:
:sleep:
Реклама
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Родэрик »

ну ладно, допустим существует следующий бит ... всё остальное получается зануляем в любом случае (включая тот старший бит)?
А если следующего так и не будет (например 0х10)?
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Ладно, хватит мучать мою задачу, а то сглазите, это совсем не то)) Уже не знаю как и объяснить.
[uquote="BOB51",url="/forum/viewtopic.php?p=4597232#p4597232"]0x81 выдаст 0x01
0xC0 - 0x40[/uquote]
81h должно быть 8h -> вес 8-го бита 256
C0h ---||---- 8h
77h ---||---- 7h -> вес 7-го бита 128
03h ---||---- 2h -> вес 2-го бита 4
И преобразование в триаду PS[2:0]
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопросы начинающих PIC ASM

Сообщение BOB51 »

А это уже как заблагорассудится табличкой перекручиваем по полученным данным.
Первичный результат
Бит0=1
1=2
2=4
3=8
4=16
5=32
6=64
7=127
Но бит 7 никогда не появится (всегда будет отброшен), если старшим битом будет нулевой - также ошибка(за ним просто уже ничего не будет. Третья ситуация - исходно данные равны 0.
Итогом всего возможны 7 указателей к табличке перекодировки.
8)
Или "снова не так".
Вопрос гаданий.
:sleep:
Последний раз редактировалось BOB51 Пн июл 01, 2024 15:01:16, всего редактировалось 1 раз.
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

А, ну может Вы другим алгоритмом придёте к PS[2:0], тогда ладно))
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Родэрик »

[uquote="yor",url="/forum/viewtopic.php?p=4597252#p4597252"]81h должно быть 8h -> вес 8-го бита 256
C0h ---||---- 8h
77h ---||---- 7h -> вес 7-го бита 128
03h ---||---- 2h -> вес 2-го бита 4
И преобразование в триаду PS[2:0][/uquote]

Ну так мой код это и делает
Возьми любое значение, помести его в "val" и посмотри что окажется в option_reg
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Поверю на слово. Возьму на заметку. Скомпилил, но работы не добился, ещё надо gpsim настраивать, возможно. Ладно, всё, отстаньте от меня, надо программу писать, а не тут с вами))
А ты сам свой фрагмент испытывал?
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Родэрик »

нет ... я его тупо в блокноте написал (как только мне показалось что я понял задачу), скопировал и сюда вставил
что там испытывать то особо ...
допустим в исходном числе 7-й бит единичный (val>127), проверив это, сразу попадаешь в конец и копируешь 07h (0b111) из reg в option_reg ... разве ты не это хотел?
если единица будет в 6-ом бите, то один раз пройдёшь через сдвиг, эта единица станет седьмой, reg уменьшится на единицу ... и в итоге в option_reg упадет 06h (0b110)
и так далее...
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Да, прошёл по нему мысленно, работает в общих чертах. И команд у тебя меньше, и циклов вдвое меньше, за один проход делается, у меня за два. Присуждаю первое место! Я на втором. Беру на заметку)) Спасибо.

Добавлено after 3 hours 26 minutes 33 seconds:
Надо было мне просто сказать, что вес позиции искомого бита умножить на 2, и понимание упрощается. Сам только додумался до этого, что это то же самое))
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Родэрик »

[uquote="yor",url="/forum/viewtopic.php?p=4597329#p4597329"]Надо было мне просто сказать...[/uquote]
- в смысле надо было чтоб кто-то тебе сказал, или ты ему?
как минимум вот здесь https://radiokot.ru/forum/viewtopic.php ... 3#p4596783 ты уже "говорил" про умножение (32*2) ...

кстати, чисто для сравнения, эта же функция на си:

Код: Выделить всё

uint8_t PS(int8_t val) {
    uint8_t reg=0x07;
        for(;(val>-1)&®reg--) val<<=1;
    return reg;
    }
и уже где-то в коде используем функцию PS:

Код: Выделить всё

 OPTION_REG=PS(REG);
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

С конечно запись компактнее, а во сколько команд оно развернётся?
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Родэрик »

вот в такое это на асме превратилось:
Спойлер

Код: Выделить всё

0x90: MOVLW 0x88
0x91: MOVLB 0x0
0x92: MOVWF val
;
0x93: MOVLW 0x7
0x94: MOVWF reg
;
0x95: GOTO 0x9B
0x96: MOVF reg, F
0x97: BTFSC STATUS, 0x2
0x98: GOTO 0x9D
0x99: LSLF val, F
0x9A: DECF reg, F
0x9B: BTFSS val, 0x7
0x9C: GOTO 0x96
;
0x9D: MOVF reg, W
0x9E: MOVLB 0x1
0x9F: MOVWF OPTION_REG
вариант без вызова функции (inline)
исполняется за 10 ... 70 тактов
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Тактов почти на порядок больше.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопросы начинающих PIC ASM

Сообщение BOB51 »

Код: Выделить всё

LSLF val, F
для "стандартных среднемладших"?
это для улучшенных или 18й только подходит...
:roll:
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Родэрик »

да, просто проект под 16f1704, поэтому 49 инструкций ... но это не столь важно в данном случае ...

Добавлено after 37 minutes 28 seconds:
вот так под 684-й:
Спойлер

Код: Выделить всё

0x75F: MOVLW 0x88
0x760: BCF STATUS, 0x5
0x761: BCF STATUS, 0x6
0x762: MOVWF val
;
0x763: MOVLW 0x7
0x764: MOVWF reg
;
0x765: GOTO 0x76C
0x766: MOVF reg, F
0x767: BTFSC STATUS, 0x2
0x768: GOTO 0x76E
0x769: BCF STATUS, 0x0
0x76A: RLF val, F
0x76B: DECF reg, F
0x76C: BTFSS val, 0x7
0x76D: GOTO 0x766
;
0x76E: MOVF reg, W
0x76F: BSF STATUS, 0x5
0x770: MOVWF OPTION_REG
ещё чуток больше тактов (15...80)
переключение банков через status, сдвиг по rlf и перед этим сброс status,c (хотя в данном случае это избыточно), а в целом тоже самое
Ответить

Вернуться в «PIC»