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