нужна помощь в написании программы - PullRequest
0 голосов
/ 21 октября 2010

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

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

На данный момент я озадачен и был бы признателен за любую помощь, которую я мог бы получить.

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 21 октября 2010

Я сделал нечто подобное в микроконтроллере PIC 16f84

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

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

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

0 голосов
/ 21 октября 2010

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

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
...