📄 ejem_37.asm
字号:
; EJEMPLO 37
; Autor: Mikel Etxebarria
; (c) Ingenier韆 de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;El m骴ulo USART. Recepci髇 as韓crona.
;
;El m骴ulo USART de los dispositivos PIC16F87X incorpora el hardware necesario para implemen-
;tar comunicaci髇 serie as韓crona full-duplex o sincrona half-duplex. En este 鷏timo caso el
;USART se puede comportar como Master o Slave.
;
;En el ejemplo se provoca una interrupci髇 cada vez que se recibe un car醕ter v韆 serie. El
;programa de tratamiento visualiza, sobre los leds del laboratorio conectados a la Puerta B,
;el c骴igo binario del car醕ter recibido. Igualmente retransmite el car醕ter recibido, a
;modo de ECO.
List p=16F876A ;Tipo de procesador
include "P16F876A.INC" ;Definiciones de registros internos
;Ajusta los valores de la palabra de configuraci髇 durante el ensamblaje:
;protecci髇 de c骴igo y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT
__config _CP_OFF&_CPD_OFF&_LVP_OFF&_WDT_OFF&_XT_OSC
org 0x00 ;Vector de RESET
goto Inicio
org 0x04 ;Vector de interrupci髇
goto Inter
org 0x05
;********************************************************************************************
;Tx_Dato: Transmite v韆 serie el dato presente en el reg. W
Tx_Dato bcf PIR1,TXIF ;Restaura el flag del transmisor
movwf TXREG ;Almacena el byte a transmitir
bsf STATUS,RP0
Tx_Dato_Wait btfss TXSTA,TRMT ;Byte transmitido ??
goto Tx_Dato_Wait;No, esperar
bcf STATUS,RP0
return ;Si
;******************************************************************************************
;Tratamiento de la interrupci髇
Inter btfss PIR1,RCIF ;Ha sido interrupci髇 en la recepci髇 ??
retfie ;No, falsa interrupci髇
bcf PIR1,RCIF ;Si, restaurar el flag de interrupci髇
movf RCREG,W ;Lee el dato recibido
movwf PORTB ;Lo saca por la puerta B
call Tx_Dato ;Lo retransmite a modo de eco
retfie
;*******************************************************************************************
;Programa principal
Inicio clrf PORTC
clrf PORTB
bsf STATUS,RP0 ;Selecciona banco 1
clrf PORTB ;Puerta B salida
movlw b'10111111'
movwf TRISC ;RC7/Rx entrada, RC6/Tx salida
movlw b'00100100'
movwf TXSTA ;TX en On, modo as韓crono con 8 bits y alta velocidad
movlw .25
movwf SPBRG ;9600 baudios con Fosc=4MHz
bsf PIE1,RCIE ;Habilita interrupci髇 en la recepci髇
bcf STATUS,RP0 ;Selecciona banco 0
movlw b'10010000'
movwf RCSTA ;USART en On, recepci髇 cont韓ua
bsf INTCON,PEIE ;Activa interrupci髇 de perif閞icos
bsf INTCON,GIE ;Activa interrupciones
Loop nop
goto Loop
end ;Fin del programa fuente
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -