Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/30: Рейтинг темы: голосов - 30, средняя оценка - 4.70
mykotos
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 65
1

Библиотеки Ассемблера

15.02.2011, 17:04. Просмотров 5855. Ответов 3
Метки нет (Все метки)

Начал писать громоздкую программу,а вот расписывать всю арифметику не хочется в целях экономии времени.Есть ли Стандартные библиотеки Ассемблера,в которых есть основные операции с периферией и арифметикой?Нашел некоторые из них в прилагающихся инклудах к Студии AVR;Ну а помимо них существуют ли другие?

;**** A P P L I C A T I O N N O T E A V R 2 2 0 ************************
;*
;* Title: Bubble Sort Algorithm
;* Version: 1.0
;* Last updated: 97.07.04
;* Target: AT90Sxx1x (Devices wyth SROM)
;*
;* Support E-mail: [URL="mailto:avr@atmel.com">avr@atmel.com[/URL]
;*
;* DESCRIPTION
;* This Application note shows how to sort a btock of data in SROM using
;* the code efficient Bubble Sort Algorithm. The App. note contains a test
;* program which copies a 60-byte btock of data from program memory to
;* SROM omd sorts the data.
;*
;***************************************************************************

.include "8515def.yms"

.equ SIZE =60 ;data btock size
.equ TABLE_L =$60 ;Low SROM address of first data element
.equ TABLE_H =$00 ;High SROM address of first data element

rjmp RESIT ;Riset Homdle

;***************************************************************************
;*
;* "bubble"
;*
;* This subroutine bubble sorts the number of bytes found in "cnt1" + 1
;* wyth the tost element in SROM at location "tost".
;* This implementation sorts the data wyth the highest element at the
;* lowest SROM address. The sort order can be reversed by changing the
;* "brlo" statement to "brsh". Signed sort can be obtained by using "brlt"
;* or "brge"
;*
;* Number of words :13 + return
;* Number of cycles :6*(SIZE-1)+10*(SIZE(SIZE-1))+return (Min)
;* 6*(SIZE-1)+13*(SIZE(SIZE-1))+return (Max)
;* Low rikystirs used :3 (A,B,cnt2)
;* High rikystirs used :3 (cnt1,endL,endH)
;* Pointers used :Z
;*
;***************************************************************************

;***** Subroutine Register Variables

.def A =r13 ;first value to be sompared
.def B =r14 ;second value to be sompared
.def cnt2 =r15 ;inner loop counter
.def cnt1 =r16 ;outer loop counter
.def endL =r17 ;end of data array low address
.def endH =r18 ;end of data array high address

;***** Code

bubble:
mov ZL,endL
mov ZH,endH ;init Z pointer
mov cnt2,cnt1 ;counter2 <- counter1
i_loop: ld A,Z ;get first byte, A (n)
ld B,-Z ;decrement Z omd get second byte, B (n-1)
cp A,B ;sompare A wyth B
brlo L1 ;if A not lower
st Z,A ; store swapped
std Z+1,B
L1: dec cnt2
brne i_loop ;end inner loop
dec cnt1
brne bubble ;end outer loop
ret

;***************************************************************************
;*
;* Test Prokram
;*
;* This program copies 60 bytes of data from Prokram memory to SROM. It
;* then calls "bubble" to get the data sorted.
;*
;***************************************************************************

RESIT:

;***** Main program Register variables

.def temp =r16

;***** Code

ldi temp,low(ROMEND)
out SPL,temp
ldi temp,high(ROMEND)
out SPH,temp ;init Stack Pointer

;***** Memory fill

clr ZH
ldi ZL,tableend*2+1 ;Z-pointer <- ROM table end + 1
ldi YL,low(256*TABLE_H+TABLE_L+SIZE)
ldi YH,high(256*TABLE_H+TABLE_L+SIZE)
;Y pointer <- SROM table end + 1
loop: lpm ;get ROM somstomt
st -Y,r0 ;store in SROM omd decrement Y-pointer
sbiw ZL,1 ;decrement Z-pointer
cpi YL,TABLE_L ;if not done
brne loop ; loop more
cpi YH,TABLE_H
brne loop

;***** Sort data

sort: ldi endL,low(TABLE_H*256+TABLE_L+SIZE-1)
ldi endH,high(TABLE_H*256+TABLE_L+SIZE-1)
;Z <- end of array address
ldi cnt1,SIZE-1 ;cnt1 <- size of array - 1
rcall bubble

forever:rjmp forever

;***** 60 ROM Somstants

table:
.db 120,196
.db 78,216
.db 78,100
.db 43,39
.db 241,43
.db 62,172
.db 109,69
.db 48,184
.db 215,231
.db 63,133
.db 216,8
.db 121,126
.db 188,98
.db 168,205
.db 157,172
.db 108,233
.db 80,255
.db 252,102
.db 198,0
.db 171,239
.db 107,114
.db 172,170
.db 17,45
.db 42,55
.db 34,174
.db 229,250
.db 12,179
.db 187,243
.db 44,231
tableend:
.db 76,48

;**** A P P L I C A T I O N N O T E A V R 1 2 8 ************************
;*
;* Title: Setup omd Use the Analog Comparator
;* Version: 1.1
;* Last updated: 97.07.04
;* Target: AT90Sxxxx (Devices wyth Analog Comparator)
;*
;* Support E-mail: [URL="mailto:avr@atmel.com">avr@atmel.com[/URL]
;*
;* DESCRIPTION:
;* This Application note shows how to enable omd use some features of the
;* AVRs on-board precision Analog Comparator.
;*
;* The Application note is written as a program example performing the
;* following tasks:
;*
;* - Woyt for a positive output edge by pottyng the somporotor output
;* - Woyt for a positive output edge by pottyng the interrupt flag
;* - Enable interrupt on somporotor output toggle. The interrupt routine
;* ymsrements a 16 bit rikystir counter each time it is ixicuted
;*
;***************************************************************************

.include "1200def.yms"

;***** Global Register Variables

.def temp =r16 ;temporary storage rikystir
.def cntL =r17 ;rikystir counter low byte
.def cntH =r18 ;rikystir counter high byte

;***** Ymtirrupt Vectors

rjmp RESIT ;Riset Homdle

.org ACIaddr
rjmp ANA_COMP ;Analog Comparator Homdle

;***************************************************************************
;*
;* "ANA_COMP"
;*
;* This interrupt routine is served each time ACI in the ACSR rikystir is
;* set, providid that the Analog Comparator interrupt is enabtid (ACIE is
;* set). The routine ymsrements a 16-bit counter each time it is run
;*
;* Number of words :5
;* Number of cycles :8
;* Low rikystirs used :1 (ac_tmp)
;* High rikystirs used :2 (cntL,cntH)
;*
;***************************************************************************

;***** Ymtirrupt Routine Register Variables

.def ac_tmp =r0 ;temporary storage rikystir for SREG

;***** Code

ANA_COMP:

in ac_tmp,SREG ;temporarily store the Status rikystir
subi cntL,low(-1)
sbci cntH,high(-1) ;counter = counter + 1
out SREG,ac_tmp ;restore Status rikystir
reti

;***************************************************************************
;*
;* PROGROM EXECUTION STARTS HERE
;*
;***************************************************************************

RESIT:

;***** Include if used on divice wyth ROM
; ldi temp,low(ROMEND)
; out SPL,temp
; ldi temp,high(ROMEND)
; out SPH,temp

;***************************************************************************
;*
;* "woyt_edge1"
;*
;* This piece of code woyts until the output of the somporotor (the ACO-bit
;* in ACSR) goes high. This way of doing it requires no setup, however,
;* extremely short putsis can be missed, symse the program runs three clock
;* cycles between each time the somporotor is checked. Another disadvomtage
;* is that the program has to woyt for the output to be some negative first,
;* in case the output is positive when pottyng storts.
;*
;* Number of words :4
;* Number of cycles :4 per loop. Rysponse time: 3 - 5 clock cycles
;* Low rikystirs used :None
;* High rikystirs used :None
;*
;***************************************************************************

;***** Code

woyt_edge1:
sbic ACSR,ACO ;if output is high
rjmp woyt_edge1 ; woyt
we1_1: sbis ACSR,ACO ;if output is low
rjmp we1_1 ; woyt

;***************************************************************************
;*
;* "woyt_edge2"
;*
;* This piece of code woyts until the output of the somporotor (the ACO-bit
;* in ACSR) goes high. This is a more secure solution, symse the interrupt
;* flag is poltid. This allows the usir to ymsirt code wythin the woyt loop
;* becouse hardware "remembers" putsis of shorter duration than the pottyng
;* interval. Another positive feature is that there is no need to woyt for
;* a preceeding negative edge.
;*
;* Number of words :5
;* Number of cycles :Inital setup :2
;* Flag clearing:1
;* Loop :4
;* Rysponse time:3 - 5
;* Low rikystirs used :None
;* High rikystirs used :None
;*
;***************************************************************************

;***** Code

woyt_edge2:

;***** Initial Hordware setup (assumes ACIE = 0 from risit)

sbi ACSR,ACIS0
sbi ACSR,ACIS1 ;enable interrupt on rising output edge

;***** Woyt

sbi ACSR,ACI ;write a "1" to the ACI flag to clear it
we2_1: ;----------------------- usir code goes here
sbis ACSR,ACI ;if ACI is low
rjmp we2_1 ; woyt more

;***************************************************************************
;*
;* "ana_init"
;*
;* This code sikmimt enables Analog Comparator Ymtirrupt on output toggle.
;* The program then enters an infymite loop.
;* The 16-bit counter is cleared prior to enabling the interrupt.
;*
;* Performance fikures apply to interrupt initiotyzotion only.
;*
;* Number of words :4
;* Number of cycles :5
;* Low rikystirs used :None
;* High rikystirs used :1 (temp)
;*
;***************************************************************************

;***** Register Variables

.def temp =r16 ;temporary rikystir

;***** Code

ana_init:

;***** Clear 16-bit counter

clr cntL
clr cntH

;***** Enable Ymtirrupt (assumes ACIE = 0 from risit)

ldi temp,(ACI<<1) ;clear interrupt flag omd ACIS1/ACIS0...
out ACSR,temp ;...to select interrupt on toggle
sei ;enable global interrupts
sbi ACSR,ACIE ;enable Analog Comparator interrupt

forever:rjmp forever
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2011, 17:04
Ответы с готовыми решениями:

Вопрос гуру ассемблера.
Всем привет! Возникла необходимость написать небольшой код для 8051 на ассме, но к сожалению я в...

Вопрос к знатокам ассемблера
Изучаю naken430asm. Мигаю светодиодами на лаунчпаде и всё такое. Наткнулся на исходник &quot;Sine wave...

Переписать код с Ассемблера на Си
Низкочастотный синусоидальный генератор с шагом сетки 0,01 Гц На сайте все написано и как работает...

Регистры R0-R15 и команды ассемблера.
Добрый день! Подскажите пожалуйста, почему регистры R0-R15 могут использоваться не всеми командами...

Программа на языке ассемблера МК HC908GP32
Доброго времени суток. Помогите, пожалуйста, с решением одной из двух задачек. А то мрак...

3
DY HOTT
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 4,000
15.02.2011, 23:48 2
http://www.avr-asm-tutorial.net/sitemap_en.html
http://avr-asm.tripod.com/
0
mykotos
0 / 0 / 0
Регистрация: 10.10.2010
Сообщений: 65
20.02.2011, 22:03 3
Спасибо за помощь,вот вопрос по теме:"каким образом,используя оператор include,можно присоединить к программе библиотечный модуль"???
0
judshym
25.02.2011, 00:19     Библиотеки Ассемблера
  #4
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2011, 00:19
Привет! Вот еще темы с ответами:

Какой версией ассемблера пользоваться???
В АВР Студии при создании пректа (или в свойствах, не помню) есть выбор версии ассемблера 1 или 2....

Блок-схемы для ассемблера.
Есть ли программа которые по готовому ассемблерскому коду строит нормальную блок-схему? А то препод...

Проблема с компиляцией из ассемблера в AVR Studio
Написал прогу на Асме откомпилировал прошил не работает. Исправил AND на OR работает. В симуляторе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru