Jump to content

Dúvidas de Assembly


PsySc0rpi0n
 Share

Recommended Posts

Boas...

Estou a iniciar o estudo de programação de um micro-controlador compatível com o 8051.

E estou com algumas dúvidas ainda em relação aos vários sistemas de numeração.

Por exemplo quando escrevo:

MOV 0,#00000001

é o mesmo que escrever:

MOV 0,#1

Se é diferente, qual é a dierença?

Edited by apocsantos
geshi

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Link to comment
Share on other sites

Não percebo.. estás a fazer a pergunta se é, ou não, diferente ou a dizer que é diferente e a perguntar porquê?

Estava a perguntar se é diferente, e se sim, qual é a diferença...

Tanto quanto sei, não há diferença.

Ok, obrigado!

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Link to comment
Share on other sites

Boas...Estou a tentar fazer um teste simples em Assembly mas por alguma razão ele não está a efectuar o pretendido.

O code é:

JB P0.0,Um
Um: MOV P1,#00h
ACALL time_loop
MOV P1,#0FFh
ACALL time_loop
time_loop:
CicloExt:MOV R7,#2
CicloInt:MOV R6,#2
DJNZ R6,$
DJNZ R7,CicloInt
RET

Não me está a executar a linha:

MOV P1,#0FFh

Salta sempre para o início do programa!

Edited by apocsantos
geshi

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Link to comment
Share on other sites

De volta ao Assembly...

Estou a tentar perceber o que fazem o bloco de instruções DB no seguinte code:

ORG 000h			 ; initial starting address
MOV P0,#00h		  ; clears port 1
MOV R6,#01h		  ; stores "1"
MOV R7,#06h		  ; stores "6"
MOV P2,#00h		  ; clears port 2
MOV P0,#00h
MOV DPTR,#LABEL1	 ; loads the address of line 29 to DPTR
MAIN: MOV A,R6	   ; "1" is moved to accumulator
SETB P2.5			 ; activates 1st display
ACALL DISPLAY		; calls the display sub routine for getting the pattern for "1"
MOV P0,A			 ; moves the pattern for "1" into port 0
;ACALL DELAY		  ; calls the 1ms delay
CLR P2.5			; deactivates the 1st display
MOV A,R7
MOV P0,00h			; "6" is moved to accumulator
SETB P2.4			 ; activates 2nd display
ACALL DISPLAY		; calls the display sub routine for getting the pattern for "2"
MOV P0,A			 ; moves the pattern for "2" into port 1
;ACALL DELAY		  ; calls the 1ms delay
CLR P2.4			 ; deactivates the 2nd display
MOV P0,00h
ACALL DELAY
SJMP MAIN			; jumps back to main and cycle is repeated
DELAY: MOV R3,#02h
DEL1: MOV R2,#05h
DEL2: DJNZ R2,DEL2
DJNZ R3,DEL1
RET
DISPLAY: MOVC A,@A+DPTR ; adds the byte in A to the address in DPTR and loads A with data present in the resultant address
RET
LABEL1: DB 3FH
	DB 06H
	DB 5BH
	DB 4FH
	DB 66H
	DB 6DH
	DB 7DH
	DB 07H
	DB 7FH
	DB 6FH
END

Alguém me pode ajudar?

Edited by PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Link to comment
Share on other sites

A instrução DB (Define Byte) serve para declarar constantes a ser usadas, se não me falha a memoria do que aprendi na cadeira de arquitectura de computadores o que ele esta a fazer é a dizer que o ponteiro DPTR aponta para o endereço 0x29 que contem um sequencia de constantes em hexadecimal

Podes reparar que mais tarde usa um acomulador A para ler byte a byte e mostrar no no display com a instrução:

MOVC A, @A+DPTR

Isto se não me falha a memoria!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.