2015-03-10 2 views
0

Я написал код следующей сборки (за 8052 мягкий процессор), чтобы показать номер на 8 дисплеев 7-сегментных мою Altera DE-2 в:Почему данные MOV, данные возвращают регистр назначения?

mov HEX0, #0x98 ; show 9 
mov HEX1, #0xC0 ; show 0 
mov HEX2, #0xF9 ; show 1 
mov HEX3, #0xF8 ; show 7 
mov HEX4, #0x92 ; show 5 
mov HEX5, #0x92 ; show 5 
mov HEX6, #0x92 ; show 5 
mov HEX7, #0xA4 ; show 2 

HEXns определяются следующим образом:

HEX0 DATA 091H ; Zero turns the segment on 
HEX1 DATA 092H ; 
HEX2 DATA 093H ; 
HEX3 DATA 094H ; 
HEX4 DATA 08EH ; 
HEX5 DATA 08FH ; 
HEX6 DATA 096H ; 
HEX7 DATA 097H ; 

Вышеупомянутый код работает просто отлично сам, но когда я пытаюсь повернуть число, используя следующий код, все 7-сегментные дисплеи выводятся так, как если бы регистры HEXn были установлены в 0x00.

M0: 
    wait(2) 

    mov A, HEX0 ; store HEX0 in the accumulator 
    mov HEX0, HEX1 
    mov HEX1, HEX2 
    mov HEX2, HEX3 
    mov HEX3, HEX4 
    mov HEX4, HEX5 
    mov HEX5, HEX6 
    mov HEX6, HEX7 
    mov HEX7, A 

    ljmp M0 
END 

Здесь wait(2) макрос, который использует около двух секунд на сумму тактовых циклов. Может ли кто-нибудь сказать мне (или даже спекулировать) о том, почему HEXn записывается в 0?

+0

я могу Не находите ссылки на память в режиме памяти в 8052. Что происходит, когда вы перемещаете его через A? т.е. HEX2 - A, A - HEX1? (Нажмите A из HEX0 в стек, а затем поместите его, прежде чем переместить его на HEX7). – Mike

ответ

0

Это ответ от моего профессора Иисуса Кальвино-Фраги:

HEX0 в HEX7 будут писать только регистры. Они не могут быть прочитаны. Традиционным способом преодоления этого ограничения является использование переменных (или регистров, если их достаточно). Сначала определим восемь байтовых переменных. Что-то, как это будет делать:

dseg at 30H 
shex0: ds 1 
shex1: ds 1 
shex2: ds 1 
shex3: ds 1 
shex4: ds 1 
shex5: ds 1 
shex6: ds 1 
shex7: ds 1 
cseg 

Затем инициализировать переменные с числами:

mov shex0, #0x98 ; show 9 
. 
. 
. 
mov shex7, #0xA4 ; show 2 

Наконец петлю, где переменные отправляются на дисплеи и повернуты:

M0: 

; Send to displays 
mov hex0, shex0 
. 
. 
mov hex7, shex7 

;Rotate 
mov A, shex0; store HEX0 in the accumulator 
mov shex0, shex1 
. 
. 
. 
mov shex6, shex7 
mov shex7, A 

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