Buscar

Lab11 p1 PWMdutycycle

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

List	p=16f877a
#include <p16f877a.inc>
#include <up_macros.inc>
__CONFIG H'3F32'
ERRORLEVEL -302, -305
	cblock 0x20
	car_rx
	endc
	prescal equ	.4	;4 ou .16
	Fosc	equ	.16000	;KHz
	Fpwm	equ	.10	;KHz
	duty	equ	.60	;%
	k_pr2	equ	Fosc/.4/Fpwm/prescal - 1
	IF k_pr2 > D'255'
	ERROR "PR2 max. = 255"
	ENDIF
	duty10	equ	duty*(k_pr2+1)/D'25'
	k_ccpr1l equ	duty10/4	;0x3C ou 0x0F
	duty2L	equ	duty10 & 3
	
;Calcula Freq con parametros definidos
	freq	equ	Fosc*D'250'/prescal/(k_pr2+1)
	org	0x00
	goto	inicio
	org	0x04
inicio: banco1
	movlw	0x07	
	movwf	ADCON1
	bcf	TRISC,RC2
	;Configura periodo do PWM
	movlw	k_pr2
	movwf	PR2
	banco0
;Configura prescaler
	IF prescal == 1
	bcf	T2CON,1
	bcf	T2CON,0
 	ENDIF
 	IF prescal == 4
	bcf	T2CON,1
	bsf	T2CON,0
 	ENDIF
 	IF prescal == 16
	bsf	T2CON,1
	bcf	T2CON,0
 	ENDIF
;Configura Duty cycle
	movlw	k_ccpr1l
	movwf	CCPR1L
 	IF duty2L == 0
	bcf	CCP1CON,5
	bcf	CCP1CON,4
 	ENDIF
 	IF duty2L == 1
	bcf	CCP1CON,5
	bsf	CCP1CON,4
	ENDIF
 	IF duty2L == 2
	bsf	CCP1CON,5
	bcf	CCP1CON,4
 	ENDIF
 	IF duty2L == 3
	bsf	CCP1CON,5
	bsf	CCP1CON,4
 	ENDIF
;Liga o TMR2
	bsf	T2CON,TMR2ON
;Define CCP1 como PWM
	bsf	CCP1CON,CCP1M3	
	bsf	CCP1CON,CCP1M2
;Envia Freq 
	call	Inicia_LCD
	call	LCD_txt_freq
	movlw	LCD_Linha_2
	call	EnviaCmdLCD
	clrf	Binario5
	clrf	Binario4
	clrf	Binario3
	movlw	high freq
	movwf	Binario2
	movlw	low freq
	movwf	Binario1
	call	bin40_bcd
	call	prt_3bcd.3bcd_khz
loop	goto	$
	#include "up_bin40-bcd.asm"
	#include "up_md_lcd_driver.asm"
	#include "up_mensagens.asm"
	END

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais