Помогите С Сердцем

24-12-2012, 22:28 От: admin Посмотрели: 895
Решил сделать сердце для девушки Помогите С Сердцем , подправил немного программу из книги Белова. Алгоритм такой: бегущий огонь вправо, затем три по два импульса типо удары сердца))  В протеусе вроде мигает почти как надо( огонь бежит, потом три раза моргает но почему-то по разу), а вот в железе нет только слабое свечение диодов(

Вот исходный код, во вложении плата в lay. помогите разобраться в чем проблема?)



.include "tn2313def.inc" ; Присоединение файла описаний
.list ; Включение листинга

.def temp = r16 ; Определение главного рабочего регистра
.def rab = r17 ; Определение рабочего регистра

.equ kdela = 1560
.equ kdelb = 3800
.equ kdelc = 7800

;------------------------- Начало программного кода

.cseg ; Выбор сегмента программного кода
.org 0 ; Установка текущего адреса на ноль

;-------------------------- Инициализация стека

ldi temp, 0x7F ; Выбор адреса вершины стека
out SPL, temp ; Запись его в регистр стека

;-------------------------- Инициализация Главного предделителя

ldi temp, 0x80 ; Записываем число $80 в регистр temp
out CLKPR, temp ; Записываем в регистр CLKPR
ldi temp, 0 ; Записываем 0 в регистр temp
out CLKPR, temp ; Записываем этот ноль в CLKPR

;-------------------------- Инициализация портов ВВ
ldi temp, 0xFF ; Записываем FF в регистр temp

out DDRD, temp ; Записываем FF в DDRD (порт PD на вывод)
out DDRB, temp ; Записываем это число в DDRB (порт PB на вывод)
out PORTD, temp
out PORTB, temp ; Записываем то же число в PORTB (потушить светодиод)



;-------------------------- Инициализация таймера T1

ldi temp, 0x05
out TCCR1B, temp

;--------------------------- Инициализация компаратора

ldi temp, 0x80 ; Выключение компаратора
out ACSR, temp

;------------------------- Начало основного цикла программы



;------------------------- Сдвиг вправо PB

main: ldi rab, 0b10000000 ; Запись начального значения
m2: ldi temp, 0xFF
eor temp, rab
out PORTB, temp ; Вывод текущего значения в порт PB
rcall wait1 ; Задержка
lsr rab ; Сдвиг содержимого рабочего регистра
brcc m2 ; Если не дошло до конца регистра продолжить
ldi temp, 0xFF
out PORTB, temp

;------------------------- Сдвиг вправо PD

ldi rab, 0b00100000 ; Запись начального значения
m4: ldi temp, 0xFF
eor temp, rab
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait1 ; Задержка
lsr rab ; Сдвиг содержимого рабочего регистра
brcc m4 ; Если не дошло до конца регистра продолжить
ldi temp, 0xFF
out PORTD, temp

;--------------------------------- Биение сердца

ldi temp, 0
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait1
ldi temp, 0xFF
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait1
ldi temp, 0
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait1
ldi temp, 0xFF
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait3

ldi temp, 0
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait1
ldi temp, 0xFF
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait1
ldi temp, 0
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait1
ldi temp, 0xFF
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait3


ldi temp, 0
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait1
ldi temp, 0xFF
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait1
ldi temp, 0
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait1
ldi temp, 0xFF
out PORTB, temp ; Вывод текущего значения в порт PB
out PORTD, temp ; Вывод текущего значения в порт PD
rcall wait3
rjmp main ; На начало


;--------------------------------- Подпрограмма задержки 1

wait1: push temp ; Сохраняем содержимое регистра temp

ldi temp, 0 ; Помещаем temp ноль
out TCNT1H, temp ; Записываем этот ноль в старший регистр таймера
out TCNT1L, temp ; Записываем этот ноль в младший регистр таймера

wt1: in temp, TCNT1L ; Считываем младшую половину счетного регистра
cpi temp, low(kdela) ; Сравниваем с младшей частью константы
brlo wt1 ; Переход, если temp меньше low(kd)
in temp, TCNT1H ; Считываем старшую половину счетного регистра
cpi temp, high(kdela); Сравниваем со старшей частью константы
brlo wt1 ; Переход, если temp меньше high(kd)

pop temp ; Восстанавливаем значение регистра temp
ret ; Выход из подпрограммы


;--------------------------------- Подпрограмма задержки 2

wait2: push temp ; Сохраняем содержимое регистра temp

ldi temp, 0 ; Помещаем temp ноль
out TCNT1H, temp ; Записываем этот ноль в старший регистр таймера
out TCNT1L, temp ; Записываем этот ноль в младший регистр таймера

wtt1: in temp, TCNT1L ; Считываем младшую половину счетного регистра
cpi temp, low(kdelb); Сравниваем с младшей частью константы
brlo wtt1 ; Переход, если temp меньше low(kd)
in temp, TCNT1H ; Считываем старшую половину счетного регистра
cpi temp, high(kdelb); Сравниваем со старшей частью константы
brlo wtt1 ; Переход, если temp меньше high(kd)

pop temp ; Восстанавливаем значение регистра temp
ret ; Выход из подпрограммы


;--------------------------------- Подпрограмма задержки 3

wait3: push temp ; Сохраняем содержимое регистра temp

ldi temp, 0 ; Помещаем temp ноль
out TCNT1H, temp ; Записываем этот ноль в старший регистр таймера
out TCNT1L, temp ; Записываем этот ноль в младший регистр таймера

wttt1: in temp, TCNT1L ; Считываем младшую половину счетного регистра
cpi temp, low(kdelc) ; Сравниваем с младшей частью константы
brlo wttt1 ; Переход, если temp меньше low(kd)
in temp, TCNT1H ; Считываем старшую половину счетного регистра
cpi temp, high(kdelc); Сравниваем со старшей частью константы
brlo wttt1 ; Переход, если temp меньше high(kd)

pop temp ; Восстанавливаем значение регистра temp
ret ; Выход из подпрограммы

Прикрепленные файлы:




Раздел: AVR

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Помогите С Сердцем все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Апрель 2024    »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930