Bom dia pessoal,
Gostaria de uma força de vcs, estou com duvida referente a interrupção do timer2 do 89s52, estou fazendo um teste com o microcontrolador para saber como funciona a interrupção. Estou com o seguinte codigo.
inicio:
org 00h
jmp Inicio_2
org 002Bh
call teste
reti
org 36h
Inicio_2:
;***************Configuração do canal Serial************************************
MOV sp,#056h ;realoca o stack pointer
MOV scon,#050h ;seleciona modo 1 do canal serial e habilita recepcao
MOV tmod,#021h ;configura timer1: 8 bits com recarga automatica
MOV th1,#0fDh ;carrega timer1 para gerar taxa F4
MOV tl1,#0fDh ;de transmissao/recepcao (fosc = 11.0592) F4
MOV pcon,#0h ;dobra taxa de recepcao/transmissao (baud rate = 9600)
MOV tcon,#40h ;liga timer
CLR TI
CLR RI
clr EXF2
clr TCLK
clr RCLK
setb EXEN2
clr CT2
clr CPRL2C
setb EA
setb ET2
setb p1.1
Principal:
mov sbuf,#'R'
jnb ti,$
clr ti
jmp Principal
teste:
clr EA
clr ET2
clr TF2
clr EXF2
mov sbuf,#'J'
jnb ti,$
clr ti
jnb p1.1,$
setb EA
setb ET2
ret
END
O que esta acontecendo com o codigo é o seguinte, a serial fica o tempo todo enviando 'R', quando ocorre a interrupção enviara 'J' e depois deveria voltar a ficar enviando 'R', mas o que esta acontecendo é o seguinte a serial fica enviando 'R', mas quando coloco em nivel baixo o pino p1.1, ele envia 'J', mas nao retorna a enviar 'R', se coloco novamente em nivel baixo no pino p1.1, ele envia novamente o 'J'.
Entao nao sei o que tem mas para configurar para que ele fique enviando 'R' e quando ocorre a interrupcao enviar 'J' e depois voltar a enviar 'R'.
Neste caso estou fazendo esse teste pois tenho uma aplicativo q usa 2 sinais, um de clock e outro de dados, entao ligaria o sinal de dados no pino p1.1, e o microcontrolador ficaria livre para fazer outras coisas e quando o sinal de dados cair para zero atenderia a interrupcao e faria o papel de ler os dados vindos pelo os 2 sinais q tenho o clock e data. Por favor se alguem tiver uma ideia de como posso fazer isso agradeço.