Ai um exemplo que pisca um LED usando uma sub-rotina de atraso
Um bom simulador que uso é uma versão demo do PDS-51
www.phyton.com com ele vc pode integrar o sdcc e compilar código em assembly ou C.
; Exemplo - Pisca um LED conectado a porta P2.0
; Freq de Clock = 19.5 MHz
.include '89s8252.inc'
;-------------------------------------------------
; Seguimento de jump
;-------------------------------------------------
.aseg jump_seg, code
.org 0000h
ajmp inicio ; Salta pro início do programa
;-------------------------------------------------
; Programa principal
;-------------------------------------------------
.rseg programa,code
inicio: clr P2.0 ; Acende o LED
acall delay ; Atraso de ~ meio segundo
sjmp segue ; Torna os tempos acesos e apagados iguais
segue: setb P2.0 ; Apaga o LED
acall delay ; Atraso de ~ meio segundo
sjmp inicio ; Repete
;-------------------------------------------------
; Sub rotina de atraso
;-------------------------------------------------
delay: mov r2,#00dh ; Inicializa r2
volta1: mov r3,#07ah ; Inicializa r3
volta2: mov r4,#0ffh ; Inicializa r4
loop: djnz r4,loop ; Repete ate zerar r4
djnz r3,volta2 ; Repete até zerar r4 e r3
djnz r2,volta1 ; Repete até zerar r4, r3 e r2
ret ; Retorna da subrotina
.end ; Fim do programa