Sie sind auf Seite 1von 4

;*******************************************

;Programa modulo pwm ********************** *


;con recepcion serial asincrona (USART)******
;*******************************************

LIST P=16F877A
#INCLUDE <P16F877A.INC>

OPCION EQU 20H


RET1 EQU 21H
RET2 EQU 22H
RET3 EQU 23H
RET4 EQU 24H
FLAG1 EQU 25H
SPEED1 EQU 26H
SPEED2 EQU 27H
SPEED3 EQU 28H

ORG 00H
GOTO INICIO
ORG 05H

INICIO CLRF STATUS ;BANCO 0

MOVLW B'10000000' ;SERIAL PORT EN,


MOVWF RCSTA
CLRF CCP1CON ; CCP Module is off
CLRF TMR2 ; Clear Timer2
MOVLW 0x7F ;se modifica el periodo del pwm o su inverso
frecuencia..
MOVWF PR2 ;

CLRF INTCON ; Disable interrupts and clear T0IF

BSF STATUS, RP0 ; Bank1

;INICIA CONFIGURACION USART


CLRF PIE1 ; Disable peripheral interrupts
MOVLW B'10000000'
MOVWF TRISC
BSF TRISB,0
BCF TRISB,1
BCF TRISB,2
BCF TRISB,3
MOVLW B'00100110' ;DON`T CARE MODO ASINCRONO, SIN BIT9,TXEN OFF,MODO
ASINCRONO,H SPEED,STATUS
MOVWF TXSTA

MOVLW .25 ;9615.38 BAUDIOS, K=16 VELOCIDAD ALTA


MOVWF SPBRG

;FIN CONFIGURACION USART

CLRF STATUS
CLRF PORTC
CLRF PORTB
;*******************************************************************
;termina inicializacion de registros, configuracion de usart y pwm
;*******************************************************************

;inicio programa principal

;modulo de recepcion serial es el primero en ejecutarse

RECIBE BCF PIR1,RCIF ;limpia bandera de recepcion completa


BSF RCSTA,CREN ;iniciamos recepcion de datos
CALL RETARDO2
MOVF RCREG,W
MOVWF OPCION ;en la variable opcion queda guardado el
byte que se recibe serialmente
BCF RCSTA,CREN ; paramos la recepcion de datos

BTFSC OPCION,0 ;PREGUNTA si SE RECIBIO UN 01H SERIAL


GOTO OPCION1 ;SI EL BIT 0 ESTA EN 1 INICIA ACCION
GOTO RECIBE ;SI ESTA EN 0 VUELVE A RECIBIR

;PRIMERA OPCION DE OBJETO A TOMAR con variacion de velocidades las que se


necesiten.

OPCION1 MOVLW 0x80 ; ;controla velocidad inicial


la mas rapida
MOVWF CCPR1L ; Duty Cycle is 50% of PWM Period
CALL PWM_MOD
CALL RETARDO2

MOVLW 0x10 ; ;controla velocidad 2


disminuye
MOVWF CCPR1L ; Duty Cycle is 50% of PWM Period
CALL PWM_MOD
CALL RETARDO2

MOVLW 0x05 ; ;controla velocidad 3


MOVWF CCPR1L ; Duty Cycle is 50% of PWM Period
CALL PWM_MOD
CALL RETARDO2

MOVLW 0x00 ; ;controla velocidad 4=stop


MOVWF CCPR1L ; Duty Cycle is 50% of PWM Period
CALL PWM_MOD
CALL RETARDO2

WAITPUL BSF PORTB,3


BTFSC PORTB,0 ;PREGUNTA POR UN PULSADOR EN 0 PARA ABRIR
GOTO WAITPUL
GOTO RETRO

RETRO BSF PORTB,2


CALL RETARDO2
CALL RETARDO2
CLRF PORTB

GOTO FIN

;SUBRUTINA PWM ***************************************************************

PWM_MOD

CLRF CCP1CON ; CCP Module is off


CLRF TMR2 ; Clear Timer2
MOVLW 0x10 ;
MOVWF PR2 ;

CLRF PIR1 ; LIMPIA REGISTRO DE BANDERAS DE PERIFERICOS, AFECTA TMR2


PWM Y RECEPCION
MOVLW 0x0C ; MODO PWM , 2 LSbs DEL CILCO UTIL = 00
MOVWF CCP1CON ;
BSF T2CON, TMR2ON ; Timer2 starts to increment
;
; The CCP1 interrupt is disabled,
; do polling on the TMR2 Interrupt flag bit
;

PWM_Period
BTFSS PIR1, TMR2IF
GOTO PWM_Period
;
; Update this PWM period and the following PWM Duty cycle
;
BCF PIR1, TMR2IF
BSF PORTB,1
CALL RETARDO2
BCF PORTB,1
RETURN

;retardo de 0.5ms para completar recepcion


*******************************************

RETARDO MOVLW 0FFH


MOVWF RET1
RETAR DECFSZ RET1
GOTO RETAR
RETURN

RETARDO2 MOVLW 0FFH


MOVWF RET2
MOVWF RET3
MOVLW 07H
MOVWF RET4
RETAR2 DECFSZ RET2
GOTO RETAR2
DECFSZ RET3
GOTO RETAR2
DECFSZ RET4
GOTO RETAR2
RETURN

FIN NOP
end

Das könnte Ihnen auch gefallen