beam |
Отправлено: 23 Января, 2014 - 03:16:13
|
Главнокомандующий
Сообщений всего: 278
Дата рег-ции: Дек. 2009
|
Привет!Извиняюсь за КРАКОЗЯБРИКОВ =))))..Проблема состоит в следующем: -Зашол в тупик! Надо управлять сервоприводами,но заранее записав сценарий их поворотов на разные углы в массив и вызывая прерыванием каждую секунду новую строку, .DB оттуда мне надо их считать и подать на регистры сравнения OCRxx. ШИМ настроен на работу с сервоприводами..и работает безотказно!!..а вот вывести из массива числа длинный импульсов я немогу((( Буду благодарен любой помощи)))спс
.include "m1280def.inc"
.equ I=2500
;Векторы прерываний
.dseg
.cseg
.org 0x0000
rjmp RESET ; Reset Handler
.org 0x0002 ; IRQ0 Handler
reti
.org 0x0004; IRQ1 Handler
reti
.org 0x0006 ; IRQ2 Handler
reti
.org 0x0008 ; IRQ3 Handler
reti
.org 0x000A ; IRQ4 Handler
reti
.org 0x000C ; IRQ5 Handler
reti
.org 0x000E ; IRQ6 Handler
reti
.org 0x0010 ; IRQ7 Handler
reti
.org 0x0012 ; PCINT0 Handler
reti
.org 0x0014 ; PCINT1 Handler
reti
.org 0x0016 ; PCINT2 Handler
reti
.org 0X0018 ; Watchdog Timeout Handler
reti
.org 0x001A ; Timer2 CompareA Handler
reti
.org 0x001C ; Timer2 CompareB Handler
reti
.org 0x001E ; Timer2 Overflow Handler
rjmp DELAY1
.org 0x0020 ; Timer1 Capture Handler
reti
.org 0x0022 ; Timer1 CompareA Handler
reti
.org 0x0024 ; Timer1 CompareB Handler
reti
.org 0x0026 ; Timer1 CompareC Handler
reti
.org 0x0028 ; Timer1 Overflow Handler
reti
.org 0x002A ; Timer0 CompareA Handler
reti
.org 0x002C ; Timer0 CompareB Handler
reti
.org 0x002E ; Timer0 Overflow Handler
reti
.org 0x0030 ; SPI Transfer Complete Handler
reti
.org 0x0032 ; USART0 RX Complete Handler
reti
.org 0x0034 ; USART0,UDR Empty Handler
reti
.org 0x0036 ; USART0 TX Complete Handler
reti
.org 0x0038 ; Analog Comparator Handler
reti
.org 0x003A ; ADC Conversion Complete Handler
reti
.org 0x003C ; EEPROM Ready Handler
reti
.org 0x003E ; Timer3 Capture Handler
reti
.org 0x0040 ; Timer3 CompareA Handler
reti
.org 0x0042 ; Timer3 CompareB Handler
reti
.org 0x0044 ; Timer3 CompareC Handler
reti
.org 0x0046 ; Timer3 Overflow Handler
reti
.org 0x0048 ; USART1 RX Complete Handler
reti
.org 0x004A ; USART1,UDR Empty Handler
reti
.org 0x004C ; USART1 TX Complete Handler
reti
.org 0x004E ; 2-wire Serial Handler
reti
.org 0x0050 ; SPM Ready Handler
reti
.org 0x0052 ; Timer4 Capture Handler
reti
.org 0x0054 ; Timer4 CompareA Handler
reti
.org 0x0056 ; Timer4 CompareB Handler
reti
.org 0x0058 ; Timer4 CompareC Handler
reti
.org 0x005A ; Timer4 Overflow Handler
reti
.org 0x005C ; Timer5 Capture Handler
reti
.org 0x005E ; Timer5 CompareA Handler
reti
.org 0x0060 ; Timer5 CompareB Handler
reti
.org 0x0062 ; Timer5 CompareC Handler
reti
.org 0x0064 ; Timer5 Overflow Handler
reti
.org 0x0066 ; USART2 RX Complete Handler
reti
.org 0x0068 ; USART2,UDR Empty Handler
reti
.org 0x006A ; USART2 TX Complete Handler
reti
.org 0x006C ; USART3 RX Complete Handler
reti
.org 0x006E ; USART3,UDR Empty Handler
reti
.org 0x0070 ; USART3 TX Complete Handler
in r16, MCUCR
mov r17, r16
; Enable change of Interrupt Vectors
ori r16, (1<<IVCE)
out MCUCR, r16
; Move interrupts to Boot Flash section
ori r16, (1<<IVSEL)
out MCUCR, r17
ret
ldi r16,0b10000000
sts XMCRA,r16
ldi r16, high(RAMEND) ; Main program start
out SPH,r17 ; Set Stack Pointer to top of RAM
ldi r16, low(RAMEND)
out SPL,r16
clr r16
///////////////////////
ldi XH,High(SC1*2)
ldi XL,low(SC1*2)
movw ZH:ZL,XH:XL
DELAY1:
cli
LPM r16,Z+
sts OCR1AL,r16
LPM r16,Z+
sts OCR1BL,r16
LPM r16,Z+
sts OCR1CL,r16
////
LPM r16,Z+
sts OCR3AL,r16
LPM r16,Z+
sts OCR3BL,r16
LPM r16,Z+
sts OCR3CL,r16
////
LPM r16,Z+
sts OCR4AL,r16
LPM r16,Z+
sts OCR4BL,r16
LPM r16,Z+
sts OCR4CL,r16
////////
LPM r16,Z+
sts OCR5AL,r16
LPM r16,Z+
sts OCR5BL,r16
LPM r16,Z+
sts OCR5CL,r16
sei
reti
RESET:
;КОНФИНУРАЦИЯ ПОРТОВ////////////////////////// //////
ldi r16,0b11111111
out DDRB,r16
ldi r16,0b11101111
out DDRD,r16
ldi r16,0b11111111
out DDRE,r16
ldi r16,0b11111111
sts DDRH,r16
ldi r16,0b11111111
sts DDRL,r16
sei
;НАСТРОЙКА ТАЙМЕРА 2
ldi r16,0b000000101
sts TCCR2B,R16
ldi r16,(1<<TOIE2)
sts TIMSK2,r16
ldi r16,0b000010000
sts ASSR,r16
;НАСТРОЙКА ТАЙМЕРА 1///////////////////////////////
ldi r16,0b10101010
sts TCCR1A,r16
ldi r16,0b10111010
sts TCCR1B,r16
ldi r16,0b00000000
ldi r16,High(I)
sts ICR1H,r16
ldi r17,Low(I)
sts ICR1L,r17
;НАСТРОЙКА ТАЙМЕРА 3/////////////////////////////// /
ldi r16,0b10101010
sts TCCR3A,r16
ldi r16,0b10111010
sts TCCR3B,r16
ldi r16,0b00000000
ldi r16,High(I)
sts ICR3H,r16
ldi r17,Low(I)
sts ICR3L,r17
;НАСТРОЙКА ТАЙМЕРА 4/////////////////////////////// /
ldi r16,0b10101010
sts TCCR4A,r16
ldi r16,0b10111010
sts TCCR4B,r16
ldi r16,0b00000000
ldi r16,High(I)
sts ICR4H,r16
ldi r17,Low(I)
sts ICR4L,r17
;НАСТРОЙКА ТАЙМЕРА 5/////////////////////////////// //
ldi r16,0b10101010
sts TCCR5A,r16
ldi r16,0b10111010
sts TCCR5B,r16
ldi r16,0b00000000
ldi r16,High(I)
sts ICR5H,r16
ldi r17,Low(I)
sts ICR5L,r17
;IANO?IEEA I?A?UAAIEE
ldi r16,(1<<ICIE1)
sts TIMSK3,r16
m10:
rjmp m10
SC1:
.DB 0x10,0x10, 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10
.DB 0x10,0x17, 0x10,0x10,0x10,0x15,0x10,0x10,0x10,0x10,0x1E,0x10 |
|
|
cjA |
Отправлено: 23 Января, 2014 - 22:32:31
|
Генерал
Сообщений всего: 3291
Дата рег-ции: Янв. 2010
|
ну скажем не все "стеком" пользуются, есть и прогмем, и еепром
beam, с вас пиво Майклу. Раз он зацепился за Вашу программу, то как истинный перфекционист, заставит Вас сделать ее идеальной.
(Добавление)
beam пишет:.а вот вывести из массива числа длинный импульсов я немогу((( неграмотно со стороны нативного, (русского) языка.
(Добавление)
Ага!
;НАСТРОЙКА ТАЙМЕРА 5/////////////////////////////// //
то есть это не мега8? Ну и славно, умываю руки.
это хорошее решение, сделать нулевой майн и все отдать на откуп прерываниям, но и сам МК не всесилен.
Я подозреваю что AVR просто не может одновременно обрабатывать пять таймеров. ИМНО.
(Добавление)
Должна быть деректива вроде что это данные находящиеся в сегменте программы, но как она пишется я уже забыл. Ковыряю Си, но все равно грил и буду- асм своего мога нужно знать.
А чем компилишь? |
|
|
beam |
Отправлено: 24 Января, 2014 - 00:11:16
|
Главнокомандующий
Сообщений всего: 278
Дата рег-ции: Дек. 2009
|
Делаю все в Авр Студио и тестю протеусом..ктото может толком обьяснить принцип обращения к строкам или к жвум массивам ,,,или может ссылку подкинуть?)ато ничего немогу найти
(Добавление)
У меня массив 5 строк на 12 пакетов , при чтени регистр декрементирую от12 до 0и получается конец строчки, потом обнуляю рег счетчик и иду на 2ю строку.. Но ничего невыходит
(Добавление)
Не от 12 до 0 ,,,а от 0 до 5)))
(Добавление)
Может книги какието есть, по аврАМ ,толковые,,?))я читаю щас Мортона
(Добавление)
Кстати насчет одновремменной обработки 5ти таймеров,,?на самом деле мк может непотянуть ???или это догадки..Жду обоснования высказывания cjA))))
(Добавление)
И какое пиво какому Майклу?))) |
|
|
|