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

📄 ejem_19.asm

📁 Varios ejemplos para utilizar la PIC 16F876 en assembrer y CCS
💻 ASM
字号:
;
;								EJEMPLO 19
;						Autor: Mikel Etxebarria
;			(c) Ingenier韆 de Microsistemas Programados S.L.
;						www.microcontroladores.com
;								Bilbao 2006
;
;Introducci髇 al manejo del teclado.
;
;Haciendo uso de las rutinas incluidas en el fichero TECLADO.INC, se trata de leer el tecla-
;do y, visualizar sobre los leds de la puerta B el c骴igo BCD de la tecla pulsada. La 
;visualizaci髇 se mantiene estable durante dos segundos hasta una nueva pulsaci髇.
;
;Se trata de un ejemplo en el que la Puerta B se reconfigura din醡icamente. Inicialmente es
;configurada como salida para presentaci髇 del resultado. Posteriormente, la rutina de 
;exploraci髇 del teclado reconfigura RB0-RB3 como salidas y RB4-RB7 como entradas

		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
     
Key_var			equ   	0x20	;Inicio de las 6 variables empleadas por las rutinas de manejo del teclado
Delay_Cont		equ	0x26		;Variable para la temporizaci髇

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

				include	"TECLADO.INC"	;Incluye rutinas de manejo del teclado

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

Inicio	       	clrf 	PORTB		;Borra los latch de salida
				bsf		STATUS,RP0	;Selecciona banco 1
				clrf	TRISB		;Puerta B se configura como salida				
				movlw	b'00000111'
				movwf	OPTION_REG	;Preescaler de 256 para el TMR0
				bcf		STATUS,RP0	;Selecciona banco 0	
		
Loop			call	Key_Scan	;Explora el teclado
				movlw	0x80
				subwf	Tecla,W
				btfsc	STATUS,Z	;Hay alguna pulsada ??
				goto	Loop		;No

				movf	Tecla,W		;Lee el c骴igo de la tecla pulsada
				movwf	PORTB		;Lo visualiza sobre los leds de la Puerta B
				movlw	.200
				movwf	Delay_Cont
				call	Delay_var	;Temporiza 2 segundos
				clrf	PORTB		;Desactiva visualizaci髇
				goto	Loop
	
				end					;Fin del programa fuente

⌨️ 快捷键说明

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