📄 ejem_36.asm
字号:
; EJEMPLO 36
; Autor: Mikel Etxebarria
; (c) Ingenier韆 de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;El m骴ulo USART. Transmisi髇 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.
;
;El ejemplo transmite una trama cada segundo con el caracter ASCII de la letra A.
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
Delay equ 0x20 ;variable de temporizaci髇
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 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 interrupci髇. Se espera que el TMR0 rebase 100 veces para un delay de 1 s.
;Entonces se transmite el caracter
Inter bcf INTCON,T0IF ;Restaura el flag del TMR0
movlw ~.39
movwf TMR0 ;Reponer el TMR0
decfsz Delay,F ;Se han provocado 100 rebasamientos de 10mS (1s.) ?
retfie ;Todav韆 no
movlw .100
movwf Delay ;Reponer variable de temporizaci髇 con el valor 20
movlw 'A'
call Tx_Dato ;Transmite el dato
retfie
;*******************************************************************************************
;Programa principal
Inicio clrf PORTC
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'10111111'
movwf TRISC ;RC7/Rx entrada, RC6/Tx salida
movlw b'11000111'
movwf OPTION_REG ;Preescaler de 256 asociado al TMR0
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
bcf STATUS,RP0 ;Selecciona banco 0
bsf RCSTA,SPEN ;USART en On
;Trabajando a 4MHz y con un preescaler de 256, el TMR0 se carga con 39 para conseguir que
;rebase cada 10mS. Esto se repite tantas veces como indique la variable Delay para
;obtener la temporizaci髇 final deseada.
bcf INTCON,T0IF ;Restaura el flag del TMR0
movlw ~.39
movwf TMR0 ;El TMR0 rebasa cada 10 mS
movlw .100
movwf Delay ;Repetir 100 veces para obtener 1 seg.
movlw b'10100000'
movwf INTCON ;Habilita interrupci髇 del TMR0
Loop nop
goto Loop
end ;Fin del programa fuente
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -