Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2014, 19:26   #1
PHC
Новичок
Джуниор
 
Регистрация: 29.06.2014
Сообщений: 1
Печаль Assembler (AVR)

Программа по переключению светофора.
После нажатия кнопки алгоритм переключения цветов светофора выполняется бесконечно, и программа не переходит в режим ожидания кнопки, хотя по меткам она должна возвращаться именно на этот момент.
Программа тут:
Код:
.include"m164pdef.inc"
.list
.def temp=r16
.def temp1=r17
.def temp2=r18
.def temp3=r19
.def temp4=r20
.def temp5=r21
;___
.cseg
.org 0
rjmp main
;___
main:
ldi temp,0xff
out ddra,temp
out ddrc,temp
ldi temp,0x00
out portc,temp
out porta,temp
out portd,temp
out ddrd,temp
 
 ili:
 ldi temp,0b00000100 ;Устанавливаем зеленый на дорожном
 out portc,temp
 ldi temp,0b00000001 ;Устанавливаем красный на пешеходном
 out porta,temp
 in temp,pind
 cpi temp,0b00000001 ;Проверка нажатия кнопки
 brne ili
 
ldi temp,0b00000010 ;Установка желтого на дорожном
;------------------------
 
;------------------------
out portc,temp
 
;________________
rcall pause
rcall pause
rcall pause
rcall pause
rcall pause
rcall pause
;_______________
 
ldi temp,0b00000001 ;Красный на дорожном
out portc,temp
ldi temp,0b00000010 ;Зеленый на пешеходном
out porta,temp
ldi temp2,255
 
 
rcall pause
rcall pause
rcall pause
rcall pause
rcall pause
rcall pause
rcall pause
rcall pause
rcall pause
 
;_______________________
;Мигаем зеленым ;)
;_______________________
ldi temp,0b00000000
out porta,temp
rcall pause
ldi temp,0b00000010
out porta,temp
rcall pause
ldi temp,0b00000000
out porta,temp
rcall pause
ldi temp,0b00000010
out porta,temp
rcall pause
ldi temp,0b00000000
out porta,temp
rcall pause
ldi temp,0b00000010
out porta,temp
rcall pause
ldi temp,0b00000000
out porta,temp
rcall pause
ldi temp,0b00000010
out porta,temp
rcall pause
ldi temp,0b00000000
out porta,temp
rcall pause
;_______________________
 
ldi temp,0b00000001 ;Красный на пешеходном
out porta,temp
ldi temp,0b00000010 ;Желтый на дорожном
out portc,temp
rcall pause
rcall pause
ldi temp,0b00000100 ;Зеленый на дорожном
out portc,temp
 
in temp,pind
cpi temp,0b00000001
brne ili1
 
ili1: rjmp ili
rjmp main
 
; Подпрограмма задержки
; ====================================================
Pause:    
ldi Temp1,0; записать в регистр temp1 знчение 0
ldi Temp2,0; записать в регистр temp2 знчение 0
ldi Temp3,2; записать в регистр temp3 знчение 2
 
Pause1:    
dec Temp1; вычесть из значения  регистра temp1 единицу
brne Pause1; если значение temp1 не равно 0 перейти к метке Pause1
 
dec Temp2; вычесть из значения  регистра temp2 единицу
brne Pause1; если значение temp2 не равно 0 перейти к метке Pause1
 
dec Temp3; вычесть из значения  регистра temp3 единицу
brne Pause1; если значение temp1 не равно 0 перейти к метке Pause1
ret; выйти из подпрограммы

Последний раз редактировалось Stilet; 29.06.2014 в 19:50.
PHC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
avr/c++ 25-й кадр Общие вопросы C/C++ 24 14.05.2014 15:16
Задача в AVR Studio 4 (Assembler) xvote Помощь студентам 0 30.05.2012 18:45
avr atmega16 Defunate Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 23.09.2011 14:46
AVR Sparky Микроконтроллеры, робототехника, схемотехника, 3D принтеры 6 31.12.2009 16:53
с/c++ для avr gaka1995 Общие вопросы C/C++ 1 25.10.2009 13:55