Вверх ↑
Этот топик читают: Гость
Ответов: 5227
Рейтинг: 587
#16: 2008-05-27 19:45:41 ЛС | профиль | цитата
Tad, спасибо но увы непомогло, только коментируешь процедуру всё компелируется (хотя такой цикл гораздо привлекательней). Не могу объявить процедуры в начале файла, private нет такого ключевого слова в этом компиляторе, есть наверно другие способы но пока их незнаю, в примерах исходников не нашёл, ладно переделаю пока программу, время ещё есть
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 16884
Рейтинг: 1239
#17: 2008-05-27 19:54:27 ЛС | профиль | цитата
А PINC.2 где опрашивается ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 5227
Рейтинг: 587
#18: 2008-05-27 20:04:10 ЛС | профиль | цитата
в любом цикле эфектов, хотя можно и на прерывание по таймеру повесить к остальным кнопкам.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 16884
Рейтинг: 1239
#19: 2008-05-27 20:10:34 ЛС | профиль | цитата
повесь
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 5227
Рейтинг: 587
#20: 2008-05-27 20:18:17 ЛС | профиль | цитата
Tad, такой цикл мне не подошёл, приходится удерживать кнопку нажатой до конечной точки бега светодиода, а при маленькой скорости это долго


#pas
while PINC.2=0 do
begin
for i:=0 to 15 do
begin
PORTA := Lo (pe);
PORTB := Hi (pe);
for t:=0 to time do Delay_ms(1); // задержка между переключением
pe := pe/2; //сдвигаем бит через деление
end;
pe :=32768;
end;

end;

------------ Дoбавленo:


о блин всё в кучу собрало
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 16884
Рейтинг: 1239
#21: 2008-05-27 21:00:11 ЛС | профиль | цитата
Ну так запомнить нажатие (чтобы не держать)
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Гость
Ответов: 17029
Рейтинг: 0
#22: 2008-05-27 21:01:03 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-09 06:05:42
карма: 0

0
Ответов: 9906
Рейтинг: 351
#23: 2008-05-27 23:06:34 ЛС | профиль | цитата
andrestudiо писал(а):
ASM была не параноя а логически правельное решение

Правильное решение - вытравить тараканов из головы, когда тебе про "кольцевания" в HiAsm рассказывали
А ты говорил, что тебе "так больше нравится"

Без гарантий: code_9159.txt
------------ Дoбавленo:

andrestudio писал(а):
... немогу прыгнуть из цикла в процедуре "procedure Led_Out_Cent;" в процедуру procedure Right_Led;

andrestudio, у меня нет сомнений, что ты обратил внимание на факт именений в своем стартовом посте
А на содержание посмотреть, религия не позволяет

Коды оттуда ПОЗВОЛЯЮТ прыгнуть. Все обязано компилироваться
Но хоть так, хоть на asm jmp-е - "кольцевания" останутся.
Все обязательно КРЯКНЕТ (когда память на стек закончится), хотя и не сразу, с паузами-то по 0.5 секунды...
карма: 9

1
файлы: 1code_9159.txt [3.7KB] [256]
Голосовали:andrestudio
Ответов: 5227
Рейтинг: 587
#24: 2008-05-27 23:37:57 ЛС | профиль | цитата
Galkov, Здраствуйте!

Да, видел содержание, пробовал таким образом процедуры объявить но компилятор ругается, в примерах с ним не нашёл подобия. Несомнено Ваш код гораздо лучше только не запускается, видать ненравится переменная на указатель процедуры (а я с ними (указателями) даже ещё неразбирался), жаль времени мне мало дали, вроде задача плёвая но когда мало знаешь но ещё и половину забыл то на ровном месте буксуешь бывает. А стёком я обеспокоен завтра посмотрю на работе (главное чтобы на столе у препода не глюконуло )
В любом случае спасибо большое, будем подтягивать уровень.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 9906
Рейтинг: 351
#25: 2008-05-28 01:04:08 ЛС | профиль | цитата
andrestudio писал(а):
пробовал таким образом процедуры объявить но компилятор ругается

Видел, что пробовал...

Ну значит получается, что этот компилятор не знает, что такое рекурсивные задачи (это всегда вызов того, кто уже тебя вызвал, и всегда, во всех языках, для этого делается ПРЕДОПИСАНИЕ), т.е. - это вообще НЕ компилятор
Не считая конечно, что в нем закопаны все-таки (хотя сомнительно) супер-хитрые особенности синтаксиса...

Вот это все, кстати, и называется - борьба с чужим интеллектом (вместо обещаний очень большого облегчения работы разработчика при использовании ЯВУ)
Может он хочет, чтобы там где-нибудь "шляпов" понаставили...
Мне, в свое время - надоело бороться

BTW: по теории, самый надежный способ довести препода до белого каления - это сделать отступление от принципов структурного программирования путем jmp-а в asm-вставке.
------------ Дoбавленo:

Может совсем тупой вариант сработает

#pas
// Программа управления световыми эффектами
// Контроллер Atmega-161 Clock-4MHz
// 16 светодиодов установлены на порты А и В << через резисторы, и общий в 0 ??? >>
// Порт A младшая 8-ка
// Порт B старшая 8-ка
// Общий у кнопок: +5v << а кто тянет в 0 ??? >>
// Кнопка KН-1 PINC.0 - Убавить скорость переключений
// Кнопка KН-2 PINC.1 - Прибавить скорость переключения
// Кнопка KН-3 PINC.2 - Смена эффекта
// Эффект №1 - Бегущий огонь вправо
// Эффект №2 - Бегущий огонь влево
// Эффект №3 - Бегущие огни из центра
// Эффект №4 - Бегущие огни в центр

program Scroll_Led;

// массив констант для эффекта точек из центра и в центр
const led_centre: array[8] of word = (0x8001, 0x4002, 0x2004, 0x1008, 0x0810, 0x0420, 0x0240, 0x0180);

var t, time: word; // скорость переключения светодиодов

procedure Timer_Interrupt0; org OVF0addr;// процедура прерывания от таймера T0
begin
if (PINC.0 = 1) and (time < 1000) then time := (time + 5);
if (PINC.1 = 1) and (time > 50) then time := (time - 5);
if t > time then t := time;
TCNT0 := 0xB2;
end;

procedure Led_Out_Cent; // движение точек из центра
var i:byte;
begin
while TRUE do begin
for i:=7 downto 0 do begin
PORTA := Lo (led_centre[i]);
PORTB := Hi (led_centre[i]);
for t:=0 to time do Delay_ms(1); // задержка между переключением
if PINC.2 = 1 then exit;
end;
end;
end;


procedure Led_In_Cent; // движение точек в центр
var i:byte;
begin
while TRUE do begin
for i:=0 to 7 do begin
PORTA := Lo (led_centre[i]);
PORTB := Hi (led_centre[i]);
for t:=0 to time do Delay_ms(1); // задержка между переключением
if PINC.2 = 1 then exit;
end;
end;
end;


procedure Left_Led; // движение светодиода влево
var i:word;
begin
while TRUE do begin
i := 0x8000;
while i<>0 do begin
PORTA := Lo (i);
PORTB := Hi (i);
for t:=0 to time do Delay_ms(1); // задержка между переключением
i := i/2; // сдвигаем бит через деление
if PINC.2 = 1 then exit;
end;
end;
end;


procedure Right_Led; // движение светодиода вправо
var i:word;
begin
while TRUE do begin
i := 1;
while i<>0 do begin
PORTA := Lo (i);
PORTB := Hi (i);
for t:=0 to time do Delay_ms(1); // задержка между переключением
i := i*2; // сдвигаем бит через умножение
if PINC.2 = 1 then exit;
end;
end;
end;

// Вход в программу
begin
DDRA := 0xFF; // настраиваем порт A и B
DDRB := 0xFF; // на выход
time := 500; // начальная скорость переключения
TCCR0 := 0x05; // пуск Т0 с коэффициентом деления 1024
TIMSK := 1; // включаем прерывание на переполнение Т0
SREG.7:= 1; // разрешить глобальные прерывания

while TRUE do begin
PORTA :=0; // гашение светодиодов
PORTB :=0; // в портах А и В
Delay_ms(500); // задержка 0,5 сек
Right_Led; // Запускаем первый эффект
PORTA :=0; // гашение светодиодов
PORTB :=0; // в портах А и В
Delay_ms(500); // задержка 0,5 сек
Left_Led; ` // Запускаем второй эффект
PORTA :=0; // гашение светодиодов
PORTB :=0; // в портах А и В
Delay_ms(500); // задержка 0,5 сек
Led_In_Cent; // Запускаем третий эффект
PORTA :=0; // гашение светодиодов
PORTB :=0; // в портах А и В
Delay_ms(500); // задержка 0,5 сек
Led_Out_Cent; // Запускаем четвертый эффект
end;
end.
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#26: 2008-05-28 01:14:06 ЛС | профиль | цитата
Я, конечно, дико извиняюсь, но разве вот так, без указателей, сделать нельзя

code_9161.txt
карма: 22

0
файлы: 1code_9161.txt [4KB] [227]
Ответов: 5227
Рейтинг: 587
#27: 2008-05-28 09:12:16 ЛС | профиль | цитата
Super! что я ещё могу сказать, оба кода работают (правда у nesco мешала объявленая вначале кода процедура, закоментировал и заработало), Galkov, nesco - Вы не будете против если мы используем именно Ваши варианты?, так как они более логически взвешанные и оптимальные для горящей курсовой. Жаль сейчас неполучится Вас отблагодарить (на старом форуме, увы на работе пока) Ещё раз спасибо!, ибо Вы выручили не только меня но и ещё одного хорошего парня.
Посмотрю я конечно что он за железяку соберёт?
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#28: 2008-05-28 10:39:32 ЛС | профиль | цитата
Да пожалуйста, сколько угодно.
В общем, я просто переделал код Galkov'a, хотя, в начале поста писАл именно об этом.
карма: 22

1
Голосовали:andrestudio
Ответов: 9906
Рейтинг: 351
#29: 2008-05-28 14:37:42 ЛС | профиль | цитата
andrestudio, HEX намыль, пожалуйста...
Чисто из любопытства

карма: 9

1
Голосовали:andrestudio
Ответов: 5227
Рейтинг: 587
#30: 2008-05-28 17:04:48 ЛС | профиль | цитата
Намылил, ели нужен дистрибутив с лекарством то без проблем.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)