Показать сообщение отдельно
Непрочитано 01.11.2010, 16:58  
EugVor
Временная регистрация
 
Регистрация: 15.03.2006
Сообщений: 80
Сказал спасибо: 3
Сказали Спасибо 83 раз(а) в 11 сообщении(ях)
EugVor на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

С трудом вспоминал AVR ассемблер, но в итоге:

Несложное задание для STM8:
Исходные условия: Три восьмиразрядные переменные A, B и C разместить в SRAM.
Задание: Как можно быстрее:
1. Установить весь PORTA на выход;
2. Установить бит 0 в PORTA;
3. Проинициализировать переменную A = 1;
4. Проинициализировать переменную B = 2;
5. Уйти в подпрограмму;
В подпрограмме:
6. Сложить переменные A и B, результат поместить в C;
7. Вернуться из подпрограммы.
8. Если установлен бит 0 в PORTA, сбросить его.

Исходный код для AVR:
Код:
**************************************************  *************************
.include "m16def.inc"

.equ 		A=	$70     ;Адрес переменной A в SRAM.
.equ 		B=	$71     ;Адрес переменной B в SRAM.
.equ 		C=	$72     ;Адрес переменной C в SRAM.
.def		rA=	r16     ;РОН для переменной A.	
.def		rB=	r17     ;РОН для переменной B.
.def		rC=	r18     ;РОН для переменной C.	

;_________________________________________________  ____________________________

.org 0		;Вектор сброса
		rjmp     reset
;_________________________________________________  ____________________________

reset:		;Инициализация програмного стека.
		ldi  	RA,low(ramend)
		out  	spl,rA
		ldi  	RA,high(ramend)
		out  	sph,rA

		ldi  	rA,$ff		;НАЧАЛО ОТСЧЁТА ЦИКЛОВ			
        	out  	ddra,rA			;PortA на выход.
		sbi	porta,0		;Установить PortA.0
		ldi  	rA,$01			
		sts 	A,rA		;Переменная A=1;
		ldi  	rA,$02
		sts 	B,rA		;Переменная B=2;
		rcall	SubRoutine	;Уход в подпрограмму.
		sbic	pina,0		;Пропустить следующую команду, если PortA.0 сброшен. 
		cbi	porta,0		;Сбросить PortA.0 - КОНЕЦ ОТСЧЁТА	ЦИКЛОВ


SubRoutine:	lds 	rA,A		;Загрузить переменную A в РОН rA.
		lds 	rB,B		;Загрузить переменную B в РОН rB.
		add	rA,rB		;Сложить  rB+rA, результат в rA.
		sts	C,rA		;Сохранить результат сложения в переменную С в SRAM.	
		ret			;Возврат из подпрограммы.
ATmega16 справился за 26 тактов.
Начало замера - PortA физически установился на выход (сброс счётчика циклов в ноль перед командой out ddra,rA).
Окончание - PortA.0 сбросился в единицу.
Применены инструкции непосредственного сброcа, установки и проверки бита в порту, которых у STM8 возможно нет. Тогда это будет не очень честно. Просьба повторить для STM8.
Можно тоже самое или что-то посложнее написать на Си для IAR
Вложения:
Тип файла: rar AVRvsSTM8.rar (6.0 Кб, 50 просмотров)

Последний раз редактировалось Falconist; 13.04.2011 в 23:17.
EugVor вне форума