Страница 1 из 1

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

Добавлено: Вс янв 11, 2015 14:17:46
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с
Но не зная синтаксиса гадать бесполезно...К тому же я не уверен, что регистрам можно присваивать имена с использованием +...
Помогите, пожалуйста, кому не сложно.

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

Добавлено: Вс янв 11, 2015 14:34:01
Albert_V
Строка
Спойлер

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

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

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

            cblock      20h     
Reg:3           
random         
            endс
REG:3 означает "зарезервировать 3 байта" начиная с адреса 20h. Адрес регистра с названием Random = 23h.

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

Добавлено: Вс янв 11, 2015 14:51:06
COOLik
Ага, т.е. резервируя 3 байта мы по сути резервируем 3 адреса под 3 регистра, только обращаться к ним придется через инкриментирование адреса регистра REG

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

Добавлено: Вс янв 11, 2015 14:53:06
COOLik
Спасибо, Albert_V

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

Добавлено: Вс янв 11, 2015 14:57:27
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

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

Добавлено: Вс янв 11, 2015 15:04:10
COOLik
Albert_V, я так понимаю Вы имели ввиду, что лучше именовать каждый регистр отдельно нежели использовать резервирование и адресацию через инкриментирование?

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

Добавлено: Вс янв 11, 2015 15:10:59
Albert_V
Для меня - ДА.
Просто, когда число регистров "переваливает" за пол-сотни и текст программы "под пару тысяч строк" - вероятность допустить ошибку в тексте программы будет очень высокая.
Резервировать память имеет смысл если надо сделать "буфер" (к примеру, для RS-232).

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

Добавлено: Вс янв 11, 2015 15:14:05
COOLik
Albert_V, я учту это на будущее. Еще раз спасибо за помощь.

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

Добавлено: Вс янв 11, 2015 15:14:29
Albert_V
Удачи!!!

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

Добавлено: Вс янв 11, 2015 15:27:34
otest
CBLOCK тоже к хорошему не приведёт. Замучишся искать адрес регистра при отладке в том же Proteuse.

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

Добавлено: Вс янв 11, 2015 15:42:50
Albert_V
otest писал(а):...Замучишся искать адрес регистра при отладке в том же Proteuse.
Никогда в нём не работал (и не собираюсь). Мне достаточно MPLAB + ICD3.

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

Добавлено: Пн янв 12, 2015 16:17:45
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: