SI7021 и asm

AVR
Всем добра!
Долго у меня руки не доходили закончить этот проект. Много видел всяких библиотек, но проект задумывался на asm, был отложен на год или два. И вот руки дошли его закончить.
Работать на asm c этим датчиком никаких сложностей нет. Всё, что не поддерживается набором команд AVR, было отброшено за ненадобностью.
В итоге, что получилось, можно посмотреть в приложенных файлах. Я не делал перевод температуры в BCD, т.к. в моём проекте это не требуется.
Ну и несколько коротеньких функций в качестве бонуса:

Такое я использовал в программах МЕНЮ или если что-то уже получаешь в ASCII

                Ld       temp,Y		;* Берем  цифру в BCD 
                subi	temp,(-0x67)    ;* Переводим в HEX, сразу добавляем (1)
                brhc    ADD_6	  	;* Проверяем младшую тетраду на ноль
Sub_66:
                subi     temp,0x66      ;* И обратно в BCD
ADD_6:
                subi	temp,-6         ;- Если в младшей тетраде (0) добавл. (6)
                rjmp    Sub_66

Это функция поиска кнопки, при использовании ADC

KNOB:
		cbi	Flags,fl_Key_CODE  ;= Сбрасываем флаг кода, что-то там ADC насчитало
		ldi	temp1,0x20	   ;= Загружаем регистр для сдвига (1) (0010 0000)
		ldwi	Z,TAB_KEY*2	   ;= и он же счетчик обработанных  кнопок
NEW_KEY_VALUE:
		lpm	temp,Z+	           ;= извлекаем максимально возможный код кнопки из таблицы.
                ldi	count,3		   ;= На это число, в итоге, уменьшим код , чтобы определить кнопку т.к. значение может отличаться         
                (+/-) 1 от табличного.
CheckTabADC:		
		cp	CODE_KEY,temp	   ;= Сравниваем полученное с данными в таблице
		breq	EXIT_KNOB	   ;+ Равны - уходим 
		dec	temp		   ;= Вычитаем из полученного кода (1) 
		dec	count		   ;= Соответственно и уменьшаем счётчик возможностей
		brne	CheckTabADC	   ;= И снова проверяем. ;= Достанем следующий код кнопки , для проверки с полученным, при этом передвинув
		lsr	temp1		   ;= флажок , указывающий какой код кнопки мы будем обрабатывать ;= В итоге temp1 всегда ==0x01, что соответствует коду 0xFF - не нажата.
;| 0x02 - SW5, 0x04 - SW4,0x08 - SW3, 0x10 - SW2, 0x20 - SW1
		brne	NEW_KEY_VALUE
;		nop	;= а сюда все равно не попадём никогда , так что похрен;= что тут можно понаписать
EXIT_KNOB:
		mov	Flags_KEY,temp1	    ;= Переносим в регистр флагов
		ret
  • 0
  • 22 июля 2019, 11:58
  • ILYAUL
  • 1
Файлы в топике: Humidity.zip

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.