Перейти к содержанию

Динамическая индикация на ассемблере


Юстас

Рекомендуемые сообщения

В 14.01.2017 в 20:12, demiurg1978 сказал:

Псевдопараллельность процессов

demiurg1978, можно немного раскрыть эти слова для применения на ассемблере? 

В 14.01.2017 в 20:12, demiurg1978 сказал:

программные таймеры

это как- добавить в основной цикл счетчик, отслеживать состояние, и например, для индикации при определенном значении запускать соответствующий "блок" программы?

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

6 часов назад, cucumber сказал:

Знакомый сделал в прерывании изменение SPL. Соответственно, программа из прерывания прыгает не туда, где остановилась, а по новому адресу. Можно так делать? 

 

4 часа назад, cucumber сказал:

а есть смысл в использовании RCALL без RET?

Делать можно, если вы считаете это оправданным. Главное не забывать о корректности данных в стеке (ну и в регистрах конечно).

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

пред история: решили со знакомым изучить ассемблер. Начали с динамической индикации и частотомера на 2313. Ниже - его вариант. Позже принесу свой. За правописание не пинайте,  парень простой, я исправлять не стал.  Его вариант считает МГц на 4-х разрядном индикаторе.

.include"2313def.inc"

.def     Temp1=R17
.def     razer1=R18
.def     razer2=R19
.def     razer3=R20
.def     razer4=R21
.cseg
.org 0

rjmp Reset; Reset Handler
reti ; External Interrupt0 Handler
reti; External Interrupt1 Handler
reti ; Timer1 Capture Handler
reti ; Timer1 CompareA Handler
reti ; Timer1 Overflow Handler
reti ; Timer0 Overflow Handler
reti ; USART0 RX Complete Handler
reti ; USART0,UDR Empty Handler
reti ; USART0 TX Complete Handler
reti ; Analog Comparator Handler
reti; Pin Change Interrupt
reti ; Timer1 Compare B Handler
rjmp TIMER0_COMPA ; Timer0 Compare A Handler
reti ; Timer0 Compare B Handler
reti ; USI Start Handler
reti; USI Overflow Handler
reti ; EEPROM Ready Handler
reti; Watchdog Overflow Handler

Reset:

 		ldi R16,RamEnd     		;Стек  
		out SPL,R16

		ldi R16,0b01011000		;Порт D  Настройка	
		out DDRD,R16

		ldi R16,0b00011111		;Порт B Настройка	
		out DDRB,R16

		ldi R16,0b00000011  	;CK/64 Делитель восмебитного таймера на 64
       		 sts 0x53, R16

		ldi R16,249
     		sts 0x56, R16          		 ;Восьмибитный компаратор ставим 249

		ldi R16,0b10000010		;Регистор Tccr0a Настройка восмебитного таймера
		sts 0x50,R16

        		ldi R16,0b00000001    	 ;Прирывания в восьмибитном таймере таймере
        		out TIMSK,R16

		ldi R16,0b00000111   	 ;Внешний источник сигнала вход ТО. 16 битного таймера
        		out TCCR1B,R16		 ;Синхронизация по переднему фронту

		ldi R16,0               		;Сбрасывыем Таймер 8 бит, в принцепе не нужно
		out TCNT0,R16

        		out TCNT1H,R16         	 ;Сбрасывыем Таймер 16 бит Тоже не обезательно,
        		out TCNT1L,R16		;сбросица всё само с первым прерыванием

		SEI			;Разрешаем прерывания

PROGA:

;********************************************************************************************************
;				Оснавной цикал
;********************************************************************************************************

        		mov R17,razer1
      		ldi R22,0b00011110  	 ; Выводим первый разряд
      		rcall ReadArray

    		mov R17,razer2
      		ldi R22,0b00011101	 	; Выводим второй разряд
       		rcall ReadArray

       		mov R17,razer3
        		ldi R22,0b00001111	 	; Выводим третий разряд небольшая путаница
        		rcall ReadArray	 	; из за сгоревшей ножки

       		mov R17,razer4
        		ldi R22,0b00010111	 	; Выводим четвёртый разряд
       		rcall ReadArray

        		rjmp PROGA		 ; Всё заново



;********************************************************************************************************
;				Чтение масива
;********************************************************************************************************

ReadArray:				;Чтение масива
         		ldi R16,0				
         		ldi ZH,High(Array*2)   	 ;Загружаем в ZH адрес метки Array старший байт
         		ldi ZL,Low(Array*2)		;Загружаем в ZL адрес метки Array младший байт
					;Метка Array (начало масива в памети програм)
                     
         		add ZL,R17		;Прибовление к регистру Z Садержимого R17
         		adc ZH,R16		;Перенос, возможно и не нужен в зависемости
					;от расположение масива в памети програм
         		lpm                    		;Чтение из памети програм в R0

         		ldi R16,0b00011111		;Гасим индикатор
         		out PortB,R16


         		ldi R16,7			;  По битная передача из R0
         					;  на микросхему 74НС595 (я её оставил,
Loop0:   		SBRC R0,6		;  не охота схему перепаевать было)
         		SBI  PortD,6
         		SBI  PortD,3
         		CBI  PortD,3
         		LSL  R0
         		CBI  PortD,6
         		dec  R16
         		brne Loop0
         		SBI  PortD,4
		CBI  PortD,4
		out PortB,R22		;Зажигаем индекатор

         		CLR razer1		; Сброс разрядов
         		CLR razer2
         		CLR razer3
         		CLR razer4

		 sbrs R15,4		;Проверка первого бита (старшего) если бит установчен,
		 rcall Loop1		;то дабовление в соотвецтвующее разряды
	 	 ldi R16,2			;числа 2048
		 add razer4,R16		;в первый разряд (младший) чесло 8
   		 ldi R16,4			;во второй 4
		 add razer2,R16		;в третий нечего не добавляем
		 ldi R16,8			;в четвёртый 2
  		 add razer1,R16		;если не установлен то пропускаем

Loop1:		sbrs R15,3		;Проверка следующего бита устанавливаем
		rcall Loop2		;Всоотвецтвующее разряды чесло 1024
 		inc razer4		 
					;если бит не установлен то пропускаем
		ldi R16,2
		add razer2,R16
		ldi R16,4
  		add razer1,R16

Loop2:		sbrs R15,2		;Проверка следующего бита устанавливаем
		rcall Loop3		; в разряды 512
		ldi R16,5			;если бит не установлен то пропускаем
		add razer3,R16   		; и так далиее 
		inc razer2
		ldi R16,2
		add razer1,R16

Loop3:		sbrs R15,1		;устанавливаем 256
		rcall Loop4
 		ldi R16,2
		add razer3,R16
		ldi R16,5
		add razer2,R16
 		ldi R16,6
		add razer1,R16

Loop4: 		sbrs R15,0		;устанавливаем 128
		rcall Loop5
		inc razer3
		ldi R16,2
		add razer2,R16
		ldi R16,8
		add razer1,R16

Loop5:		sbrs R14,7		;устанавливаем 64
		rcall Loop6		;итак до ериницы
		ldi R16,6
		add razer2,R16
		ldi R16,4
		add razer1,R16

Loop6:		sbrs R14,6
		rcall Loop7
		ldi R16,3
		add razer2,R16
		ldi R16,2
		add razer1,R16


Loop7:		sbrs R14,5
		rcall Loop8	
		inc razer2
		ldi R16,6
		add razer1,R16

Loop8:		sbrs R14,4
		rcall Loop9
		ldi R16,8
		add razer1,R16

Loop9:		sbrs R14,3
		rcall Loop10
		ldi R16,4	 
		add razer1,R16

Loop10:		sbrs R14,2
		rcall Loop11
	 	ldi R16,2	 
		add razer1,R16
Loop11:		SBRC R14,1
		inc razer1


Loop12:		cpi razer1,10    		  ;перенос лишних десятков в старшие разряды
 		brlo Loop13		  ;сравнение с 10 младшего разряда если меньше
		subi razer1,10	 	  ;то пропускаем если больше или равно то вычетаем 10
		inc razer2		   ; а более старший пребовляем 1
		rjmp Loop12		  ; павторяем процедуру пока разряд не станет менше 10

Loop13:		cpi razer2,10 		  ;тожесамое только со вторым разрядом
 		brlo Loop14
		subi razer2,10
		inc razer3
		rjmp Loop13

Loop14:		cpi razer3,10 		;с третим
		brlo Delay		;с четвёртым не надо патамушто перенасить не куда
	 	subi razer3,10		;да и не нужно больше 4 не будет выше частоту не
		inc razer4		;будет мерить
		rjmp Loop14

Delay: 		 rjmp Delay		;бесканечный цикал ждём прерывания
					;здесь может выполнятся любая другая программа
					;надо в прерывании сохронитьSP,и SREG(если это кретично)
					;а в этом масте их загрузить и ret
					;программа продолжится с того места где пришло прерывание


;********************************************************************************************************
;			Обрабочик прерывания таймера
;********************************************************************************************************

TIMER0_COMPA:


         		 in R14, TCNT1L	;Загружаем из 16 битного таймера младший байт в R14
         		 in R15, TCNT1H	;Загружаем из 16 битного таймера старший байт в R15
         

         		CLR  R16
       	  	out TCNT1H,R16     ;Сбрасывыем Таймер 16 бит
       	 	out TCNT1L,R16



		  ldi  R16,0xDD	;Загружаем в SP адрес котрай был до прирывания
		  out SPL,R16	;Чтобы его получить Надо было дастать значение из
         				;SPL и прибавить 2 ,но мозно сразу закрузить канстанту
				; но это будет только чесло актуально для конкретного 
		 		;кантролера, паэтому лучше получать его на месте
		 
		 
		 
		  reti		;И понему переходим и поподаем в основной цикал
				;как будто вышли из подпрограмы ReadArray


;********************************************************************************************************
;				Масив
;********************************************************************************************************


Array:
              .db 0b00111111,0b00000110	;0,1
              .db 0b01011011,0b01001111	;2,3
              .db 0b01100110,0b01101101	;4,5
              .db 0b01111101,0b00000111	;6,7
              .db 0b01111111,0b01101111	;8,9

;********************************************************************************************************
;Это сколько использавоно ресурсов кантролера (можно ещо меньше)

;AT90S2313 memory use summary [bytes]:
;Segment   Begin    End      Code   Data   Used    Size   Use%
;---------------------------------------------------------------
;[.cseg] 0x000000 0x000162    344     10    354    2048  17.3%
;[.dseg] 0x000060 0x000060      0      0      0     128   0.0%
;[.eseg] 0x000000 0x000000      0      0      0     128   0.0%

 

Изменено пользователем cucumber
Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...