Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Закрытая тема
 
Опции темы Опции просмотра
Старый 24.11.2009, 13:39   #1
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 35
Сообщений: 2,096
Вес репутации: 3340/101
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
Red face Вопросы по ASM с BSF и RES

Доброго времени суток, уважаемые!

Понимаю, что по рангу мне не очень положено сюда писать топик - вроде бы вырос уже... но возникла парочка на первый взгляд глупых вопросов по асьму. На асьме кодил совсем чуть-чуть, и вот появилась теперь задачка именно на асьме, для решения которой не хватает знаний. Сразу скажу, MPASM.HELP уже глядел. Вот, собственно, сами вопросы.

1. Есть переменная, которая содержит адрес устанавливаемого бита в байте. Конструкция вида
Код:
bit_num equ 5        ; номер устанавливаемого бита
 
bsf PORTC, bit_num   ; попытка установить бит
счастья не принесла. Видимо, в качестве второго аргумента нельзя ставить переменную. Пришлось решать всё циклом с перебором А хотелось бы узнать, как это делается на самом деле.

2. Есть переменная, хранимая в ram и состоящая из 8 байт. Хотелось бы иметь доступ к каждому из байтов переменной. Правильно ли я это делаю таким образом?
Код:
CHAN    res 8             ; объявление переменной из 8 байт
ADDR    equ 3             ; номер байта для доступа
 
movff   CHAN+ADDR, PORTD  ; пересылка в PORTD третьего байта из восьми
Слишком сильно прошу не пинать Спасибо всем, кто ответит!
Romantic вне форума  
Старый 24.11.2009, 14:02   #2
Контур
Senior Member
 
Регистрация: 28.02.2009
Возраст: 58
Сообщений: 217
Вес репутации: 210/46
Контур has a spectacular aura aboutКонтур has a spectacular aura aboutКонтур has a spectacular aura about
По умолчанию Re: Вопросы по ASM с BSF и RES

К портам команды bsf и bcf лучше не применять.
movff - что это за команда?
Если в хотите перекинуть данные из регистра А в регистр В, вам сначала нужно перенести данные из регистра А в аккумулятор, а потом из аккумулятора в регистр В,
Контур вне форума  
Старый 24.11.2009, 14:16   #3
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 35
Сообщений: 2,096
Вес репутации: 3340/101
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от Контур Посмотреть сообщение
К портам команды bsf и bcf лучше не применять.
movff - что это за команда?
Если в хотите перекинуть данные из регистра А в регистр В, вам сначала нужно перенести данные из регистра А в аккумулятор, а потом из аккумулятора в регистр В,
Уважаемый, не очень понятно, почему не стоит применять bsf/bcf к портам? Есть какие-то объяснения?
Про перемещение данных из регистра в регистр - есть двухтактовая команда формата
Код:
movff    fs, fd
fs - регистр источник, fd - регистр приёмник. Да, забыл сказать, мне под 18е пики писать надо. Может, у 16х нет прямой пересылки, если Вы имеете в виду 16е?
Жаль, что на свои непосредственные вопросы ответов я не получил...
Romantic вне форума  
Старый 24.11.2009, 14:22   #4
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 44
Сообщений: 2,610
Вес репутации: 2570/100
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от Romantic Посмотреть сообщение
1. Есть переменная, которая содержит адрес устанавливаемого бита в байте. Конструкция вида
Код:
bit_num equ 5        ; номер устанавливаемого бита
 
bsf PORTC, bit_num   ; попытка установить бит
счастья не принесла. Видимо, в качестве второго аргумента нельзя ставить переменную. Пришлось решать всё циклом с перебором А хотелось бы узнать, как это делается на самом деле.
На самом деле, каждый делает как считает нужным
Трудно сказать оптимальное решение, по одному фрагменту. Нужен ещё кусок, который присваивает номер бита. Для команды bsf номер бита разумеется не МОЖЕТ быть переменная.


Цитата:
2. Есть переменная, хранимая в ram и состоящая из 8 байт. Хотелось бы иметь доступ к каждому из байтов переменной. Правильно ли я это делаю таким образом?
Код:
CHAN    res 8             ; объявление переменной из 8 байт
ADDR    equ 3             ; номер байта для доступа
 
movff   CHAN+ADDR, PORTD  ; пересылка в PORTD третьего байта из восьми
Слишком сильно прошу не пинать Спасибо всем, кто ответит!
Восьмибайтовая переменная, что за экзотика? Может создать массив из восьми байт и мозг не... мучить?
fantom вне форума  
Старый 24.11.2009, 14:25   #5
igor_tgru
Senior Member
 
Аватар для igor_tgru
 
Регистрация: 25.02.2007
Возраст: 47
Сообщений: 699
Вес репутации: 1475/69
igor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud of
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от Romantic Посмотреть сообщение
Понимаю, что по рангу мне не очень положено сюда писать топик - вроде бы вырос уже... но возникла парочка на первый взгляд глупых вопросов по асьму.
Сама скромность ..... корона не жмет

Цитата:
Сообщение от Romantic Посмотреть сообщение
Уважаемый, не очень понятно, почему не стоит применять bsf/bcf к портам? Есть какие-то объяснения?
Про чтение-модификация-запись что нибуть читали ? если нет то весьма рекомендую .... заодно станет понятно зачем начиная с 18ой серии пиков ввели регистр LAT
igor_tgru вне форума  
Старый 24.11.2009, 14:26   #6
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 35
Сообщений: 2,096
Вес репутации: 3340/101
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от fantom Посмотреть сообщение
На самом деле, каждый делает как считает нужным
Трудно сказать оптимальное решение, по одному фрагменту. Нужен ещё кусок, который присваивает номер бита. Для команды bsf номер бита разумеется не МОЖЕТ быть переменная.
Тут интересует сама возможность/невозможность сделать так. Или "заменитель" этих действий. Такой, чтобы покороче.
Цитата:
Сообщение от fantom Посмотреть сообщение
Восьмибайтовая переменная, что за экзотика? Может создать массив из восьми байт и мозг не... мучить?
Ну, мы же не на Си пишем! Сомнительно мне, чтобы можно в асьме сделать массив в ram и получить доступ по индексу... отсюда и изврат-с.
Romantic вне форума  
Старый 24.11.2009, 14:28   #7
Контур
Senior Member
 
Регистрация: 28.02.2009
Возраст: 58
Сообщений: 217
Вес репутации: 210/46
Контур has a spectacular aura aboutКонтур has a spectacular aura aboutКонтур has a spectacular aura about
По умолчанию Re: Вопросы по ASM с BSF и RES

По поводу 18-х пиков я не специалист.
Команды bsf/bcf в 16-х пиках работают по принципу чтение-модификация-запись. Так вот, при некоторых условиях из порта читается не совсем то, что нужно.
Контур вне форума  
Старый 24.11.2009, 14:31   #8
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 35
Сообщений: 2,096
Вес репутации: 3340/101
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от igor_tgru Посмотреть сообщение
Сама скромность ..... корона не жмет

Про чтение-модификация-запись что нибуть читали ? если нет то весьма рекомендую .... заодно станет понятно зачем начиная с 18ой серии пиков ввели регистр LAT
Насчёт первого Вашего высказывания... Вы не поняли сути моего пассажа. Я пишу серьёзно на Си, уже давно не неопытный студент, поэтому в этом разделе как правило отвечаю, а не спрашиваю. Это раз.
По поводу LAT скажу честно, мне нужно написать прогамму, которая бы смотрелась правильно, работать ей вовсе не обязательно . Про "чтение-модификация-запись" и разницу между LAT/PORT я знаю. Тут не суть к чему применяется операция, а важна сама возможность её применения. Надеюсь, найду понимание.
Romantic вне форума  
Старый 24.11.2009, 14:41   #9
Machine slave
Senior Member
 
Аватар для Machine slave
 
Регистрация: 18.01.2008
Возраст: 37
Сообщений: 4,264
Вес репутации: 2731/115
Machine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от Romantic Посмотреть сообщение
Доброго времени суток, уважаемые!

Понимаю, что по рангу мне не очень положено сюда писать топик - вроде бы вырос уже... но возникла парочка на первый взгляд глупых вопросов по асьму. На асьме кодил совсем чуть-чуть, и вот появилась теперь задачка именно на асьме, для решения которой не хватает знаний. Сразу скажу, MPASM.HELP уже глядел. Вот, собственно, сами вопросы.

1. Есть переменная, которая содержит адрес устанавливаемого бита в байте. Конструкция вида
Код:
bit_num equ 5        ; номер устанавливаемого бита
 
bsf PORTC, bit_num   ; попытка установить бит
счастья не принесла. Видимо, в качестве второго аргумента нельзя ставить переменную. Пришлось решать всё циклом с перебором А хотелось бы узнать, как это делается на самом деле.

2. Есть переменная, хранимая в ram и состоящая из 8 байт. Хотелось бы иметь доступ к каждому из байтов переменной. Правильно ли я это делаю таким образом?
Код:
CHAN    res 8             ; объявление переменной из 8 байт
ADDR    equ 3             ; номер байта для доступа
 
movff   CHAN+ADDR, PORTD  ; пересылка в PORTD третьего байта из восьми
Слишком сильно прошу не пинать Спасибо всем, кто ответит!
Запомните простое правило: запись LATx, чтение PORTx.

1.
Код:
bsf PORTC, bit_num это все равно что bsf PORTC,5,0 или 1)
Первый операнд это адрес, второй операнд это номер бита, а не значение переменной, и по идее третий операнд это тип доступа ACCESS или используя регистр выбора банка BSR.
Вам надо использовать типа:
bit_num предварительно загружена нужным значением
Код:
movf bit_num,W,0
movwf LATC,0
2. C таким же успехом можно было написать
Код:
movff   CHAN+3, LATD
Мне кажется удобнее использовать косвенную адресацию через указатель (указатель в FSRx, доступ через INDFx, PLUSWx, POSTINCx, PREINCx и тд) и выбирать номер байта непосредственно в программе.
Типа:
Код:
lfsr FSR0,CHAN
movlw 0x03
movff PLUSW0,LATD

Последний раз редактировалось Machine slave; 24.11.2009 в 14:48.
Machine slave вне форума  
Старый 24.11.2009, 14:52   #10
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 35
Сообщений: 2,096
Вес репутации: 3340/101
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от Machine slave Посмотреть сообщение
1.
Код:
bsf PORTC, bit_num это все равно что bsf PORTC,5,0 или 1)
Это и бабушке понятно, что, записывая цифровые константы, всё будет работать. Меня интересует именно возможность использования адресации бита через переменную. Это ВОЗМОЖНО?

Цитата:
Сообщение от Machine slave Посмотреть сообщение
Вам надо использовать типа:
bit_num предварительно загружена нужным значением
Код:
movf bit_num,W,0
movwf LATC,0
Тут не понял... как это работает? Загрузили номер бита в аккумулятор, потом переместили номер бита в регистр... это же совсем не то! Или я не понял?

Цитата:
Сообщение от Machine slave Посмотреть сообщение
2. C таким же успехом можно было написать
Код:
movff   CHAN+3, LATD
Ей Богу, это я мог прочитать и в Instruction set. Поверьте, эти таблички я УЖЕ прочитал. И даже кое-что написал работающее. Не нужно думать, что я страдаю даунизмом. Мне просто непонятны некоторые моменты.

Цитата:
Сообщение от Machine slave Посмотреть сообщение
Мне кажется удобнее использовать косвенную адресацию через указатель (указатель в FSRx, доступ через INDFx) и выбирать номер байта непосредственно в программе.
Типа:
Код:
lfsr FSR0,CHAN
movlw 0x03
movff PLUSW0,LATD
Не могли бы Вы поподробнее расписать, как создать переменную/массив правильно и как дальше адресоваться к конкретному байту в переменной/массиве? Вот это меня интересует.

Спасибо за ответ!
Romantic вне форума  
Старый 24.11.2009, 14:54   #11
igor_tgru
Senior Member
 
Аватар для igor_tgru
 
Регистрация: 25.02.2007
Возраст: 47
Сообщений: 699
Вес репутации: 1475/69
igor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud of
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от Romantic Посмотреть сообщение
Насчёт первого Вашего высказывания... Вы не поняли сути моего пассажа. Я пишу серьёзно на Си, уже давно не неопытный студент, поэтому в этом разделе как правило отвечаю, а не спрашиваю. Это раз.
Ну вот как раз по поводу скромности и если Вы непоняли о чем я то проехали .... ибо оно к топику отношения неимеет

Цитата:
Сообщение от Romantic Посмотреть сообщение
По поводу LAT скажу честно, мне нужно написать прогамму, которая бы смотрелась правильно, работать ей вовсе не обязательно . Про "чтение-модификация-запись" и разницу между LAT/PORT я знаю. Тут не суть к чему применяется операция, а важна сама возможность её применения. Надеюсь, найду понимание.
Мне сложно представить программу которая смотрелось бы правильно но неработала . Если бы было четкое представление о RMW то врядли возник вопрос о применении BSF/BCF к PORT причем на 18ых пиках . Чисто принципиально эти команды можно применять ко всем регистрам и естественно в команде операнд константа и даже неконстанта а это разные команды с разными опкодами (о чем кстати дш ничуть неумалчивает ) .
igor_tgru вне форума  
Старый 24.11.2009, 15:00   #12
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 35
Сообщений: 2,096
Вес репутации: 3340/101
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от igor_tgru Посмотреть сообщение
Мне сложно представить программу которая смотрелось бы правильно но неработала .
Поверьте, такие бывают. Именно в разделе "FAQ и вопросы от СТУДЕНТОВ" такие и бывают. Собственно, я пытаюсь помочь студенту, от которого препод требует асьм. Программу даже ассемблировать не понадобится. Главное - чтобы на бумажке прослеживалась логика и хотя бы минимальное знание асьма.

Цитата:
Сообщение от igor_tgru Посмотреть сообщение
Если бы было четкое представление о RMW то врядли возник вопрос о применении BSF/BCF к PORT причем на 18ых пиках .
Да что Вы привязались к портам???? Сказано же, мне без разницы, порт или просто регистр. Важна возможность. Если аргумент bsf/bcf должен быть именно константой, то вопрос об использовании этих инстртукций отпадает. Буду думать, что здесь можно использовать.
Romantic вне форума  
Старый 24.11.2009, 15:10   #13
Machine slave
Senior Member
 
Аватар для Machine slave
 
Регистрация: 18.01.2008
Возраст: 37
Сообщений: 4,264
Вес репутации: 2731/115
Machine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от Romantic Посмотреть сообщение


1. Тут не понял... как это работает? Загрузили номер бита в аккумулятор, потом переместили номер бита в регистр... это же совсем не то! Или я не понял?

2. Не могли бы Вы поподробнее расписать, как создать переменную/массив правильно и как дальше адресоваться к конкретному байту в переменной/массиве? Вот это меня интересует.
1. Это единственный способ загрузить "переменная, которая содержит адрес(НОМЕР!) устанавливаемого бита (или нескольких битов) в байте" в регистр
Код:
movf bit_num,W,0
movwf LATC,0
или
movff bit_num,LATC
А вот как вы загрузите переменную bit_num это вам решать.

2. А что здесь непонятно то???
Код:
lfsr FSR0,CHAN <--- загрузка в FSR0, начала массива CHAN
movlw 0x03 <--- это для примера, а смещение могло быть вычисленно заранее в программе
movff PLUSW0,LATD <---- Прибавляется содержимое W к содержимому FSR0 и данные из вычисленного адреса переносятся в LATD

Последний раз редактировалось Machine slave; 24.11.2009 в 15:18.
Machine slave вне форума  
Старый 24.11.2009, 15:13   #14
igor_tgru
Senior Member
 
Аватар для igor_tgru
 
Регистрация: 25.02.2007
Возраст: 47
Сообщений: 699
Вес репутации: 1475/69
igor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud of
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от Romantic Посмотреть сообщение
Если аргумент bsf/bcf должен быть именно константой, то вопрос об использовании этих инстртукций отпадает. Буду думать, что здесь можно использовать.
Да не если .... а там только константа !

даташит однозначно гласит
BCF f, b, a Bit Clear f 1 1001 bbba ffff ffff None 1, 2
bbb Bit address within an 8-bit file register (0 to 7).
igor_tgru вне форума  
Старый 24.11.2009, 15:18   #15
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 35
Сообщений: 2,096
Вес репутации: 3340/101
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Уважаемый,
Цитата:
Сообщение от Machine slave Посмотреть сообщение
Код:
movf bit_num,W,0
movwf LATC,0
или
movff bit_num,LATC
насколько я понял, Ваш пример просто загружает переменную с ранее установленными битами в регистр. До этого я бы и сам мог догадаться. Осталось лишь решить, как установить биты в переменной не вручную, а в автоматическом режиме. Если угодно, хотелось бы знать, как на асьме пишется то, что на Си выглядит как
Код:
LATC |= 1 << bit_num;
Цитата:
Сообщение от Machine slave Посмотреть сообщение
2. А что здесь непонятно то???
Было бы понятно, не спрашивал бы. Если спрашиваю, значит, непонятно. Вы можете ответить на вопрос, как
- создать массив из n байтов или переменную размерностью в n байт;
- привести пример, как при помощи переменной, имеющей смысл указателя номера байта, получить доступ к конкретному байту?

Cпасибо.
Romantic вне форума  
Старый 24.11.2009, 15:27   #16
Machine slave
Senior Member
 
Аватар для Machine slave
 
Регистрация: 18.01.2008
Возраст: 37
Сообщений: 4,264
Вес репутации: 2731/115
Machine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от Romantic Посмотреть сообщение
Было бы понятно, не спрашивал бы. Если спрашиваю, значит, непонятно. Вы можете ответить на вопрос, как
- создать массив из n байтов или переменную размерностью в n байт;
- привести пример, как при помощи переменной, имеющей смысл указателя номера байта, получить доступ к конкретному байту?

Cпасибо.
Вы уже обьявили
Код:
CHAN res 8
А пример я вам привел.
В качестве "переменной, имеющей смысл указателя номера байта" выступает W.
Machine slave вне форума  
Старый 24.11.2009, 16:56   #17
Luftwaffe
Senior Member
 
Аватар для Luftwaffe
 
Регистрация: 11.10.2007
Адрес: Россия, СПб
Возраст: 41
Сообщений: 118
Вес репутации: 224/50
Luftwaffe has a spectacular aura aboutLuftwaffe has a spectacular aura aboutLuftwaffe has a spectacular aura about
Отправить сообщение для Luftwaffe с помощью ICQ
Wink Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от Romantic Посмотреть сообщение
Если угодно, хотелось бы знать, как на асьме пишется то, что на Си выглядит как
Код:
LATC |= 1 << bit_num;
способ 1: посмотреть ассемблерный листинг любимого компилятора (recommended)
способ 2: сделать самому цикл со сдвигом единички
способ 3: держать таблицу степеней двойки и читать оттуда через tblrd*
__________________
На стоянке, шасси выпущено, к взлёту готов (c)
Luftwaffe вне форума  
Старый 24.11.2009, 17:33   #18
Machine slave
Senior Member
 
Аватар для Machine slave
 
Регистрация: 18.01.2008
Возраст: 37
Сообщений: 4,264
Вес репутации: 2731/115
Machine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Цитата:
Сообщение от Romantic Посмотреть сообщение
Вы можете ответить на вопрос, как
- создать массив из n байтов или переменную размерностью в n байт;
В ACCESS RAM области:
Код:
udata_acs
CHAN res 8 ; объявление переменной из 8 байт
Не ACCESS RAM (начало c 0x60), доступ через BSR при прямой адресации. При использовании косвенной адресации BSR не учитывается:
Код:
udata
CHAN res 8 ; объявление переменной из 8 байт
Machine slave вне форума  
Старый 24.11.2009, 20:25   #19
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/89
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию По пунктам:

Цитата:
Сообщение от Romantic Посмотреть сообщение
Доброго времени суток, уважаемые!

Понимаю, что по рангу мне не очень положено сюда писать топик - вроде бы вырос уже... но возникла парочка на первый взгляд глупых вопросов по асьму. На асьме кодил совсем чуть-чуть, и вот появилась теперь задачка именно на асьме, для решения которой не хватает знаний. Сразу скажу, MPASM.HELP уже глядел. Вот, собственно, сами вопросы.

1. Есть переменная, которая содержит адрес устанавливаемого бита в байте. Конструкция вида
Код:
bit_num equ 5        ; номер устанавливаемого бита
 
bsf PORTC, bit_num   ; попытка установить бит
счастья не принесла. Видимо, в качестве второго аргумента нельзя ставить переменную. Пришлось решать всё циклом с перебором А хотелось бы узнать, как это делается на самом деле.

2. Есть переменная, хранимая в ram и состоящая из 8 байт. Хотелось бы иметь доступ к каждому из байтов переменной. Правильно ли я это делаю таким образом?
Код:
CHAN    res 8             ; объявление переменной из 8 байт
ADDR    equ 3             ; номер байта для доступа
 
movff   CHAN+ADDR, PORTD  ; пересылка в PORTD третьего байта из восьми
Слишком сильно прошу не пинать Спасибо всем, кто ответит!
1. Здесь непонятно что именно Вы хотите. Если делать то, что в примере, то здесь вроде все нормально. Если Вам нужно работать с битами, номера которых хранятся в отдельной переменной, то инструкции bsf - bcf тут не проходят. Нужно использовать инструкции and-or.
2. здесь все нормально. Стандартный прием.
Bill вне форума  
Старый 25.11.2009, 10:40   #20
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 35
Сообщений: 2,096
Вес репутации: 3340/101
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: Вопросы по ASM с BSF и RES

Всем спасибо, вопросы прояснились! Полагаю, тему можно закрыть.
Romantic вне форума  
Закрытая тема


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по PIC18-ым GANY Продукция MICROCHIP 4 25.03.2008 16:56
Переход с PIC16 на PIC18 PIONEER1988 Продукция MICROCHIP 14 18.03.2008 22:28
Есть вопросы по алгоритму работы устройства на пике. 40grad Продукция MICROCHIP 9 27.10.2007 15:55
Вопросы по MPLAB C30 SergeyKN Продукция MICROCHIP 4 08.10.2007 12:48
Пишу руководство по RS485 и есть вопросы pvl2000 Cетевые протоколы и технологии 2 16.04.2007 00:57


Часовой пояс GMT +3, время: 18:31.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot