Перейти к содержанию

Гость Сергей

Рекомендуемые сообщения

здравствуйте. ребята помогите разобраться  с программой 

задача программы мигать светодиодами и менять тетрады при внешнем прерывании

всё хорошо только одно но! если по шагово смотреть процесс в avr studio 4 то доходя до команды call её  не получается активировать. То есть в подпрограмму не получается зайти, после этой команды переходит к следующей команде. ЗАГРУЖАЮ В Мк atmega16A программа не работает

подскажите пожалуйста в чём косяк  что я не правильно делаю

.include"m16def.inc"

.ORG 0x0000          // адрес прерывания по сбросу

     JMP start       // переход на метку start

.ORG 0x0024          // адрес прерывания INT2

     JMP int_2       // переход на обработчик прерывания INT2

.ORG 0x002A          // адрес начала программы

start:

//**** инициализация стека ****

     LDI R16, 0x04   ;// загрузка в R16 числа 0x04

     OUT SPH, R16    ;// пересылка числа 0x04 из R16 в регистр SPH

     LDI R16, 0x5F   ;// загрузка в R16 числа 0x5F

     OUT SPL, R16    ;// пересылка числа 0x5F из R16 в регистр SPL

//**** инициализация прерывания ****

     LDI R16, 0b00100000

     OUT GICR, R16   ;// разрешение прерывания INT2

     LDI R16, 0b00000000

     OUT MCUCSR, R16 ;// прерывание по спадающему фронту сигнала ("H->L")

//**** инициализация порта С ****

     SER R16         ;// установка всех бит регистра R16 в "1"

     OUT DDRC, R16   ;// инициализация порта C (работает как выход)

//**** загрузка R16 и R17 ****

     LDI R16, 0b11110000  ;// значение 0xF0

     LDI R17, 0b11100111  ;// значение 0xE7

SEI             ;// установка флага глобального прерывания

m1:                  ;// метка начала цикла основной программы

     OUT PORTC, R16  ;// вывод на светодиоды содержимого R16

     CALL wait       ;// вызов подпрограммы задержки

     OUT PORTC, R17  ;// вывод на светодиоды содержимого R17

     CALL wait       ;// вызов подпрограммы задержки

     RJMP m1         ;// переход на метку m1

//**** подпрограмма задержки на 800 мкс (при f=1 МГц) ****

wait:                ;// метка по которой вызывается подпрограмма

     PUSH R17        ;// сохранение [R17] в стеке

     LDI R17, 200    ;// загрузка в R17 константы задержки (200 циклов)

w1:                  ;// метка цикла задержки на 800 машинных тактов

     NOP             ;// пустая команда (добавляет 1 такт в цикл задержки)

     DEC R17         ;// декрементирование R17 (уменьшение на 1)

     BRNE w1         ;// если не обнулился R17, продолжать цикл

     POP R17         ;// восстановление содержимого R17 из стека

     RET             ;// выход из подпрограммы задержки

//**** обработчик прерывания INT_2 ****

int_2:

     SWAP R16        // поменять тетрады R16 местами

   RETI            // выход из подпрограммы обработчика прерывания

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...