реклама на сайте
подробности

 
 
> Начинаю учить AVR, дайте пинка в нужную сторону
pavel-pervomaysk
сообщение Dec 28 2007, 19:30
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Всем привет , решил я начать с простого задания , а именно помигать светодиодом на меге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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adc
сообщение Dec 29 2007, 07:27
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(Павлик @ 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

Сообщение отредактировал adc - Dec 29 2007, 07:29


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016