Code:
define OSC 20
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 10 ' 115200 Baud @ 20MHz, -1,36%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
' Set CCPx pins to outputs
TRISC.2 = 0 ' CCP1 output
TRISC.1 = 0 ' CCP2 output (could also be assigned to RB3)
TRISB.5 = 0 ' CCP3 output
' Set CCP modules to PWM mode
CCP1CON = %00001100 ' Mode select = PWM
CCP2CON = %00001100 ' Mode select = PWM
CCP3CON = %00001100 ' Mode select = PWM
INTCON = %11000000
LOAD = 64386' 4320Hz
'LOAD = 0
TMR1H = LOAD.HIGHBYTE
TMR1L = LOAD.LOWBYTE
T1CON = %00000001
PIE1.0 = 1
PR2 = 49
PORTD.0 = 0
' Set TMR2 up for 1:1 prescale & turn it on
T2CON = %00000100 ' TMR2 ON 1:1 prescale
ASM
INT_LIST macro ;IntSource, Label, Type, ResetFlag?
INT_Handler TMR1_INT, _Timer1, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
@ INT_ENABLE TMR1_INT ; Habilita interrupção do TMR1
MAIN:
IF FLAG = 1 THEN
flag = 0
CONTA = CONTA + 1
CONTB = CONTB + 1
CONTC = CONTC + 1
if contA = 71 then contA = 0
if contB = 71 then contB = 0
if contC = 71 then contC = 0
index = conta
GOSUB tabela
va = v
index = contB
GOSUB tabela
vb = v
index = contC
GOSUB tabela
vc = v
GOSUB SAIDA
endif
GOTO MAIN
TABELA:
SELECT CASE DIST
CASE 1: ' Fundamental
LOOKUP INDEX, [100,109,118,126,135,143,151,158,165,171,177,183,187,191,195,197,199,200,200,199,198,196,193,189,185,180,175,168,162,154,147,139,130,122,113,104,96,87,78,70,61,53,46,38,32,25,20,15,11,7,4,2,1,0,0,1,3,5,9,13,17,23,29,35,42,49,57,65,74,82,91], V
CASE 2: ' 3 com 20%
LOOKUP INDEX, [100,114,127,140,152,162,170,177,182,185,187,187,187,185,184,182,181,180,180,180,181,182,184,185,187,187,187,185,182,177,170,162,152,140,127,114,100,86,73,60,48,38,30,23,18,15,13,13,13,15,16,18,19,20,20,20,19,18,16,15,13,13,13,15,18,23,30,38,48,60,73,86], v
CASE 3: ' 3 com 20% + 5 com 10%
LOOKUP INDEX, [100,118,135,150,161,170,175,178,178,178,177,177,178,180,182,185,188,189,190,189,188,185,182,180,178,177,177,178,178,178,175,170,161,150,135,118,100,82,65,50,39,30,25,22,22,22,23,23,22,20,18,15,12,11,10,11,12,15,18,20,22,23,23,22,22,22,25,30,39,50,65,82], V
CASE 4: ' 3 com 20% + 5 com 10% + 7 com 10%
LOOKUP INDEX, [100,124,144,159,168,171,170,168,168,171,175,181,187,190,190,188,184,181,180,181,184,188,190,190,187,181,175,171,168,168,170,171,168,159,144,124,100,76,56,41,32,29,30,32,32,29,25,19,13,10,10,12,16,19,20,19,16,12,10,10,13,19,25,29,32,32,30,29,32,41,56,76], V
CASE 5: ' 5 com 10% + 7 com 20%
lookup index, [100,122,139,149,151,147,141,136,137,145,157,172,186,194,197,194,188,183,181,183,188,194,197,194,186,172,157,145,137,136,141,147,151,149,139,122,100,78,61,51,49,53,60,64,63,55,43,28,14,6,3,6,12,17,19,17,12,6,3,6,14,28,43,55,63,64,59,53,49,51,61,78], v
CASE 6:
return
CASE 7:
return
end select
return
SAIDA:
CCP1CON.4 = VA.0
CCP1CON.5 = VA.1
CCPR1L = VA >> 2
CCP2CON.4 = VB.0
CCP2CON.5 = VB.1
CCPR2L = VB >> 2
CCP3CON.4 = VC.0
CCP3CON.5 = VC.1
CCPR3L = VC >> 2
RETURN
Timer1:
TMR1H = load.highbyte
TMR1L = load.lowbyte
FLAG = 1
@ INT_RETURN
END
Bookmarks