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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2015, 11:29   #1
владимир32
 
Регистрация: 13.05.2015
Сообщений: 8
По умолчанию Прерывания в ассемблере

Добрый день. Есть задание: Программа формирования ШИМ сигнала с частотой 1 и 2 кГц, задаваемым по внешнему прерыванию от двух сигналов, и с коэффициентом заполнения 0,5. ШИМ сигнал формируется по прерыванию от таймеров. MK89C51
Переключение будет через порт Р1, то есть если на Р1-(1) то ШИМ 1кГц, если Р1-(0)-2кГц.
Вот написал код, по отдельности он работает, но стоит объединить их почему-то при моделировании вместо start1 переходит в start. Причём если после hz1000 написать другой код,(mov R4,#4 наример) то он на него переходит и всё работает как надо, на вход Р1 реагирует, но стоит туда забить второе тело со start1, он как будто считает, что start1 не существует, то есть идёт сразу вниз после "jmp start1" Помогите пожалуйста с jmp разобраться.
Код:
mov r0,#0
org 0 
mov a,P1
JNZ hz1000
delay1 equ -250

jmp start1 

org 000bh 
cpl p3.0
inc r0
cjne r0,#10,next3
mov r0,#0

next3:
mov TH0,#high(delay1) 
mov TL0,#low(delay1)
jmp next4

next4: reti 

start1:
mov p3,#0 
mov TH0,#high(delay1) 
mov TL0,#low(delay1) 
mov TMOD,#1 
setb EA 
setb ET0 
setb TR0 
sjmp $

hz1000:
delay equ -500
jmp start 
org 000bh 
cpl p3.0
inc r0
cjne r0,#10,next1
mov r0,#0

next1:
mov TH0,#high(delay) 
mov TL0,#low(delay)
jmp next

next: reti 
start:
mov p3,#0 
mov TH0,#high(delay) 
mov TL0,#low(delay) 
mov TMOD,#1 
setb EA 
setb ET0 
setb TR0 
sjmp $
end

Последний раз редактировалось Stilet; 23.09.2015 в 12:25.
владимир32 вне форума Ответить с цитированием
Старый 23.09.2015, 12:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
то есть идёт сразу вниз после "jmp start1"
Чет не понял, а куда он должен идти? jmp start1 в отладке на какой оператор скачет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.09.2015, 12:55   #3
владимир32
 
Регистрация: 13.05.2015
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Чет не понял, а куда он должен идти?
должен идти на метку hz1000:
Код:
hz1000:
delay equ -500
jmp start 
org 000bh 
cpl p3.0
inc r0
cjne r0,#10,next1
mov r0,#0

next1:
mov TH0,#high(delay) 
mov TL0,#low(delay)
jmp next

next: reti 
start:
mov p3,#0 
mov TH0,#high(delay) 
mov TL0,#low(delay) 
mov TMOD,#1 
setb EA 
setb ET0 
setb TR0 
sjmp $
end
либо выполнять
Код:
delay1 equ -250

jmp start1 

org 000bh 
cpl p3.0
inc r0
cjne r0,#10,next3
mov r0,#0

next3:
mov TH0,#high(delay1) 
mov TL0,#low(delay1)
jmp next4

next4: reti 

start1:
mov p3,#0 
mov TH0,#high(delay1) 
mov TL0,#low(delay1) 
mov TMOD,#1 
setb EA 
setb ET0 
setb TR0 
sjmp $
или я не прав?

Последний раз редактировалось Stilet; 23.09.2015 в 14:34.
владимир32 вне форума Ответить с цитированием
Старый 23.09.2015, 13:01   #4
Ароха
 
Регистрация: 21.09.2015
Сообщений: 8
По умолчанию

смущает такая конструкция:
...
jmp next

next: reti
start:
...
Не знаю специфики ARM но не могут эти две метки указывать на одну ячейку памяти?
тогда при переходе в start: будет возврат из прерывания.
Ароха вне форума Ответить с цитированием
Старый 23.09.2015, 13:13   #5
владимир32
 
Регистрация: 13.05.2015
Сообщений: 8
По умолчанию

исправил,заменил
jmp next
next: reti
на
reti
ничего не поменялось, всё равно перелетает start1
владимир32 вне форума Ответить с цитированием
Старый 23.09.2015, 13:28   #6
Ароха
 
Регистрация: 21.09.2015
Сообщений: 8
По умолчанию

Хм, в P1 точно ноль (не ноль?)?

Могу предложить убрать код генератора, оставить только переходы, и какие ни будь диагностические сообщения после них и посмотреть поведение программы.
После меток, идет вызов какой-то функции? "delay1" может она гадит?
Еще что смущает - короткий переход "sjmp"; мне запись "sjmp $" не знакома.

Последний раз редактировалось Ароха; 23.09.2015 в 13:42.
Ароха вне форума Ответить с цитированием
Старый 23.09.2015, 14:36   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
должен идти на метку hz1000:
Чего это? У тебя нет безусловного перехода на нее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.09.2015, 14:51   #8
владимир32
 
Регистрация: 13.05.2015
Сообщений: 8
По умолчанию

Цитата:
Чего это? У тебя нет безусловного перехода на нее.
А не подскажете как это организовать?
владимир32 вне форума Ответить с цитированием
Старый 23.09.2015, 14:55   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Дык JNZ hz1000 то убери...
Ты же на start хочешь сразу прыгать? или сначала на hz1000 а потом на старт?
Какова последовательность прыжков должна быть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.09.2015, 14:59   #10
владимир32
 
Регистрация: 13.05.2015
Сообщений: 8
По умолчанию

Цитата:
Какова последовательность прыжков должна быть?
Последовательность такая: на Р1-(1) то переход на hz1000, если нет-то выполняется
Код:
delay1 equ -250

jmp start1 

org 000bh 
cpl p3.0
inc r0
cjne r0,#10,next3
mov r0,#0

next3:
mov TH0,#high(delay1) 
mov TL0,#low(delay1)
jmp next4

next4: reti 

start1:
mov p3,#0 
mov TH0,#high(delay1) 
mov TL0,#low(delay1) 
mov TMOD,#1 
setb EA 
setb ET0 
setb TR0 
sjmp $
владимир32 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывания kolyan147 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 13.06.2012 23:55
Прерывания и ввод-вывод на ассемблере Give_me_a_chanse Помощь студентам 0 27.10.2009 16:28
прерывания sergei64_89 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 22.04.2008 13:37