хуета

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Опытный кот
Аватара пользователя
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна

Сообщение avreal »

_noise писал(а):По одному символу "вручную"

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

movlw	Symbol_a    ; коды символов определены в начале через .equ
LCD_print   ; макрос, шлёт данное из W индикатору, внутри ничего интересного
movlw	Symbol_b
LCD_print
...
- как-то тупо... или нормально?
Я работал с pic16 мало и давно (до появления AVR :-) ), кроме этого пользоваля не mpasm, а as by Alfred Arnold http://john.ccac.rwth-aachen.de:8000/as , там много хитрых приятных возможностей и была практически своя система команд на макросах. Поэтому сейчас в мелочах могу взглюкнуть.
Есть команда RETLW, осуществляющая взврат из подпрограммы с загрузкой константы в W. Вот этой командой все таблицы и делаются.
В ассемблере должна существовать директива, позволяющая задать последовательность байтов во флеше именно как последовательность этих команд, чтобы не писать

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

   retlw "H"
   retlw "e"
   retlw "e"
   retlw "l"
   retlw "o"
   retlw  0
А пользуемся этим как-то так.

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

	movlw	low(msg1)
	movwf	strptr0
	movlw	high(msg1) ; чтобы не ставить везде - старший 
	call out_msg             ; заносится в strptr0 уже в начале out_msg
	...
	movlw	low(msg2)
	movwf	strptr0
	movlw	high(msg2) ; чтобы не ставить везде - старший 
	call out_msg             ; заносится в strptr0 уже в начале out_msg

; принимает указатель на строку во флеш кода,
; младший байт адреса уже в strptr0, старший в W
out_msg:
	movwf	strptr1
out_msg_2:
	call get_strptr
	iorlw	0
	btfsc STATUS,Z
	return        ; завершающий 0, конец строки
	call out_char ; вывод одного символа из W
	incf strptr0,f
	btfsc
	incf strptr1,f
	goto out_msg_2
	
	
get_strptr:
	movfw	strptr1
	movwf	PCLATH
	movfw	strptr0
	movwf	PCL ; уходим на нужную retlw и возвращаем в out_msg символ	
	
	
	; то, чем в данном ассемблере можно сформировать последоательность
	; команд retlw 
	; хорошо, если так
msg1:
	.asciz "Hello!" ; asciz - автоматически с завершающим 0
	; сойдёт и так
msg2:
	.byte "H", "e", "l", "l", "o", "!", 0 ; а тут завершающий 0 вручную
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Контактная информация:
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»