Capítulo 8 A interface de comunicação serial da família de microcontroladores MCS-51 da Intel Prentice Hall Microcontroladores 8051 1 Capítulo 8 A interface de comunicação serial: (SCON) = SM0 0 0 1 1 Símbolo SM2 REN TB8 RB8 TI RI SM1 SM2 REN TB8 RB8 TI RI Descrição Baud Rate Registrador de Deslocamento fosc./12 UART de 8 bits variável UART de 9 bits fosc./64 ou fosc./32 UART de 9 bits variável Nome e Significado Habilita a característica de comunicação de multiprocessadores no modo 2 e 3. Nesses modos, se SM2=1, RI não será ativado se o nono bit de dado recebido for igual a 0. No modo 1, se SM2=1, RI não será ativado se um stop bit válido não for recebido. No modo 0, deverá ser 0. Bit habitador da recepção serial. Setado/limpado por software para habilitar ou desabilitar a recepção serial. É o nono bit de dado que será transmitido no modo 2 e 3. Setado ou limpado por software. No modo 2 e 3, é o nono bit de dado que foi recebido. No modo 1, se SM2=0, RB8 é o stop bit que foi recebido. No modo 0, RB8 não é usado. É o flag de interrupção de transmissão. Setado por hardware no final do tempo do 8 bit no modo 0 ou no início do stop bit em outros modos, em qualquer transmissão serial. Deverá ser limpado por software. É o flag de interrupção de recepção. Setado por hardware no final do tempo do 8 bit no modo 0 ou na metade do tempo do stop bit em outros modos, em qualquer recepção serial. Deverá ser limpado por software. Prentice Hall SM1 0 1 0 1 SM0 Modo 0 1 2 3 Microcontroladores 8051 2 8051 Internal Bus Write to SBUF D S Q CL SBUF RXD P3.0 ALT Output Function Shift Zero Detector Start SHIFT TX Control TX Clock TI SEND S6 Serial Port Interrupt Shift Clock RX Clock RI Receive RX Control Start 111111110 Shift REN RIbarra Shift Input Shift Register Load SBUF TX.D P3.1 ALT Output Function RX.D P3.0 ALT Input Function SBUF Read SBUF 8051 Internal Bus Prentice Hall Figura 1: A interface de comunicação serial no modo 0. Microcontroladores 8051 3 8051 Internal Bus Write to SBUF TB8 D S Q CL Timer 1 Overflo w SBUF TX D Zero Detector 2 SMOD= 0 SMOD= 1 Start DATA 16 Serial Port Interrupt Sample 1 to 0 transition detector RXD 16 SHIFT TX Control TX Clock TI SEND RX Clock RI Load SBUF RX Control Shift Shift Start Bit 1FFh Detector Input Shift Register (9 bits) Load SBUF SBUF Read SBUF 8051 Internal Bus Figura 2: A interface de comunicação serial no modo 1. Prentice Hall Microcontroladores 8051 4 Capítulo 8 Baud Rate (bits/seg) Freq. Osc. (MHz) Modo 0 Máx: 1MHz 12 Modo 2 Máx: 375K 12 Modo 1, 3: 62,5K 12 19,2K 11,059 9,6K 11,059 4,8K 11,059 2,4K 11,059 1.2K 11,059 137,5 11,059 110 6 110 12 Prentice Hall Timer 1 SMOD C/Tbarra Modo Valor Recar. X X X X 1 X X X 1 0 2 FFh 1 0 2 FDh 0 0 2 FDh 0 0 2 FAh 0 0 2 F4h 0 0 2 E8h 0 0 2 1Dh 0 0 2 72h 0 0 1 FEEBh Microcontroladores 8051 5 Capítulo 8 Rotina de atendimento a interrupção do canal de comunicação serial (0023h) RETI Prentice Hall Figura 2: Fluxograma e programa fonte estruturado do exercício resolvido 1. (0023h) ISerial: RETI Microcontroladores 8051 6 Capítulo 8 Programa Principal: (SCON) #10h (IE) #90h (A) #55h (SBUF) (A) (0100h) PROGP: LOOP: MOV MOV MOV SCON,#10h IE,#90h A,#55h MOV SBUF, A JNB TI,$ CLR CPL SJMP END TI A LOOP S (TI) = 0 N #0b (A) not (A) (TI) Prentice Hall Microcontroladores 8051 7 DEFSEG EXEM, ABSOLUTE SEG EXEM MAIN: LOOP: ; Define segmento de programa EXEM ORG 0000h AJMP 0100h ; Após o Reset da CPU, o programa prossegue no endereço 0000h ; (durante o acionamento da chave de Reset ou após a energização do ; sistema através do circuito de Reset formado por um resistor em ; paralelo com um diodo e em série com um capacitor que está ligado ao ; pino de Reset da CPU). Como foi pedido que o programa principal fosse ; escrito no endereço de memória de programa 0100h, usou-se um salto ; incondicional para tal posição de memória. ORG RETI ; Após uma interrupção do canal serial , o programa prossegue no ; endereço '0023h' e retorna da rotina de atendimento da fonte de ; interrupção do canal de comunicação serial. 0023h ORG 0100h MOV SCON,#10h MOV IE,#90h MOV MOV A,#55h SBUF,A JNB TI,$ CLR TI CPL SJMP END A LOOP Prentice Hall ; Início do programa principal ;(SCON) # 00010000b. Programa o canal serial como registrador de ; deslocamento e baud rate de fosc./12 (modo 0). ; (IE)=1001 0000b. Faz (EA)=1 (cada interrupção é habilitada pelo seu ; bit habilitador); (ES)=1 (Habilita a interrupção de comunicação serial) ; (A) #55h (dado a ser transmitido) ; (SBUF) (A). Carrega o dado a ser transmitido no (SBUF) e é iniciada ; a transmissão serial ; Se (TI)=0 (o dado ainda não foi transmitido serialmente bit a bit) ; (PC) $ ( salta para o próprio endereço da instrução JNB). Aguarda ser ; transmitido. Quando o dado é transmitido faz (TI)=1 e é gerado uma ; interrupção do canal serial (salta para o endereço 0023h - rot. de serviço ; de com. serial) ; (TI) 0 (Libera canal de comunicação serial para a transmissão de um ; novo dado) ; (A) complemento de um do (A) ; Loop do programa principal Microcontroladores 8051 8