Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Программы

реклама

 




Мероприятия:




Библиотека математики с плавающей точкой для микроконтроллеров MSP430 компании Texas Instruments

    Пакет FPP (Floating Point Package)- математика с плавающей точкой, необходим, если размер применяемых чисел очень велик. Пакет с плавающей точкой оперирует с 24-битовой и 40-битовой мантиссой и разработан для микроконтроллеров семейства MSP430. В пакет включены конвертеры, переводящие числа в двоичном и двоично-десятичном формате в числа в формате "плавающая точка". Предусмотрено и обратное преобразование. Пакет с плавающей точкой использует особенности RISC архитектуры семейства микроконтроллеров MSP430. В время работы подпрограммы, использующей пакет FPP, аргументы копируются в регистры R4 - R15 и все вычисления происходят там. После завершения вычислений результат сохраняется в вершине стека.

    Пакет с плавающей точкой (FPP) состоит из 3 файлов, поддерживающих формат .FLOAT (32 бита) и формат .DOUBLE (48 битов):

  • FPP04.ASM: подпрограммы основных арифметических операций - сложение, вычитание, умножение, деление и сравнение.
  • CNV04.ASM: подпрограммы преобразования чисел из двоичного и двоично-десятичного формата в формат с плавающей точкой, и наоборот.
  • FPPDEF4.ASM: подпрограммы дополнительных функций.

    Подпрограммы, входящие в пакет FPP :

    FLT_ADD 	Сложение
    FLT_SUB 	Вычитание 
    FLT_MUL 	Умножение 
    FLT_DIV 	Деление 
    FLT_CMP 	Сравнение
    FLT_SAV 	Сохранение всех используемых регистров в стеке
    FLT_REC 	Восстановление всех используемых регистров из стека
    CNV_BINxxx 	Преобразование двоичного числа в формат числа с плавающей точкой 
    CNV_BCD_FP 	Преобразование двоично-десятичного числа в формат числа с плавающей точкой
    CNV_FP_BIN 	Преобразование числа в формате с плавающей точкой в двоичное число
    CNV_FP_BCD 	Преобразование числа в формате с плавающей точкой в двоично-десятичное число
    FLT_CMP   	Сравнение двух чисел в формате с плавающей точкой
    

    Использование регистров R5 - R12 в качестве буферов для хранения адреса аргумента, позволяет сохранить адресное пространство памяти. Аргументы не изменяются в результате вычисления и могу храниться или в ПЗУ или в ОЗУ. Прежде чем начинать вычисления, необходимо загрузить два указателя RPARG и RPRES адресами, указывающими на старшее слово будущих операндов (MSW). После возврата из подпрограммы вычисления, указатель вершины стека (SP), указывает на результат вычисления арифметических выражений. Результат вычисления с плавающей точкой всегда хранится по адресу указателя вершины стека (SP). Результаты основных арифметических операций (сложения, вычитания, умножения и деления) также хранятся по адресам @SP или 0(SP).Между вызовами подпрограмм FPP, все регистры могут свободно использоваться.

    Диапазон чисел, с которыми производит вычисления библиотека FPP.

    Наибольшее положительное число  
    Двоичное : FF7FFFFFh 
    Десятичное : 3.402823 x 10 38
    
    Наименьшее положительное число
    Двоичное :  00000001h 
    Десятичное : 2.938736 x 10 -39
    Ноль : 00000000h,   0 = 0.0
    
    Наименьшее отрицательное число 
    Двоичное :00800000h
    Десятичное :-2.938736 x 10 -39
    
    Наибольшее отрицательное число 
    Двоичное : FFFFFFFFh
    Десятичное :-3.402823 x 10 38
    
    Разрешение: 119.2093 x 10 -9 2 е.
    
    

    Число машинных циклов процессора MSP430, затрачиваемое на выполнение арифметических операций.

    Сложение X + Y 184
    Вычитание X - Y 177
    Умножение X * Y 395
    Деление X / Y 405
    Сравнение X - Y 37

    Подпрограмма сравнения работает значительно быстрее, чем подпрограммы арифметических операций. Знаковые числа сравниваются на первом шаге. Для дальнейшего сравнения рассматривается отношение двух аргументов...

    Библиотека FPP подключается к рабочей программе приведенной ниже командой:


;**************** FPP ********************

	.sect	"fpp",
.copy cnv04.asm .copy fpp04.asm .copy fppdef04.asm ;*****************************************

    При этом необходимо иметь ввиду, что размер подключаемой библиотеки FPP - 960 байт. Лучше всего разместить библиотеку FPP перед блоком указателей переходов по векторам прерывания, расположенным по адресу: FFE0h. В этом случае адрес библиотеки FPP будет : address H = FBD0h.

    Пример вычисления с использованием библиотеки FPP. (A х B) + C


VAL3 .FLOAT -1.2345 ; наклон
VAL4 .FLOAT 14.4567 ; смещение

; …………………….
CALL #FLT_SAV 	; сохранение регистров R5-R12
SUB #4,SP 		; подъем указателя стека для хранения результатов вычисления
MOV #BCDB,RPARG 	; загрузка адреса буфера BCD числа
CALL #CNV_BCD_FP 	; преобразование BCDB в FP
;
; 	вычисление (A * B) + C   т.е.(BCDB x VAL3) + VAL4
;
MOV #VAL3,RPARG ; загрузка адреса  числа "A" 
CALL #FLT_MUL 	; вычисление " A * B "
MOV #VAL4,RPARG ; загрузка адреса числа " C "
CALL #FLT_ADD 	; вычисление (A * B) + C 
CALL #CNV_FP_BCD ; преобразование результата вычисления в формат BCD
JN CNVERR 	; обработка ошибки результата вычисления (результат больше чем буфер BCD)
POP BCDMSD 	; сохранение 4 старших разрядов BCD и знака (MSD)
POP BCDMID 	; сохранение 4 средних разрядов BCD  (MID)
POP BCDLSD 	; сохранение 4 младших разрядов BCD  (LSD)
; восстановление указателя стека
CALL #FLT_REC 	; восстановление регистров R5 - R12
;
; продолжение основной программы
;
CNVERR 		; обработка ошибки результата

    Пример использования подпрограммы сравнения двух чисел.

MOV  #ARG1,RPRES		;загрузка ARG1  
MOV  #ARG2,RPARG		;загрузка ARG2 
CALL #FLT_CMP		;Подпрограмма сравнения ARG1 и ARG2 
JEQ   РАВНО			;ARG1=ARG2 
JHS   БОЛЬШЕ		:ARG1>ARG2 
; ARG1 - меньше чем ARG2
; …………
РАВНО 					; ARG1 и ARG2 - равны.
		;………….
БОЛЬШЕ					; ARG1 - больше чем ARG2
		;………….







 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники