2013-05-31 15 views
0

UART와 인터럽트를 사용하여 8051에서 시리얼 통신을 연구 중입니다. 오늘은 저자가 자신이 지속적으로 8051시리얼 통신 8051

org 00h 
ljmp main 

org 23h 
ljmp serial_ISR 


org 30h 

main: 

    mov TMOD,#20h 
    mov TH1,#-03h 
    mov SCON,#50h 

    setb IE.7 
    setb IE.4 

    setb TR1 

back: 

    mov A,P0 
    mov SBUF,A 
    sjmp back 

serial_ISR: 

    jb TI,trans 

    mov R0,SBUF 

    clr RI 

    RETI 

trans: 

    clr TI 

    RETI 

에 혼란 건을 시리얼 통신의 규칙을 voilating되어 내 생각, 포트 0 전송이 발생하는되는 방식에 오는 데이터를 transfering하고 있다고하는이 코드를 건너 왔어요 나는 back 레이블에 우리는 이전 데이터가 전송 될 때까지 TI 플래그에 의해 통지 될 때까지 SBUF에 쓰지 말아야하는 규칙을 보완하는 SBUF 레지스터에 지속적으로 쓰고있다.

위의 코드에서 SBUF 레지스터의 데이터를 계속 쓰고 있습니까? UART가 올바른 데이터를 보내겠습니까?

감사합니다 당신은 확실히 맞다

답변

1

가 다시 라벨 내부의 코드는 다음과 같이 다시 작성해야 : 당신이 이동하지 않을 것을 보증하기 전에 당신이했던 것처럼

back: 
    jb TI,$ 
    mov A,P0 
    mov SBUF,A 
    sjmp back 

back 라벨을 코딩 마지막 데이터 전송이 완료 될 때까지 SBUF에 대한 모든 데이터.

여기에서 세부 사항 (수신 또는 전송에 의한) 직렬 포트 interrrupts 나는 당신이 지워 가정하고 이전 코드에서, 그래서 가 자동으로을 삭제하지 않은 것을 기억 고려해야있다 TI 인터럽트 플래그를 수동으로.