Cogigo assembly
288 palavras
2 páginas
ORG 0000 jmp mainORG 001BH ;vetor de interrupção 1 jmp timer1isr
ORG 0030H main: mov r0,#2fh ; inicializa R0 com uma posição a menos que 30h mov 30h,#5 ; posição de armazenamento da unidade. mov 31h,#2 ; posição de armazenamento da dezena. mov 32h,#7 ; posição de armazenamento da centena. mov 33h,#4 ; posição de armazenamento do milhar. mov dpl,#low(ledcodes) ;DPTR(low) = byte - signif. do endereço incial da da sequencia de digitos mov dph,#high(ledcodes) ;DPTR(low) = byte + signif. do endereço incial da da sequencia de digitos mov tmod,#10h ; coloca o timer 1 no modo de 16 bits setb tf1 ;força timer 1 a gerar interrupt setb et1 ;habilita timer 1 a gerar interrupt setb ea ;habilita as interrupções jmp $ ; não faz nada e espera pela interrupção
timer1isr: clr tr1 ;para o timer 1 mov p1,#0ffh ;apaga todos os segmentos do display cpl p3.3 ;inverte o bit zero da seleção do display jb p3.3,skip1 cpl p3.4 skip1: inc r0 ; aponta R0 para a proxima locação de dados cjne r0,#34h,skip2 ;se R0 não é 34, pula aproxima instrução mov r0,#30h ; retorna R0 para a primeira locação de dados skip2: mov a,@r0 ; move o digito a ser mostrado para o Acc movc a,@a+dptr ; move o código do digito para o Acc mov p1,a ; move o digito para P1 mov th1,#high(15536) ;inicializa o timer 1 com byte - signif. de 15536 (65535-50000) mov tl1,#low(15536) ;inicializa o timer 1 com byte + signif. de 15536 (65535-50000) setb tr1 ;inicia timer 1 reti ;retorna da interrupção
ledcodes: DB 11000000B,11111001B,10100100B DB 10110000B,10011001B,10010010B DB 10000010B,11111000B,10000000B DB 10010000B