Hi Everyone, and many thanks for the answers to my post!!!
Hi follow your opinions and i change the code to this;
The code works great. Initially it had 288 words, after change went to 213 words.Code:'**************************************************************** '* Name : PWM.BAS * '* Author : Gadelhas * '* Notice : Copyright (c) 2010 * '* : All Rights Reserved * '* Date : 28-11-2010 * '* Version : 1.0 * '* Notes : * '* : PIC12F683 + MICROCODE + EASYPICV6 * '**************************************************************** ' INCLUDE's e FUSES ' ==================================================================== @ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF ' ==================================================================== Define OSC 8 ' VARIÁVEIS ' ==================================================================== AdcValue var word: AdcValue=0 I var word: I=0 Sample var word: sample=0 ' REGISTOS E PINOUT 1 = IN; 0 = OUT ' ==================================================================== '76543210 TRISIO = %00000001 '76543210 GPIO = %00000000 ANSEL = 1 'GP0 AANALOG VRCON = 0 'VREF OFF CMCON0 = 7 'COMPARATOR OFF ADCON0 = %10000000 'RIGHT JUSTIFY - 128 PR2 = %00011000 'SET 24 - 5000Hz - 8Bits T2CON = %00000110 'TIMER2 ON - PRESCALER 1:16 - Max Duty Value 100 - 1% Step CCPR1L = %00000000 CCP1CON = %00001100 'PWM ON ' NOMES PINOUT ' ==================================================================== POT1 VAR GPIO.0 ' DEFINIÇÕES ' ==================================================================== DEFINE ADC_BITS 10 ' Set number of bits in result DEFINE ADC_CLOCK 3 ' Set clock source (rc = 3) DEFINE ADC_SAMPLEUS 50 ' Set sampling time in microseconds ' INICIO PROGRAMA ' ==================================================================== Main: gosub ADC CCPR1L.7=AdcValue.9 CCPR1L.6=AdcValue.8 CCPR1L.5=AdcValue.7 CCPR1L.4=AdcValue.6 CCPR1L.3=AdcValue.5 CCPR1L.2=AdcValue.4 CCPR1L.1=AdcValue.3 CCPR1L.0=AdcValue.2 CCP1CON.5=AdcValue.1 CCP1CON.4=AdcValue.0 GOTO MAIN ' SUB-ROTINAS ' ==================================================================== ADC: for I = 1 to 15 ADCON0.1 = 1 Not_Done: if ADCON0.1 = 1 then not_done adcin 0,AdcValue sample = AdcValue + sample next I AdcValue = (sample/163) sample=0 return END
Is it possible to improve this piece of code?;
Is this correct?Code:CCPR1L.7=AdcValue.9 CCPR1L.6=AdcValue.8 CCPR1L.5=AdcValue.7 CCPR1L.4=AdcValue.6 CCPR1L.3=AdcValue.5 CCPR1L.2=AdcValue.4 CCPR1L.1=AdcValue.3 CCPR1L.0=AdcValue.2 CCP1CON.5=AdcValue.1 CCP1CON.4=AdcValue.0
>>1 is the same as devide by 2
>>2 is the same as devide by 4
>>3 is the same as devide by 8
>>4 is the same as devide by 16
>>5 is the same as devide by 32
>>6 is the same as devide by 64
>>7 is the same as devide by 128
>>8 is the same as devide by 256
and
<<1 is the same as multiply by 2
<<2 is the same as multiply by 4
<<3 is the same as multiply by 8
<<4 is the same as multiply by 16
<<5 is the same as multiply by 32
<<6 is the same as multiply by 64
<<7 is the same as multiply by 128
<<8 is the same as multiply by 256
Thanks once again to everyone!!




Bookmarks