Форум РадиоКот https://radiokot.ru/forum/ |
|
bin_to_dec https://radiokot.ru/forum/viewtopic.php?f=57&t=111925 |
Страница 1 из 2 |
Автор: | arm-17 [ Сб янв 10, 2015 11:58:08 ] |
Заголовок сообщения: | bin_to_dec |
Почему не отображается на LCD? Вроде bin_to_dec рабочий. Спойлер;********************************************************************;;=================== ;; Преобразование 10-разрядного двоичного числа ;; в 3-разрядное двоично-десятичное неупакованное число ;; resH:resL - двоичное число ;; r18:r17:r16 - десятичное bin_to_dec: ser r18 bin_to_dec1: inc r18 subi resL, 100 sbci resH, 0 brcc bin_to_dec1; âû÷èòàåì åùå ðàç (íåò çàåìà) subi resL, -100 sbci resH, 0 ser r17 bin_to_dec2: inc r17 subi resL, 10 brcc bin_to_dec2 subi resL, -10 ser r16 bin_to_dec3: inc r16 subi resL, 1 brcc bin_to_dec3 subi resL, -1 ret ;************************************************************************* ;************************************************************************* ;************************************************************************* LCD_Write: ;преобразовать десятичный код в ASCII ldi temp1,0x30 ;Смещение для ASCII кода add r18,temp1 ;r2 add r17,temp1 ;r3 add r16,temp1 ;r4 ;************************************************************************* ;запись в lcd ldi r16,0x45 ;;;;;;;;;; rcall LCD_SetAddressDD ;запись в LCD ;;;;;;;;;;; mov temp1,r2 ;;;;;;;;;;; rcall LCD_WriteData ;;;;;;;;;;; mov temp1,r3 ;;;;;;;;;;;; rcall LCD_WriteData ;;;;;;;;;; mov temp1,r4 ;;;;;;;;;;;;;; rcall LCD_WriteData ;;;;;;;;;; mov temp1,r5 ;;;;;;;;;;;; rcall LCD_WriteData ;;;;;;;; mov temp1,r6 ;;;;;;;;;; rcall LCD_WriteData ;;;;;;;;;;;;; ;************************************************************************ reti |
Автор: | COKPOWEHEU [ Сб янв 10, 2015 13:54:11 ] |
Заголовок сообщения: | Re: bin_to_dec |
На каком этапе ошибка? Вывод символа на дисплей, преобразование число - строка, вывод строки, может выводите число вместо его кода? |
Автор: | akl [ Сб янв 10, 2015 14:40:44 ] |
Заголовок сообщения: | Re: bin_to_dec |
arm-17 Ваше bin-bcd преобразование немного ущербно, т.к. не может преобразовать числа больше 999. Касательно вывода на LCD сказано в предыдущем сообщении. СпойлерКод: ;; Преобразование 10-разрядного двоичного числа ;; в 5-разрядное двоично-десятичное неупакованное число ;; resH:resL - двоичное число ;; R20:R19:r18:r17:r16 - десятичное bin_to_dec: ;10000 ser R20 bin_to_dec10000: inc r20 subi resL,LOW(10000) sbci resH,HIGH(10000) brcc bin_to_dec10000 subi resL,LOW(-10000) sbci resH,HIGH(-10000) ;1000 ser R19 bin_to_dec1000: inc r19 subi resL,LOW(1000) sbci resH,HIGH(1000) brcc bin_to_dec1000; a^u^?e`o`a`a*i` a*u`a* ?a`c, (i'a*o` c,a`a*i`a`) subi resL,LOW(-1000) sbci resH,HIGH(-1000) ;100 ser r18 bin_to_dec100: inc r18 subi resL, 100 sbci resH, 0 brcc bin_to_dec100; a^u^?e`o`a`a*i` a*u`a* ?a`c, (i'a*o` c,a`a*i`a`) subi resL,LOW(-100) sbci resH,HIGH(-100) ;10 ser r17 bin_to_dec10: inc r17 subi resL, 10 brcc bin_to_dec10 subi resL,LOW(-10) sbci resH,HIGH(-10) MOV R16,resL ;************************************************************************* ;************************************************************************* ;************************************************************************* LCD_Write: ;преобразовать десятичный код в ASCII SUBI R20,-0x30 SUBI R19,-0x30 SUBI R18,-0x30 SUBI R17,-0x30 SUBI R16,-0x30 ;ldi temp1,0x30 ;Смещение для ASCII кода ;add r18,temp1 ;r2 ;add r17,temp1 ;r3 ;add r16,temp1 ;r4 RJMP BIN_TO_DEC |
Автор: | arm-17 [ Сб янв 10, 2015 15:05:08 ] |
Заголовок сообщения: | Re: bin_to_dec |
Для измерения 5-и вольт по АЦП пойдет 999.А вот почему не выводит на LCD? не пойму. У меня до этого был другой BIN_BSD он работал до 65535 и спокойно все это выводил на LCD. |
Автор: | akl [ Сб янв 10, 2015 15:19:19 ] |
Заголовок сообщения: | Re: bin_to_dec |
Может из-за этого Код: subi resL, -100 sbci resH, 0 вместо Код: subi resL,low(-100)
sbci resH, high(-100) |
Автор: | arm-17 [ Сб янв 10, 2015 15:38:56 ] |
Заголовок сообщения: | Re: bin_to_dec |
akl подставил не получилось. Даже если BIN_BCD не правильный какие-то кракозябры все равно должны были выходить? Подставил BIN_BCD который предложил akl, тоже не выводит на LCD((( |
Автор: | arm-17 [ Сб янв 10, 2015 15:54:00 ] |
Заголовок сообщения: | Re: bin_to_dec |
Может число должно быть упакованное? |
Автор: | akl [ Сб янв 10, 2015 16:51:49 ] |
Заголовок сообщения: | Re: bin_to_dec |
Может так? СпойлерКод: ;; Преобразование 10-разрядного двоичного числа ;; в 5-разрядное двоично-десятичное неупакованное число ;; resH:resL - двоичное число ;; R20:R19:r18:r17:r16 - десятичное LDI ZH,HIGH(RAMEND) LDI ZL,LOW(RAMEND) OUT SPH,ZH OUT SPL,ZL bin_to_dec: ;10000 ser R20 bin_to_dec10000: inc r20 subi resL,LOW(10000) sbci resH,HIGH(10000) brcc bin_to_dec10000 subi resL,LOW(-10000) sbci resH,HIGH(-10000) ;1000 ser R19 bin_to_dec1000: inc r19 subi resL,LOW(1000) sbci resH,HIGH(1000) brcc bin_to_dec1000; a^u^?e`o`a`a*i` a*u`a* ?a`c, (i'a*o` c,a`a*i`a`) subi resL,LOW(-1000) sbci resH,HIGH(-1000) ;100 ser r18 bin_to_dec100: inc r18 subi resL, 100 sbci resH, 0 brcc bin_to_dec100; a^u^?e`o`a`a*i` a*u`a* ?a`c, (i'a*o` c,a`a*i`a`) subi resL,LOW(-100) sbci resH,HIGH(-100) ;10 ser r17 bin_to_dec10: inc r17 subi resL, 10 brcc bin_to_dec10 subi resL,LOW(-10) sbci resH,HIGH(-10) MOV R16,resL ;************************************************************************* ;************************************************************************* ;************************************************************************* LCD_Write: ;преобразовать десятичный код в ASCII SUBI R20,-0x30 SUBI R19,-0x30 SUBI R18,-0x30 SUBI R17,-0x30 SUBI R16,-0x30 MOV R2,R16 MOV R3,R17 MOV R4,R18 MOV R5,R19 MOV R6,R20 ;ldi temp1,0x30 ;Смещение для ASCII кода ;add r18,temp1 ;r2 ;add r17,temp1 ;r3 ;add r16,temp1 ;r4 ;************************************************************************* ;запись в lcd ldi r16,0x45 ;;;;;;;;;; rcall LCD_SetAddressDD ;запись в LCD ;;;;;;;;;;; mov temp1,r2 ;;;;;;;;;;; rcall LCD_WriteData ;;;;;;;;;;; mov temp1,r3 ;;;;;;;;;;;; rcall LCD_WriteData ;;;;;;;;;; mov temp1,r4 ;;;;;;;;;;;;;; rcall LCD_WriteData ;;;;;;;;;; mov temp1,r5 ;;;;;;;;;;;; rcall LCD_WriteData ;;;;;;;; mov temp1,r6 ;;;;;;;;;; rcall LCD_WriteData ;;;;;;;;;;;;; RJMP BIN_TO_DEC LCD_SetAddressDD: RET LCD_WriteData: RET |
Автор: | arm-17 [ Сб янв 10, 2015 21:32:32 ] |
Заголовок сообщения: | Re: bin_to_dec |
Разобрался ошибка где "запись в LCD". Пора завязывать отмечать праздники. ![]() Тема закрыта. |
Автор: | arm-17 [ Ср янв 14, 2015 16:37:52 ] |
Заголовок сообщения: | Re: bin_to_dec |
Подскажите уважаемые гуру форума, а как сделать чтоб в этом BIN_BCD появилась точка ну например (5.12V) Спойлер;; Преобразование 10-разрядного двоичного числа;; в 3-разрядное двоично-десятичное неупакованное число ;; resH:resL - двоичное число ;; r18:r17:r16 - десятичное bin_to_dec: ser r18 bin_to_dec1: inc r18 subi resL, 100 sbci resH, 0 brcc bin_to_dec1; вычитаем еще раз (нет заема) subi resL, -100 sbci resH, 0 ser r17 bin_to_dec2: inc r17 subi resL, 10 brcc bin_to_dec2 subi resL, -10 ser r16 bin_to_dec3: inc r16 subi resL, 1 brcc bin_to_dec3 subi resL, -1 ret |
Автор: | akl [ Чт янв 15, 2015 04:13:23 ] |
Заголовок сообщения: | Re: bin_to_dec |
В этом преобразовании никак. После преобразования на индикатор выводите 0x35 0x2E 0x31 0x32. |
Автор: | arm-17 [ Чт янв 15, 2015 17:39:02 ] |
Заголовок сообщения: | Re: bin_to_dec |
Это преобразование правда какое-то ущербное. У меня счет идет почему-то вот так: 4.00,4.11,4.22,4.33,4.44,4.55 и т.д. Может есть у кого трехзначное преобразование? |
Автор: | akl [ Пт янв 16, 2015 04:16:42 ] |
Заголовок сообщения: | Re: bin_to_dec |
Да нормальное преобразование. Разве что для правильности заменить на Код: brcc bin_to_dec1; вычитаем еще раз (нет заема) Думаю, что напутано при выводе на индикациюsubi resL, LOW(-100) sbci resH, HIGH(-100) . . . MOV R16,resL ;ser r16 ;bin_to_dec3: inc r16 ;subi resL, 1 ;brcc bin_to_dec3 ;subi resL, -1 Мне больше нравится такое преобразование |
Автор: | arm-17 [ Пт янв 16, 2015 21:10:51 ] |
Заголовок сообщения: | Re: bin_to_dec |
Подставил все равно считает не правильно. |
Автор: | akl [ Сб янв 17, 2015 04:52:48 ] |
Заголовок сообщения: | Re: bin_to_dec |
По мне, у Вас вывод на индикатор неправильный. |
Автор: | arm-17 [ Сб янв 17, 2015 09:00:24 ] |
Заголовок сообщения: | Re: bin_to_dec |
Нашёл.Регистр r16 заменил на другой и все заработало. Теперь другая проблема: На вольтметре 5.00V а на LCD 5.11V причем не сразу начинаетса с 0.35 на вольтметре а на LCD 0.36 и так все больше и больше Вот мое деление Код: ;***********************деление*********************************************** ;
;деление на 64 clr count_data div64L: lsr ADC_H;сдвинуть старший в право ror ADC_L;сдвинуть младший с переносом inc count_data cpi count_data,1 brne div64L ;***************************************************************************** |
Автор: | akl [ Сб янв 17, 2015 09:28:52 ] |
Заголовок сообщения: | Re: bin_to_dec |
Я бы сделал так Код: cpi count_data,6 ; cpi count_data,1 или так с заменой деления умножением (X/64=X*K/256->K=4) без потери значащих бит Код: LSL ADC_L ;сдвинуть младший с переносом
ROL ADC_H ;сдвинуть старший с переносом LSL ADC_L ROL ADC_H |
Автор: | arm-17 [ Вс янв 18, 2015 00:08:43 ] |
Заголовок сообщения: | Re: bin_to_dec |
Что-то не понял зачем сравнивать с 6( cpi count_data,6 ) Вы имеете в виду заменить lsr ADC_H ror ADC_L на LSL ADC_L ;сдвинуть младший с переносом ROL ADC_H ;сдвинуть старший с переносом Или я чего-то не понял? |
Автор: | akl [ Вс янв 18, 2015 05:19:02 ] |
Заголовок сообщения: | Re: bin_to_dec |
arm-17 писал(а): Что-то не понял зачем сравнивать с 6( cpi count_data,6 ) Для того, чтобы разделить число на 64=2^6 можно сдвинуть вправо 6 раз.arm-17 писал(а): Или я чего-то не понял? Для того, чтобы разделить число на 64=2^6 можно сдвинуть влево 2 раза, заменив операцию деления умножением. Результатом будет содержимое старшего байта.X/64=X*K/256->K=4 |
Автор: | arm-17 [ Вс янв 18, 2015 19:57:21 ] | ||
Заголовок сообщения: | Re: bin_to_dec | ||
Не получилось. Может если будет время ,то посмотрите? Посылаю исходник и рабочий пример в PROTEUS. Всем кто только изучает АЦП и ПИШЕТ на ASSEMBLER, будет интересно.
|
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |