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

📄 ejem_18.asm

📁 Varios ejemplos para utilizar la PIC 16F876 en assembrer y CCS
💻 ASM
字号:
;
;								EJEMPLO 18
;						Autor: Mikel Etxebarria
;			(c) Ingenier韆 de Microsistemas Programados S.L.
;						www.microcontroladores.com
;								Bilbao 2006
;
;El manejo de la pantalla LCD, m醩 mensajes todav韆.
;
;Este ejemplo pretende introducirnos en el manejo de la pantalla LCD, para la visualizaci髇
;de diferentes mensajes.
;
		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
                		
Lcd_var		equ	0x20		;Variables (2) de las rutinas de manejo del LCD
Delay_Cont	equ	0x22		;Variable para la temporizaci髇
Temporal_1	equ	0x23		;Variable temporal
Temporal_2	equ	0x24		;Variable temporal

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

			include	"LCD_Cxx.inc"	;Incluye las rutinas de manejo del LCD

;******************************************************************************************
;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	"Microsystems",0x00

Mens_1			equ	$		;Mens_1 apunta al primer car醕ter del mensaje 1
				dt	"Engineering",0x00

Mens_2			equ	$		;Mens_2 apunta al primer car醕ter del mensaje 2
				dt	"Tfno. 944230651",0x00

Mens_3			equ	$		;Mens_3 apunta al primer car醕ter del mensaje 3
				dt	"Bilbao-Bizkaia",0x00

;*********************************************************************************
;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 visualiza en el LCD 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    LCD_DATO       	;Visualiza en el LCD
               	incf    Temporal_1,F   	;Siguiente caracter
               	goto    Mensaje_1

Inicio	        clrf 	PORTB			;Borra los latch de salida
				bsf		STATUS,RP0		;Selecciona banco 1
				clrf	TRISB			;Puerta B se configura como salida
				movlw	0x06
				movwf	ADCON1			;Puerta A digital
				movlw	b'00110001'		
				movwf	TRISA			;RA1-RA3 salidas			
				movlw	b'00000111'
				movwf	OPTION_REG		;Preescaler de 256 para el TMR0
				bcf		STATUS,RP0		;Selecciona banco 0	
		
				call	LCD_INI			;Secuencia de inicio del LCD
				movlw	b'00001100'
				call	LCD_REG			;Env韆 instrucci髇: LCD ON, Cursor OFF y blink OFF

Loop			movlw	b'00000001'
				call	LCD_REG			;Borra LCD y Home (colocar cursor en 1

⌨️ 快捷键说明

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