2010-10-21 3 views
0

Я занимаюсь классом в микропроцессоре и имею некоторые проблемы с записью программы, которая будет удерживать значение в порту в течение двух секунд, прежде чем перейти к следующему порту.нужна помощь при написании программы

Может ли кто-нибудь помочь в этом?
Я думал об использовании NOP, но понял, что это немного нереально, я попробовал ACALL DELAY, но по какой-то причине его потянул как неизвестную команду.

Я нахожусь в этом состоянии и буду благодарен за любую помощь, которую я мог бы получить.

Я использую DS89C450 С часами 11 МГц, я пробовал просить профессора, и он говорит мне, что у него есть пирог, который у вас должен быть без проблем, но чтение и написание кода для меня совершенно новое для меня. делал это только две недели. когда я смотрю на книгу, почти так же, как на китайском, ее трудно понять, мои товарищи по классу так же, как и я, я решил, что мой последний прием будет состоять в том, чтобы спросить кого-то в Интернете, который мог бы иметь аналогичную проблема или кто-то, у кого есть немного больше понимания, которые могли бы помочь мне в правильном направлении.

Я знаю, что мне нужно загрузить каждый порт с указанным значением. Мои проблемы кроются в переключении портов, дающих им 2-секундную задержку.

Моя программа выглядит так MOV P0, # 33H MOV P1, # 7FH MOV P2, B7H MOV P3, EFH, поэтому с этими четырьмя портами, загружаемыми этими значениями, мне нужно, чтобы P0 перешел на P1, P1-P2 и так когда при попадании в P3 его значение должно идти в P0 и все это зацикливать. я собирался использовать SJMP для его возврата к началу, так что программа всегда работает

При этом есть две второй задержки, когда каждое значение остается только в каждом порту всего на две секунды, что еще нечеткое, остальное звучит правильно?

+0

Похоже, какое-то направление должны быть предоставлены. Что делают другие ученики? Вы опрашивали своего профессора? –

+1

Вам нужно указать, какой микропроцессор вы используете, по крайней мере. –

+0

Я использую DS89C450 С часами 11 МГц, я пробовал просить профессора, и он говорит мне, что у него есть пирог, который у вас должен быть без проблем, но чтение и написание кода для меня совершенно новое, это в течение двух недель.когда я смотрю на книгу, почти так же, как на китайском, ее трудно понять, мои товарищи по классу так же, как и я, я решил, что мой последний прием будет состоять в том, чтобы спросить кого-то в Интернете, который мог бы иметь аналогичную проблема или кто-то, у кого есть немного больше понимания, которые могли бы помочь мне в правильном направлении. – Kyle

ответ

0

Я никогда не делал этого с этой конкретной микросхемой (и я не знаю, сборку синтаксиса он поддерживает), но псевдокод подход будет что-то вроде этого:

Load initial values into ports 
Initialize counter with (delay in seconds * clock ticks per second)/(clock ticks in loop) 
While counter != 0 
    Decrement counter 
Swap port values: 
    P3 -> temp, P2 -> P3, P1 -> P2, P0 -> P1, temp -> P0 
Loop (4 times?) 

Я думаю, что это все вам действительно нужна структура. Основываясь на моих 10 минут чтения на 8051 сборок, петля задержки будет выглядеть так:

  MOV A, b6h ; ~91 ticks/sec @ 11 ms/tick 
DELAY: DEC A 
      JNZ DELAY ; NOP-type delay loop 
+0

так что вы говорите, что задержка у вас не так ли? когда я пробовал этот подход раньше, он сказал мне, что ACALL dakay был неизвестной командой? – Kyle

+0

Моя программа выглядит так – Kyle

+0

Я понятия не имею, что означает «задержка акалла». В ассемблере x86 я бы загрузил CX своим значением, поместил метку и инструкцию цикла, указывающую на нее в той же строке, и цикл voila - delay. –

0

я сделал что-то подобное в PIC 16F84 микроконтроллера

сделать задержку у вас есть 2 путь либо использовать прерывание или петли

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

это link иллюстрирует, как определять индексы цикла (так как вам может потребоваться вложенные петли, если требуется количество требуемых инструкций .. в PIC мне пришлось сделать 1 миллион команд, чтобы сделать задержку в 1 секунду)

Смежные вопросы