Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Начинаю учить AVR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
pavel-pervomaysk
Всем привет , решил я начать с простого задания , а именно помигать светодиодом на меге8 , исходник на асме прилагаю , поправьте плиз , что не так я думаю что неправильно настроил порты wub.gif от того светится постоянно только один светодиод

.nolist
.include c:\avr "m8def.inc"
.list

.def temp = r16 ;
.def temp2 = r17 ;

.equ LED_1 = PB1 ;
.equ LED_2 = PB2 ;






.cseg

.org 0

rjmp reset ; Reset Vector


reset:
ldi temp,LOW(RAMEND) ; Init Stack Pointer
out spl,temp

ldi temp,$FC
out DDRB,temp
out PortB,temp

ldi temp,$FF
out DDRD,temp
clr temp2

main: clr temp

cbi PortB,1 ;

rcall wait

sbi PortB,1

rcall wait
rjmp main

wait: ldi temp2,255 ;
wait1:
dec temp2
brne wait1
ret
arttab
Давненько я на асме не кодил...
Цитата
ldi temp,$FC
out DDRB,temp
out PortB,temp

то есть на выводы
Цитата
PB1 ;
и
Цитата
PB2 ;
на вход

а здесь
ldi temp,$FF
out DDRD,temp
порт D на выход

а тут

Цитата
cbi PortB,1 ;

Цитата
sbi PortB,1

в единичку нолик вывод B0 пытаемся дергать что ,собственно, бесполезно поскольку PORT B настроен как вход

наверно, что то тут не так... очепятка где то
pavel-pervomaysk
спасибо за подсказку , порт Д у меня далее будет на индикатор идти , сейчас не вьеду как настроить отдельные выводы на выход побитно sad.gif
adc
Цитата(Павлик @ Dec 28 2007, 22:30) *
ldi temp,LOW(RAMEND) ; Init Stack Pointer
out spl,temp

Если я не ошибаюсь, то в меге 8 1К озу, значит стек 16-ти битный. следовательно:
Код
    
ldi   temp,LOW(RAMEND); Init Stack Pointer
out   spl,temp
ldi   temp,high(RAMEND); Init Stack Pointer
out   sph,temp



Можно вот так:
Код
.nolist
.include  c:\avr "m8def.inc"
.list
.def   temp  = r16;
.def   temp2 = r17;
.equ   LED_1 = 1;
.equ   LED_2 = 2;
.cseg
.org    0
rjmp    reset; Reset Vector
reset:
ldi   temp,LOW(RAMEND); Init Stack Pointer
out   spl,temp
ldi   temp,high(RAMEND); Init Stack Pointer
out   sph,temp

ldi   temp,(1<<LED_1|1<<LED_2|)
out   DDRB,temp
out   PortB,temp//на выходе единица (высок.уров)
main:    clr   temp
cbi   PortB,1;
rcall wait
sbi   PortB,1
rcall wait
rjmp  main
wait:   ldi  temp2,255;
wait1: dec  temp2
brne wait1
ret


Мне почемуто кажется что у Вас не мега 8 (как написанно в .include c:\avr "m8def.inc") а тини2313. И еще.. слижком уж маленькая задержка для мигания.. Какая у вас тактовая частота? кварц? к примеру 8МГц следовательно 8000000 поделить на количество тактов, и посчитать длительность задержки..: 8000000/(255*4)=7.8КГц отсюда задержка 1/7.8КГц=128мкс! это мигание на глаз вы не увидите... biggrin.gif
pavel-pervomaysk
насчет задержки я понял , частота у меня на внутреннем 1мГц , то есть все равно частота будет большой a14.gif , спасибо за подсказку , ато я не знал даже как ее вычислять .
Вечером буду пробовать , о результатах сообщу
sergeeff Jr.
Вот тут глянь
http://g24-tec.com/files/G24-ATM8-Examples-RevA.pdf
Как раз про диодики есть и как раз на асме...
pavel-pervomaysk
все получилось 08.gif спасибо за подсказки ребята ! beer.gif нашел правда подпрограмки на задержки и приклеил их

[...skipped...]
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.