Технический форум по робототехнике.
arm-17 » 10 янв 2015, 14:33
Почему не отображается на 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
Radist » 10 янв 2015, 23:12
Приведены несколько подпрограмм - и все. Как тут помочь?
ЗЫ. Почему у меня машина не едет? Вот колеса - на вид нормальные. Вот генератор и радиатор. Гляньте, почему машина не едет.
arm-17 » 10 янв 2015, 23:37
А машина не едет потому что прокладка между машиной и водителем протекла))
Все разобрался. тема закрыта
arm-17 » 14 янв 2015, 18:44
Подскажите уважаемые гуру форума, а как сделать чтоб в этом 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
Radist » 15 янв 2015, 04:08
Проще всего точку рисовать в процедуре вывода на экран. Нужно только знать где. И работать как с целым натуральным числом, например 512.
arm-17 » 15 янв 2015, 19:44
Это преобразование правда какое-то ущербное.
У меня счет идет почему-то вот так: 4.00,4.11,4.22,4.33,4.44,4.55 и т.д.
Может есть у кого трехзначное преобразование?
Duhas » 15 янв 2015, 21:01
если не забуду скину завтра, напишите пост чтобы тема вылезла в новых сообщениях завтра..
arm-17 » 15 янв 2015, 21:42
O.K.

Duhas » 16 янв 2015, 08:13
- Код: Выделить всё • Развернуть
UARTE0_TX_DEC_16:
push R18
push R19
push R20
.equ UARTE0_TX_DEC_16_DIGITS = 5
ldi R20, UARTE0_TX_DEC_16_DIGITS-1;result digits - 1
UARTE0_TX_DEC_16_1:
clr R18
ldi R19, 16 ;data bits
UARTE0_TX_DEC_16_2:
lsl R16
rol R17
rol R18
cpi R18, 10
brcs UARTE0_TX_DEC_16_3
subi R18, 10
ori R16, 1
UARTE0_TX_DEC_16_3:
dec R19
brne UARTE0_TX_DEC_16_2
push R18
dec R20
brne UARTE0_TX_DEC_16_1
subi R16, -0x30
call UARTE0_TX_byte
ldi R20, UARTE0_TX_DEC_16_DIGITS-1
UARTE0_TX_DEC_16_4:
pop R16
subi R16, -0x30
call UARTE0_TX_byte
dec R20
brne UARTE0_TX_DEC_16_4
pop R20
pop R19
pop R18
ret
в том месте где вызывается
call UARTE0_TX_byte
В R16 будет готовый байт, эта процедура в общем для 2-х байтных целых чисел, для дробных готового нет у меня
UARTE0_TX_DEC_16_DIGITS = 5 можно попробовать поставть 3 - но не уверен что все правильно отработает, пробуйте
arm-17 » 16 янв 2015, 22:57
не пашет
может мое преобразование лучше исправить?
arm-17 » 17 янв 2015, 11:12
Нашёл.Регистр 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
;*****************************************************************************
Duhas » 17 янв 2015, 11:46
а причем тут деление на 64? расскажите как вы вообще все это делаете, начиная с опорного напряжения и делителя резистивного, если он есть, оч. желательно использовать знаки препинания в объяснении
arm-17 » 18 янв 2015, 02:20
Деление на 64 это если так: cpi count_data,6
В железе пока не делал.Эксперименты c АЦП пока в PROTEUSE.
Duhas » 18 янв 2015, 11:05
не важно где, распишите как вы полагаете это все должно работать. типа на измеряемом источнике N вольт, на вход микроконтроллера подается M вольт, при опорном напряжении Q вольт, АЦП должен выдать такой то код, его я делю на столько то, дабы нам понять где может быть ошибка
arm-17 » 18 янв 2015, 16:55
Посылаю код + схема в PROTEUS
Комментарии в коде превратились в кракозябры не знаю как это исправить.
Всем кто только изучает АЦП и ПИШЕТ на ASSEMBLER, будет интересно.
- Вложения
-
КОД и схема в протеусе.zip
- Исходник и схема в PROTEUS
- (44.83 КиБ) Скачиваний: 0
Последний раз редактировалось
arm-17 19 янв 2015, 01:57, всего редактировалось 1 раз.