Описание: Нужна помощь по программированию |
Поиск в теме | Версия для печати |
sibiryak |
Отправлено: 14 Июня, 2011 - 23:03:01
|
Главнокомандующий
Сообщений всего: 248
Дата рег-ции: Февр. 2011
|
; ================================ ============
; I N T E R R U P T S E R V I C E S
; ================================ ============
;
; [Add all interrupt service routines here]
EXT_INT0:
cli
ldi flag,00000001b [/color]При компиляции тут ошибка
spi [color=red] тут может sbi ?
reti
;
; ================================ ============
; M A I N P R O G R A M I N I T
; ================================ ============
;
Main:
; Init stack
ldi rmp, HIGH(RAMEND) ; Init MSB stack
out SPH,rmp
ldi rmp, LOW(RAMEND) ; Init LSB stack
out SPL,rmp
; Init Port c
ldi rmp,00001111b ; Direction Port c [color=red][/color]И везде где ldi встречается
out DDRc,rmp
ldi rmp,11110000b
out portc,rmp
ldi rmp,0b
out ddrd,rmp
ldi rmp,00000100b
out portd,rmp
ldi pos,11110001b
ldi flag,00000000b
ldi rmp, 1<<ISC01 ;po spadu 1-0
out MCUCR,rmp
ldi rmp, 1<<INT0 ;razreschim int0
out GIMSK,rmp
sei
;
; ================================ ============
; P R O G R A M L O O P
; ================================ ============
;
Loop:
cpi flag, 1
brne loop
out portc,pos
nop
nop
ldi rmp,11110000b
out portc,rmp
sbrs pos,0
rjmp m1
ldi pos,11110010b
rjmp ex_loop
m1:
sbrs pos,1
rjmp m2
ldi pos,11110100b
rjmp ex_loop
m2:
sbrs pos,2
rjmp m3
ldi pos,11111000b
rjmp ex_loop
m3:
ldi pos,11110001b
ex_loop:
ldi flag,0h
rjmp loop ; go back to loop
;
; End of source code
;(Отредактировано автором: 14 Июня, 2011 - 23:05:39) |
|
|
killgur |
Отправлено: 15 Июня, 2011 - 09:45:02
|
Гуру
Сообщений всего: 1189
Дата рег-ции: Февр. 2010
|
sibiryak пишет:nest пишет:sibiryak, тогда запись байта неверная 00001111b
пишется всё так:
0b00001111 - двоичное
0xXX - 16-тиричное
С этим разобрался, осталась одна ошибка - E:\AVR\gl,j\gl,j.asm(98): error: spi: Unknown instruction or macro
spi - помоему нет такой функции. Тогда что там имелось ввиду ?
Вот в этом участке:
; ================================ ============
; I N T E R R U P T S E R V I C E S
; ================================ ============
;
; [Add all interrupt service routines here]
EXT_INT0:
cli
ldi flag,00000001b ;поднимаем флаг
spi
reti
;
; ================================ ============
; M A I N P R O G R A M I N I T
; ============================================
Это очепятка
должен быть
писал коментарии прямо в сообщении затер эту строчку и написал почему то не то.... 80 .
А c какой стороны ставить b это от компилятора похоже зависит.
В моем как выяснилось после двоичного b, после шестнадцатиричного h, после десятичного ничего.
Видел так же варианты типа $F0 в одном компиляторе.(Отредактировано автором: 15 Июня, 2011 - 10:00:18) |
|
|
sibiryak |
Отправлено: 15 Июня, 2011 - 11:26:04
|
Главнокомандующий
Сообщений всего: 248
Дата рег-ции: Февр. 2011
|
Теперь компилируется
Но останавливается в этом месте
; ================================ ============
; P R O G R A M L O O P
; ================================ ============
;
Loop:
cpi flag, 1
brne loop
out portc,pos
nop
nop
ldi rmp,0b11110000
out portc,rmp
sbrs pos,0
rjmp m1
ldi pos,0b11110010
rjmp ex_loop
m1:
sbrs pos,1
rjmp m2
ldi pos,0b11110100
rjmp ex_loop
m2:
sbrs pos,2
rjmp m3
ldi pos,0b11111000
rjmp ex_loop
m3:
ldi pos,0b11110001
ex_loop:
ldi flag,0b0
rjmp loop ; go back to loop
;
; End of source code
; |
|
|
sibiryak |
Отправлено: 15 Июня, 2011 - 14:34:07
|
Главнокомандующий
Сообщений всего: 248
Дата рег-ции: Февр. 2011
|
killgur пишет:Что значит "компилируется но останавливается" ?
Компилируется как надо.
А при выполнении программы пошагово в АВР студии на этом моменте перескакивает на шаг назад
; ================================ ============
; P R O G R A M L O O P
; ================================ ============
;
Loop:
cpi flag, 1 ; если флаг не установлен
brne loop ; ничего не делаем
out portc,pos ; зажигаем
nop ;ничего умнее не придумал
nop ;снова
ldi rmp,11110000b
out portc,rmp ;гасим
Я конечно не знаю может так и надо.
killgur пишет:попробуйте закоментировть указанные строки для начала
Комментировал ничего не происходит.
killgur пишет:и не землю подавать на ногу PD2 а положительный импульс по спаду которого и будет реакция
А как подать положительный импульс если на pd 2 итак висит полож. импульс ?
ldi rmp,0b ; порт д будет входом D
out ddrd,rmp
ldi rmp,00000100b ; просто для очистки совести
out portd,rmp
(Добавление)
killgur пишет:
; =============================
; delay loop generator
; 4000 cycles:
; -----------------------------
; delaying 3999 cycles:
ldi R17, $1F
WGLOOP0: ldi R18, $2A
WGLOOP1: dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 1 cycle:
nop
; =============================
А как и куда это записать ? И что такое U2 ?
(Добавление)
А можно пример с простой кнопкой, нажал горит PC0, второй раз нажал горит PC1 и так далее ? |
|
|
|
Поиск в теме | Версия для печати |
Страниц (7): « 1 2 3 [4] 5 6 7 » |
« Программирование микроконтроллеров » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|