en otra ventana

Anuncio
APÉNDICE A: CÓDIGO DE MICROCONTROLADOR
;---------------------------------------------------------------------------;---------------------------------------------------------------------------;--------;----Universidad de las Américas Puebla
----;----Departamente de Ing. Electrónica
----;----TESIS
----;----Primavera 2006
----;----Luis R. Martinez Nunez
ID. 118639
----;--------;---------------------------------------------------------------------------;---------------------------------------------------------------------------;--------;----Este es un programa que convierte una señal analogica a ----;----una señal digital y agrega componente de protocolo MIDI.
----;--------;---------------------------------------------------------------------------;---------------------------------------------------------------------------list
p=16F877a
; list directive to define processor
#include <p16F877a.inc>
; processor specific variable definitions
;---------------------------------------------------------------------------;----- ----- ----- ----- DECLARACION DE VARIABLES ----- ----- ----- ------;---------------------------------------------------------------------------WTEMP
STATEMP
CONVERSION
RETRASO1
RETRASO2
ANTERIOR
TEMPORAL
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0X20
0X21
0X22
0X23
0X24
0X25
0X26
;---------------------------------------------------------------------------;----- ----- ----- ----VECTOR DE INTERRUPCION
----- ----- ----- ------;----------------------------------------------------------------------------
;
;
ORG
NOP
NOP
GOTO
ORG
GOTO
0X00
INICIALIZA
0X04
ISR
;---------------------------------------------------------------------------;----- ----- ----- ----- INICIALIZACION DE VARIABLES ----- ----- ---- ------;---------------------------------------------------------------------------ORG
INICIALIZA
0X50
;-------------- LIMPIA REGISTROS
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
ADRESH
ADRESL
STATUS
WTEMP
STATEMP
CONVERSION
ANTERIOR
TEMPORAL
RETRASO1
RETRASO2
PORTA
PORTC
PORTD
;-------------- CONFIGURACION DE PUERTOS
BSF
CLRF
MOVLW
MOVWF
CLRF
CLRF
BCF
STATUS, RP0
TRISA
0X01
TRISA
TRISC
TRISD
STATUS, RP0
; Selecciona Banco1
; Un pin de Entrada en PuertoA
; PuertoC de Salida = Pin TX salida
; PuertoD de Salida (TEMPORAL)
; Selecciona Banco0
;-------------- TRANSMISION CON USART
108
;
BSF
BSF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
BSF
STATUS, RP0
TXSTA, BRGH
0X27
SPBRG
0X26
TXSTA
STATUS, RP0
RCSTA, SPEN
; Selecciona Banco1
; High-Speed
; Velocidad = 31.250Kbps, Fosc = 20MHz
; 8 bits, TXEN ON, Asincrona, BGRH = 1
; Selecciona Banco0
; Habilita los pines para transmision
;-------------- CONFIGURACION ADC
BSF
CLRF
BCF
MOVLW
MOVWF
STATUS, RP0
ADCON1
STATUS, RP0
0x41
ADCON0
;
;
;
;
Selecciona Banco1
Entradas A/D todas analogicas
Selecciona Banco0
Reloj/8, Canal 0, DONE, A/D On
;-------------- COMIENZA CONVERSION
BSF
CALL
CALL
BSF
ADCON0, 0
OFFSET1
ACQ_TIME
ADCON0, GO
; Activa convertidor
; Tacq
; Inicia conversion despues de Tacq desde ADCON0,ON
;-------------- CONFIGURACION DE INTERRUPCIONES
;
;
;
;
;
;
CLRF
CLRF
BSF
BSF
BCF
BCF
BSF
BSF
BSF
INTCON
PIR1
STATUS, RP0
PIE1, ADIE
STATUS, RP0
PIR1, ADIF
INTCON, PEIE
INTCON, GIE
RCSTA, CREN
;
;
;
;
;
;
;
;
;
Limpia interrupciones
Limpia banderas
Selecciona Banco1
Habilita interrupciones
Selecciona Banco0
Limpia interrupt flag
Habilita interrupciones de perifericos
Habilita interrupciones
Habilita los pines para transmision
;---------------------------------------------------------------------------;---------------------------------------------------------------------------;----- ----- ----- ----M A I N
----- ----- ----- ----- ----;---------------------------------------------------------------------------;---------------------------------------------------------------------------MAIN
NOP
CALL
NOP
NOP
GOTO
NOP
TRANSMITE
MAIN
----------------------------------------------------------------------------;----- ----- ----- ----- ----SUBRUTINAS
----- ----- ----- ------------;---------------------------------------------------------------------------TRANSMITE
BTFSS
GOTO
BCF
COMF
MOVF
MOVWF
MOVWF
RRF
BCF
MOVF
MOVWF
;CONTENSION
MOVF
SUBWF
BTFSC
GOTO
NOP
PIR1, ADIF
TRANSMITE
PIR1, ADIF
ADRESH, 1
ADRESH, W
CONVERSION
TEMPORAL
CONVERSION, 1
CONVERSION, 7
CONVERSION, W
PORTD
; Checa si ya termino la conversion A/D
; Limpia bandera de fin de conversion A/D
;
;
;
;
;
Mueve la conversion al WREG
Mueve la conversion a CONVERSION
Mueve la conversion a TEMPORAL
Rota a la derecha para rango de 0-127
Apaga el MSB de CONVERSION que viene de carry
; Muestra la conversion en el PuertoD (TEMPORAL)
TEMPORAL, W
ANTERIOR
STATUS, Z
TACQ
; Mueve la conversion al WREG
0xB0
TXREG
LIBRE
STATUS, RP0
; Mueve Controlador Canal 0 al TXREG para transmision
; Salta si esta apagado Zero (son iguales no envia) y polea
; se cicla
;CC
MOVLW
MOVWF
CALL
BCF
; Identifica cuando se termina de transmitir por USART
; Selecciona Banco0 despues de LIBRE
109
MOVLW
MOVWF
CALL
BCF
0x12
TXREG
LIBRE
STATUS, RP0
;
;
;
;
Mueve Numero de Controlador al TXREG para transmision
0x01 Modulation Wheel
Llama a LIBRE para transmitir el valor
Selecciona Banco0 despues de LIBRE
MOVF
MOVWF
CALL
BCF
CONVERSION, W
TXREG
LIBRE
STATUS, RP0
;
;
;
;
Recupera valor de CONVERSION para Transmitirlo
Mueve la conversion a TXREG para ser transmitida
Identifica cuando se termina de transmitir por USART
Selecciona Banco0 despues de LIBRE
CALL
CALL
OFFSET2
ACQ_TIME
; Delay
MOVF
MOVWF
CALL
CALL
BSF
RETURN
TEMPORAL, W
ANTERIOR
OFFSET1
ACQ_TIME
ADCON0, GO
; Mueve la conversion al WREG
; La conversion ya es "anterior"
; Tacq
BSF
BTFSC
RETURN
GOTO
STATUS, RP0
TXSTA, TRMT
; Selecciona Banco1
; Salta si esta apagado TRMT (aun hay transmision) y polea
MOVLW
MOVWF
MOVLW
MOVWF
RETURN
0X16
RETRASO1
0X01
RETRASO2
; Define valores para registros de retardo
; 20us de retraso para carga de capacitor de ADC
MOVLW
MOVWF
MOVLW
MOVWF
RETURN
0XFF
RETRASO1
0XF4
RETRASO2
; Define valores para registros de retardo
; 50ms de retraso para NOTE ON / NOTE OFF MIDI
RETRASO1
ACQ_TIME
RETRASO2
ACQ_TIME
; Ciclo de decremento de registros de retardo
TACQ
; Reinicia conversion despues de Tacq
LIBRE
LIBRE
OFFSET1
OFFSET2
ACQ_TIME
NOP
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END
110
Descargar