Modulación de Ancho de Pulso PWM

buenas tardes, lo que pasa es que me han colocado a hacer un pwm y me dieron esta programacion

Código:
;				PWM
;	En el puerto B se introduce un valor que determinará el ancho del pulso, que aparece en RC2/CCP1. El proceso es
;	continuo dado que se trabaja en un ciclo infinito.

	list      p=16f877            ; list directive to define processor
	#include <p16f877.inc>        ; processor specific variable definitions
	
	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF 

;	DEFINICIÓN DE VARIABLES	______________________________________________________________________________________

ANCHO	EQU		0x020		; Posición en RAM para la parte alta del contador de 2640 cambios equivalentes a 3s,
BANDERA	EQU		0x022		; Almacena bits de indicaciòn de procesos del programa

;	CÓDIGO DEL PROGRAMA ___________________________________________________________________________________________

		ORG	0x0000
		GOTO	INICIO
		
		ORG	0x0020
INICIO	BCF		STATUS,RP0
		BCF	STATUS,RP1	; Banco 0
		CLRF	PORTB		; Borrada memoria del puerto B
		CLRF	PORTC		; Borrada memoria del puerto C
		BSF	STATUS,RP0	; Banco 1
		MOVLW	B'11111111'	
		MOVWF	TRISB		; Puerto B entradas
		MOVLW	B'00000000'
		MOVWF	TRISC		; Puerto C salidas
		MOVLW	0x0FF
		MOVWF	PR2		; Se ajusta el preescaler al máximo
		BCF	STATUS,RP0	; Banco 0		
		MOVLW	0x00F		
		MOVWF	CCP1CON		; Modo PWM y los 2 bits menos significativos del ciclo de trabajo en cero
		MOVLW	0x007
		MOVWF	T2CON		; Timer2 activado y preescaler divide por 16.
CICLO	MOVF	PORTB,0
		MOVWF	CCPR1L		; Carga los 8 bits más significativos del ciclo de trabajo
		GOTO	CICLO
		SLEEP
		END
lo ejecute y corre bien osea buil sucedded pero quisiera entender esta programacion que significa para poder simularlo en proteus
 
Última edición por un moderador:
adjunto la programacion que hice en mplab esta comprimido
 

Adjuntos

  • Nueva carpeta (3).rar
    9.3 KB · Visitas: 60
Atrás
Arriba