Непонятки с программой на Assembler (PIC16F628A)

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
COOLik
Родился
Сообщения: 10
Зарегистрирован: Сб окт 12, 2013 13:54:25

Непонятки с программой на Assembler (PIC16F628A)

Сообщение COOLik »

В программировании на Assembler я новичок. Нашел готовый код программы и пытаюсь в нем разобраться. Есть пара строк, мне совсем не понятных из-за не знания синтаксиса. Загуглить, к сожалению, не удалось. Думаю, что людям, которые разбираются, ответ на этот вопрос не займет более 3 минут.
Код такой:

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

 
            cblock      20h     
Reg:3		     
random	      
            endс
и код макроса в другой части программы такой:

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

Pause3      macro       t1,t2,t3
            local       wr ; объявление локальной метки !
            movlw       t1
            movwf       Reg
            movlw       t2
            movwf       Reg+1
            movlw       t3
            movwf       Reg+2
wr          decfsz      Reg, F
            goto        wr
            decfsz      Reg+1, F
            goto        wr
            decfsz      Reg+2, F
            goto        wr
            endm
Меня интересует что означает :3 в строчке а также что означает +1 в строчке

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

movwf       Reg+1
Суммируя эти два куска кода у меня родилась мысль, что может быть строчкой Reg:3 определяются три регистра Reg, Reg+1, Reg+2, т.е. аналогично такому коду:

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

 
            cblock      20h     
Reg
Reg+1
Reg+2		     
random	      
            endс
Но не зная синтаксиса гадать бесполезно...К тому же я не уверен, что регистрам можно присваивать имена с использованием +...
Помогите, пожалуйста, кому не сложно.
Реклама
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Непонятки с программой на Assembler (PIC16F628A)

Сообщение Albert_V »

Строка
Спойлер

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

            movwf       Reg+1
означает записать число из W в регистр по адресу Reg+1, где адрес Reg = 20h. То есть, по адресу 21h.
Спойлер

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

            cblock      20h     
Reg:3           
random         
            endс
REG:3 означает "зарезервировать 3 байта" начиная с адреса 20h. Адрес регистра с названием Random = 23h.
С Уважением, Альберт (Albert_V).
Реклама
COOLik
Родился
Сообщения: 10
Зарегистрирован: Сб окт 12, 2013 13:54:25

Re: Непонятки с программой на Assembler (PIC16F628A)

Сообщение COOLik »

Ага, т.е. резервируя 3 байта мы по сути резервируем 3 адреса под 3 регистра, только обращаться к ним придется через инкриментирование адреса регистра REG
COOLik
Родился
Сообщения: 10
Зарегистрирован: Сб окт 12, 2013 13:54:25

Re: Непонятки с программой на Assembler (PIC16F628A)

Сообщение COOLik »

Спасибо, Albert_V
Последний раз редактировалось AlekseyEnergo Вс янв 11, 2015 20:19:46, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Предупредил!!
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Непонятки с программой на Assembler (PIC16F628A)

Сообщение Albert_V »

COOLik, Не думаю, что имеет смысл учиться создавать программы по этому тексту. Когда регистров будет достаточно много - очень легко допустить ошибку.
Я, обычно, делаю так (мне так удобнее):
Спойлер

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

RBASE	equ	20			; Если не PIC16F876 - перепроверить стартовый адрес.
	cblock	RBASE
;
	STATUS_TEMP
	WREG_TEMP
	FSR_TEMP
;---------------------------------------
; Регистры генератора ПСП 1
	REGNOISE1_1
	REGNOISE1_2
	REGNOISE1_3
	REGNOISE1_4
;-------
; Регистры генератора ПСП 2
	REGNOISE2_1
	REGNOISE2_2
	REGNOISE2_3
	REGNOISE2_4
;-------
; Служебный регистр
	TEMPREGNOISE
;---------------------------------------
; Служебный регистр
	CTSERV
;---------------------------------------
; Служебный регистр
	CTTIMELEDFLASH
;---------------------------------------
	CTSPEEDHOLDL
	CTSPEEDHOLDH
	CTFLASHSPEED1
	CTFLASHSPEED2
	FLASHSPEEDL
	FLASHSPEEDH
	CTSPEEDDELAYUP
	CTSPEEDDELAYDOWN
;---------------------------------------
; Битовый регистр
	BITR_0
	endc
С Уважением, Альберт (Albert_V).
Реклама
COOLik
Родился
Сообщения: 10
Зарегистрирован: Сб окт 12, 2013 13:54:25

Re: Непонятки с программой на Assembler (PIC16F628A)

Сообщение COOLik »

Albert_V, я так понимаю Вы имели ввиду, что лучше именовать каждый регистр отдельно нежели использовать резервирование и адресацию через инкриментирование?
Реклама
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Непонятки с программой на Assembler (PIC16F628A)

Сообщение Albert_V »

Для меня - ДА.
Просто, когда число регистров "переваливает" за пол-сотни и текст программы "под пару тысяч строк" - вероятность допустить ошибку в тексте программы будет очень высокая.
Резервировать память имеет смысл если надо сделать "буфер" (к примеру, для RS-232).
С Уважением, Альберт (Albert_V).
COOLik
Родился
Сообщения: 10
Зарегистрирован: Сб окт 12, 2013 13:54:25

Re: Непонятки с программой на Assembler (PIC16F628A)

Сообщение COOLik »

Albert_V, я учту это на будущее. Еще раз спасибо за помощь.
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Непонятки с программой на Assembler (PIC16F628A)

Сообщение Albert_V »

Удачи!!!
С Уважением, Альберт (Albert_V).
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Непонятки с программой на Assembler (PIC16F628A)

Сообщение otest »

CBLOCK тоже к хорошему не приведёт. Замучишся искать адрес регистра при отладке в том же Proteuse.
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Непонятки с программой на Assembler (PIC16F628A)

Сообщение Albert_V »

otest писал(а):...Замучишся искать адрес регистра при отладке в том же Proteuse.
Никогда в нём не работал (и не собираюсь). Мне достаточно MPLAB + ICD3.
С Уважением, Альберт (Albert_V).
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15573
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Непонятки с программой на Assembler (PIC16F628A)

Сообщение BOB51 »

Не надо "форсажу"!
Для начала пущай хош с абсолютной адресацией разберется человек... Вообще-то для "затравки не мешает почитать хош вот это:
http://www.microchip.ru/files/d-sheets-rus/mpasm.pdf
ну и чего с данной страницы:
http://www.microchip.ru/lit/?mid=1x0
плюс "на закусь":
http://www.pic24.ru/doku.php/osa/articl ... formatting
и
http://www.pic24.ru/doku.php/osa/articl ... out_errors
правда последняя вроде к Сишникам, но общие правила остаются.
:beer:
Ответить

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