⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ejem_38.asm

📁 Varios ejemplos para utilizar la PIC 16F876 en assembrer y CCS
💻 ASM
字号:
;
;								EJEMPLO 38
;						Autor: Mikel Etxebarria
;			(c) Ingenier韆 de Microsistemas Programados S.L.
;						www.microcontroladores.com
;								Bilbao 2006
;
;Transmite, mediante el USART, mensajes de texto
;
		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_Cont	equ	0x20		;Variable para la temporizaci髇
Temporal_1	equ	0x21		;Variable temporal
Temporal_2	equ	0x22		;Variable temporal

			org	0x00		;Vector de RESET	
			goto	Inicio
			org	0x05

;******************************************************************************************
;Seg鷑 el valor contenido en el registro W, se devuelve el car醕ter a visualizar

Tabla_Mensajes	movwf	PCL		;Calcula el desplazamiento sobre la tabla

;***********************************************************************************
;La directiva DT genera tantas intsrucciones RETLW como bytes o caracteres contenga

Mens_0			equ	$		;Mens_0 apunta al primer car醕ter del mensaje 0
				dt	"Inegenieria de Microsistemas Programados S.L.",0x0d,0x0a,0x00

Mens_1			equ	$		;Mens_1 apunta al primer car醕ter del mensaje 1
				dt	"Alda. Mazarredo N. 47-1 dpto. 2",0x0d,0x0a,0x00

Mens_2			equ	$		;Mens_2 apunta al primer car醕ter del mensaje 2
				dt	"48009 Bilbao - Bizkaia",0x0d,0x0a,0x00

Mens_3			equ	$		;Mens_3 apunta al primer car醕ter del mensaje 3
				dt	"Tfno./Fax. 944230651 (www.microcontroladores.com)",0x0d,0x0a,0x0a,0x00

;********************************************************************************************
;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

;*********************************************************************************
;Delay_var: Esta rutina de prop髎ito general realiza una temporizaci髇 variable
;entre 10 mS y 2.5". Se emplea un preescaler de 256 y al TMR0 se le carga con 39. 
;La velocidad de trabajo es de 4Mhz y por tanto el TMR0 se incrementa cada 1uS. De 
;esta forma, el TMR0 debe contar 39 eventos que, con un preescaler de 256 hace una
;intervalo total de 10000 uS (39 * 256 * 1). Este intervalo de 10 mS se repite tantes veces como 
;indique la variable "Delay_cont", es por ello que el delay m韓imo es de 10 mS ("Delay_cont=1) 
;y el m醲imo de 2.5" (Delay_cont=255).

Delay_var:		bcf		INTCON,T0IF		;Desconecta el flag de rebosamiento
				movlw	~.39		
				movwf	TMR0			;carga el TMR0 con 39
Intervalo		btfss	INTCON,T0IF		;Rebasamiento del TMR0 ??
				goto	Intervalo		;Todav韆 no		
				decfsz	Delay_Cont,F	;Decrementa contador de intervalos
				goto	Delay_var		;Repite el intervalo de 10 mS
				return	

;*************************************************************************************
;Mensaje: Esta rutina transmite v韆 USAR el mensaje cuyo inicio est釥 indicado en
;el acumulador. El fin de un mensaje se determina mediante el c骴igo 0x00

Mensaje        	movwf  	Temporal_1     	;Salva posici髇 de la tabla
Mensaje_1      	movf   	Temporal_1,W   	;Recupera posici髇 de la tabla
               	call   	Tabla_Mensajes 	;Busca caracter de salida
               	movwf  	Temporal_2     	;Guarda el caracter
               	movf   	Temporal_2,F
               	btfss  	STATUS,Z       	;Mira si es el 鷏timo
               	goto   	No_es_ultimo
               	return
No_es_ultimo   	call    Tx_Dato       	;Transmite
               	incf    Temporal_1,F   	;Siguiente caracter
               	goto    Mensaje_1

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       
		
Loop			movlw	Mens_0
				call	Mensaje			;Transmite el mensaje 0
				movlw	.100
				movwf	Delay_Cont
				call	Delay_var		;Temporiza 1 segundos
				movlw	Mens_1
				call	Mensaje			;Transmite mensaje 1
				movlw	.100
				movwf	Delay_Cont
				call	Delay_var		;Temporiza 1 segundos
				movlw	Mens_2
				call	Mensaje			;Transmite el mensaje 2
				movlw	.100
				movwf	Delay_Cont
				call	Delay_var		;Temporiza 1 segundos
				movlw	Mens_3
				call	Mensaje			;Transmite el mensaje 3
				movlw	.100
				movwf	Delay_Cont
				call	Delay_var		;Temporiza 1 segundos
				goto	Loop

				end						;Fin del programa fuente

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -