Make your own free website on Tripod.com

Isto é um exemplo de rotina, em assembler, para os microcontroladores da linha PIC. Ela tem a capacidade de combinar informações geradas por 3 bits, e de acordo com cada caso emite uma resposta. (neste caso é usada para incrementar, decrementar e comutar entre valores de memória)

;*******************************************************************
;*			    ROTINA DE TECLADO 		           *
;*******************************************************************
;
	org	0x05
;
inter
	clrf	status0
	clrf	flag
;
;___________________________________________________________________
;
;
inicio_da_interrupcao
	clrf	bounce1
	btfss	portb,m		;escolha do modo de progamacao		
	goto	programacao
	call	display0	
	btfss	portb,m		;escolha do modo de progamacao		
	goto	programacao
	call	display0
	btfss	portb,m		;escolha do modo de progamacao		
	goto	programacao
	call	display0
	btfss	portb,m		;escolha do modo de progamacao		
	goto	programacao
	call	display0
	btfss	portb,m		;escolha do modo de progamacao		
	goto	programacao
	call	display0	
	btfss	portb,m		;escolha do modo de progamacao		
	goto	programacao
	call	display0	
	btfss	portb,m		;escolha do modo de progamacao		
	goto	programacao
	call	display0
	btfss	portb,m		;escolha do modo de progamacao		
	goto	programacao
	call	display0
	btfss	portb,m		;escolha do modo de progamacao		
	goto	programacao
	call	display0
	btfss	portb,m		;escolha do modo de progamacao		
	goto	programacao	
	comf	mode,f		;comuta modo
;
larga
	call	display0	;desvio para rotina de display
	btfsc	portb,m		;testa tecla modo
	goto	larga		;desvio *rotina de atend. so depois de largar*
;	comf	mode,f		;comuta modo
	call	de_verdade	;temporizacao
	call	de_verdade	;temporizacao
	call	de_verdade	;temporizacao
	call	de_verdade	;temporizacao
;	goto	volta	
;
;
;colocar no display o modo de programacao
;
;
programacao
	btfsc	portb,mais	;testa tecla incrementa
	bsf	flag,4		;seta flag de qual tecla (mais)
	btfss	portb,menos	;testa tecla decrementa
	goto	pra_la		;desvio
	bcf	flag,4		;limpa flag de qual tecla (menos)
;
pra_la
	btfss	portb,mais	;testa tecla +
	btfsc	portb,menos	;testa tecla -
	goto	ponte1		;desvio
	bcf	flag,0		;limpa flag de tecla apertada
	goto	ponte		;desvio
;
ponte1
	bsf	flag,0		;seta flag de tecla apertada
;
ponte
	btfss 	flag,0		;testa flag de tecla apertada
	goto	salto		;desvio
	btfsc	flag,1		;testa flag de ?
	goto	igualinho	;desvio
;
salto	
	btfsc	flag,0		;testa flag de tecla apertada
	goto	diferente
	btfss	flag,1
	goto	igualinho
;
diferente
	btfss	flag,3
	goto	flag_zero
;
iguala_flags1
	btfss	flag,0		;testa flag de tecla apertada
	goto	iguala_flags
	bsf	flag,1
	goto	inicio_da_interrupcao
;
iguala_flags
	bcf	flag,1
;
zera_bounce1
	clrf	bounce1
	bsf	flag,5
	goto 	volta		;new	
;
flag_zero
	clrf	status0
	movlw	0x0a
	subwf	bounce1,f
	btfss	status0,c
	goto	iguala_flags1
	addwf	bounce1,f
	bsf	flag,5
	goto	programar
;
igualinho
	btfss	flag,0		;testa flag de
	goto	volta		;vai para o programa principal
;	call	display0	;temporizacao_bounce
	call	display0	;desvio para a rotina de display	
	incfsz	bounce1,f	;incrementa seguranca de tecla
	goto	programacao	;desvio
;	
programar
	btfss	mode,0		;testa modo de programacao
	goto	programar1
	movf	progu,w
	movwf	pgm
	goto	programar2
;
programar1
	movf	prog,w
	movwf	pgm
;
programar2
	btfss	flag,5
	goto	programar3
	btfss	flag,4
	goto	decrementa
	goto	incrementa
;
programar3
	btfsc	portb,mais	;selecao
	goto	incrementa	;para
	btfsc	portb,menos	;desviar
	goto	decrementa	;o
	clrf	bounce1		;programa
	bsf	flag,3		;limpa flag 3
	goto	volta		;volta ao principal
;
incrementa
	btfsc	flag,5
	goto	incrementa2	;goto	incrementa1
	btfss	portb,mais	;goto	incrementa2
	goto	bora1
;
;incrementa1	
;	btfss	portb,mais
;	goto	bora1
;
incrementa2
;	incfsz	pgm,f		;incrementa umidade ou temperatura programada
;	goto	so_pra_chamar
;	decf	pgm,f 
;	goto	bora1
	clrf	status0
;	incf	pgm,f		;incrementa umidade ou temperatura programada
	movlw	0xc7
	subwf	pgm,w
	btfsc	status0,z
	goto	bora1
	incf	pgm,f		;incrementa umidade ou temperatura programada
	goto	so_pra_chamar
;	goto	bora1
;
so_pra_chamar
	call	temporizacao_bounce
	btfss	flag,5
	goto	incrementa
	clrf	bounce1
	goto	bora1
;
decrementa	
	btfsc	flag,5
	goto	nao_sei
	btfss	portb,menos
	goto	bora1
;
nao_sei
	clrf	status0
	decf	pgm,f		;decrementa umidade ou temperatura programada
	comf	pgm,f
	btfss   status0,z
	goto	so_pra_chamar_de_novo
	goto	bora1
;
so_pra_chamar_de_novo
	comf	pgm,f
	call	temporizacao_bounce
	btfsc	flag,5
	goto	bora1
	goto	decrementa
;
bora1		
	movf	pgm,w		;programavel em w
	btfss	mode,0		;teste de modo
	goto	carrega		;desvio
	movwf	progu1		;carrega memoria rasuravel (umidade)
	movwf	progu		;carrega memoria (umidade)
	goto	carrega2	;desvio
;
carrega
	movwf	prog		;carrega temperatura
	movwf	prog1		;carrega rasuravel
	call	temporizacao_bounce
	goto	volta		;desvio
;
carrega2	
	movf	prog,w		;temperatura em w 
	movwf	prog1		;carrega memoria rasuravel (temperatura)
;	call 	temporizacao_bounce
	goto	volta		;desvio
;
;
;
;
temporizacao_bounce	
	movf	pgm,w
	btfss	mode,0
	goto	carregue
	movwf	progu1		;carrega memoria rasuravel (umidade)
	movwf	progu		;carrega memoria (umidade)
	goto	de_verdade
;
carregue
	movwf	prog
	movwf	prog1
	movf	progu,w
	movwf	progu1
	movf	prog,w
	movwf	prog1
;
de_verdade
	movlw	0x02		;inicio da temporização 
	movwf	espera2
;
esp6	
	movlw	0x02
	movwf	espera1
;
esp5	
	movlw	0x0c
	movwf	espera
;
esp4	
	call	display0	;desvio para a rotina de refresh display
	decfsz	espera,f	
	goto	esp4		
	decfsz	espera1,f	
	goto	esp5		
	decfsz	espera2,f		
	goto	esp6		
	return			;fim da temporização