MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

AN 526

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 AN 526
Автор: Антон ()
Дата:   10/09/2004 11:00

в этом примере по преобразованию 16разряюдного двоичного кода в двоично десятичный
получилось R0=6 R1=55 R2=35
и как же их вывести на LCD????
спасибо


 
 LCD разные бывают (-)
Автор: letopisec ()
Дата:   10/09/2004 11:02

-


 
 Ну допустим
Автор: alho ()
Дата:   10/09/2004 11:18

у тебя LCD на базе контроллера HD44780

шаг 1: преобразовать содержимое твоих регистров в ASCII символы
Входные данные: R0 R1 R2
Выходные будут: AS0 AS1 AS2 AS3 AS4

/* раскидываем твои входные значения по регистрам */

AS0 = R0;
AS1 = R1 >> 4;
AS2 = R1 & 0x0F;
AS3 = R2 >> 4;
AS4 = R2 & 0x0F;

/* переводим в ASCII коды */

AS0 += '0'; // '0' <- символ ноль !
AS1 += '0'; // '0' <- символ ноль !
AS2 += '0'; // '0' <- символ ноль !
AS3 += '0'; // '0' <- символ ноль !
AS4 += '0'; // '0' <- символ ноль !

шаг второй: выводим содержимое регистров AS0...AS4 на LCD.
Для этого нужна отдельная подпрограмма - ищи дальше.

P.S.
Конечно существует куча дополнительных альтернативных вариантов.


 
 Да ему на ассемблере надо :)
Автор: Bill ()
Дата:   10/09/2004 11:30

-


 
 При желании очень быстро перепишет!
Автор: alho ()
Дата:   10/09/2004 11:40

Когда я был маленьким программистом маааленьких процессоров....разобрался


 
 .... и перешел на большие? :))
Автор: Bill ()
Дата:   10/09/2004 11:47

Ему срочно надо. А вообще не мешало бы разобраться.


 
 Re: .... и перешел на большие? :))
Автор: Антон ()
Дата:   10/09/2004 11:50

Да очень блин бьюсь тут как рыба))))


 
 В аську не влезло !
Автор: alho ()
Дата:   10/09/2004 11:57

R0...R2 - in
bo... b4 регистры на вывод

movf R0,w
movwf b0

movf R1,w
movwf b1
swapf b1, f
movlw 0x0F
andwf b1,f

movf R1,w
movwf b2
movlw 0x0F
andwf b2,f

movf R2,w
movwf b3
swapf b3,f
movlw 0x0F
andwf b1,f

movf R2,w
movwf b4
movlw 0x0F
andwf b4,f

b0...b4 содержат значения R0...R2
Переводим в ASCII

movlw '0'
addwf bo,f
addwf b1,f
addwf b2,f
addwf b3,f
addwf b4,f

Теперь там ascii символы

Успехов !


 
 Вот код, который работает в частотомере
Автор: Sandy ()
Дата:   11/09/2004 19:41

;-----Десятично-двоичное преобразование----

DCB call LD_ZN ;загрузить значение константы
movf FREQ_L, w ;\ определить количество
andlw b'00001111' ; | сложений
movwf COUNT2 ; | если 0 раз, то
btfsc STATUS, 2 ; | сразу перейти к
goto fr_nx ;/ следующему разряду
;
dcb_c movf DATA3, w ;\ сложить старший байт
addwf DATA6, f ;/
movf DATA2, w ;\ сложить средний байт
addwf DATA5, f ;/
btfsc 0x03, 0 ;\ если переполнился, то
incf DATA6, f ;/ прибавить 1 к старшему
movf DATA1, w ;\ сложить младший байт
addwf DATA4, f ;/
btfss 0x03, 0 ;\ если переполнился, то
goto dcb_cc ; \ прибавить 1 к среднему
movlw 0x01 ; / иначе закончить сложение
addwf DATA5, f ;/
btfsc 0x03, 0 ;\ если переполн. опять, то
addwf DATA6, f ;/ прабавить 1 уже к старшему
dcb_cc decfsz COUNT2, f ;\продолжить цикл сложения
goto dcb_c ;/ (сложить COUNT1 раз)
;
fr_nx movlw d'4' ;\
movwf COUNT2 ; |
fr_nxx bcf STATUS, 0 ; |
rrf FREQ_H, f ; |перейти на следующий
rrf FREQ_M, f ; | разряд преобразования
rrf FREQ_L, f ; |
decfsz COUNT2, f ; |
goto fr_nxx ;/
decfsz COUNT1, f ;\если преобраз. все 6 разр.,
goto DCB ;/ то закончить преобразов.
;
call SAVE_PR ;сохранить ПЧ
call F_LCD ;обновить индикатор
goto END_SA ;завершить ввод ПЧ
;
LD_ZN clrf PCH ;первый блок 256
call ustz_L ;\загрузить младш. байт
movwf DATA1 ;/
call ustz_M ;\загрузить средн. байт
movwf DATA2 ;/
call ustz_H ;\загрузить старш. байт
movwf DATA3 ;/
return ;вернуться
;
ustz_L movf COUNT1, w ;
addwf PCL, f ;
nop ;
retlw 0xa0 ;100000, младший
retlw 0x10 ; 10000, младший
retlw 0xe8 ; 1000, младший
retlw 0x64 ; 100, младший
retlw 0x0a ; 10, младший
retlw 0x01 ; 1, младший
;
ustz_M movf COUNT1, w ;
addwf PCL, f ;
nop ;
retlw 0x86 ;100000, средний
retlw 0x27 ; 10000, средний
retlw 0x03 ; 1000, средний
retlw 0x00 ; 100, средний
retlw 0x00 ; 10, средний
retlw 0x00 ; 1, средний
;
ustz_H movf COUNT1, w ;
addwf PCL, f ;
nop ;
retlw 0x01 ;100000, старший
retlw 0x00 ; 10000, старший
retlw 0x00 ; 1000, старший
retlw 0x00 ; 100, старший
retlw 0x00 ; 10, старший
retlw 0x00 ; 1, старший


 
 Забыл теги вставить --- вот тут будет лучше видно
Автор: Sandy ()
Дата:   11/09/2004 19:44

;-----Десятично-двоичное преобразование----

DCB	call	LD_ZN		;загрузить значение константы
	movf	FREQ_L,	w	;\ определить количество
	andlw	b'00001111'	; | сложений
	movwf	COUNT2		; |  если 0 раз, то
	btfsc	STATUS,	2	; |   сразу перейти к
	goto	fr_nx		;/     следующему разряду
				;
dcb_c	movf	DATA3,	w	;\ сложить старший байт
	addwf	DATA6,	f	;/
	movf	DATA2,	w	;\ сложить средний байт
	addwf	DATA5,	f	;/
	btfsc	0x03,	0	;\ если переполнился, то
	incf	DATA6,	f	;/  прибавить 1 к старшему
	movf	DATA1,	w	;\ сложить младший байт
	addwf	DATA4,	f	;/
	btfss	0x03,	0	;\ если переполнился, то
	goto	dcb_cc		; \  прибавить 1 к среднему
	movlw	0x01		; / иначе закончить сложение
	addwf	DATA5,	f	;/
	btfsc	0x03,	0	;\ если переполн. опять, то
	addwf	DATA6,	f	;/ прабавить 1 уже к старшему
dcb_cc	decfsz	COUNT2,	f	;\продолжить цикл сложения
	goto	dcb_c		;/ (сложить COUNT1 раз)
				;
fr_nx	movlw	d'4'		;\
	movwf	COUNT2		; |
fr_nxx	bcf	STATUS,	0	; |
	rrf	FREQ_H,	f	; |перейти на следующий
	rrf	FREQ_M,	f	; | разряд преобразования
	rrf	FREQ_L,	f	; |
	decfsz	COUNT2,	f	; |
	goto	fr_nxx		;/
	decfsz	COUNT1,	f	;\если преобраз. все 6 разр.,
	goto	DCB		;/ то закончить преобразов.
				;
	call	SAVE_PR		;сохранить ПЧ
	call	F_LCD		;обновить индикатор
	goto	END_SA		;завершить ввод ПЧ
				;
LD_ZN	clrf	PCH		;первый блок 256
	call	ustz_L		;\загрузить младш. байт
	movwf	DATA1		;/
	call	ustz_M		;\загрузить средн. байт
	movwf	DATA2		;/
	call	ustz_H		;\загрузить старш. байт
	movwf	DATA3		;/
	return			;вернуться
				;
ustz_L	movf	COUNT1,	w	;
	addwf	PCL,	f	;	
	nop			;
	retlw	0xa0		;100000, младший
	retlw	0x10		; 10000, младший
	retlw	0xe8		;  1000, младший
	retlw	0x64		;   100, младший
	retlw	0x0a		;    10, младший
	retlw	0x01		;     1, младший
				;
ustz_M	movf	COUNT1,	w	;
	addwf	PCL,	f	;	
	nop			;
	retlw	0x86		;100000, средний
	retlw	0x27		; 10000, средний
	retlw	0x03		;  1000, средний
	retlw	0x00		;   100, средний
	retlw	0x00		;    10, средний
	retlw	0x00		;     1, средний
				;
ustz_H	movf	COUNT1,	w	;
	addwf	PCL,	f	;	
	nop			;
	retlw	0x01		;100000, старший
	retlw	0x00		; 10000, старший
	retlw	0x00		;  1000, старший
	retlw	0x00		;   100, старший
	retlw	0x00		;    10, старший
	retlw	0x00		;     1, старший







 
 тогда надо зарегиться на форуме и можно править свои сообщения! ;0 ( - )
Автор: patton ()
Дата:   13/09/2004 13:29

!!!