5.2. Estructura de un programa en ensamblador
El siguiente programa muestra la estructura básica de un programa en ensamblador.
;**********************************************************
; Ejemplo de estructura de un programa en ensamblador para
; los microcontroladores 8051.
;
; Programa para hacer parpadear todos los bits del puerto 0
; con un tiempo determinado.
;
; Autor: Rafa Aranda
; Fecha: 20-10-2009
; Versión: 1.0
;**********************************************************
$NOMOD51
$INCLUDE (REG51.INC)
NAME ESTRUCTURA
STACK EQU 030H ;Dirección del puntero del stack
;*************************************
; Iniciar los vectores de interrupción
;*************************************
USING 0
ORG 0H ;Origen del código (Posición de la memoria ROM)
VECTOR: JMP INICIO ;Reset
ORG VECTOR+3H ;INT0
ORG VECTOR+0BH ;Timer 0
ORG VECTOR+13H ;INT1
ORG VECTOR+1BH ;Timer 1
ORG VECTOR+23H ;Puerto serie RI + TI
ORG VECTOR+2BH ;Timer 2
;********************************
; Tareas iniciales de preparación
;********************************
ORG VECTOR+30H
INICIO: MOV SP,#STACK-1 ;Fijar el puntero del stack
MOV PSW,#00000000B ;Selecciona el banco de registros 0
MOV P1,#0H ;Preparar el puerto
;*******************
; Programa principal
;*******************
PROGRAMA: MOV P1,#0H ;Poner los bits del puerto 0 a 0
CALL RETARDO ;Realizar un retardo
MOV P1,#0FFH ;Poner los bits del puerto 0 a 1
CALL RETARDO ;Realizar un retardo
JMP PROGRAMA ;Reiterar de forma infinita
;***************************
; Subrutina de temporización
;***************************
RETARDO: MOV R2,#7FH
RET_3: MOV R1,#0FFH
RET_2: MOV R0,#0FFH
RET_1: DJNZ R0,RET_1
DJNZ R1,RET_2
DJNZ R2,RET_3
RET
END