وعليكم السلام اخي محمد.. انا عندي كود سي لل hi-tec compiler
كتبتة قبل فترة لل pic16f1937
تستطيع عرض كود الاسمبلي للكود عن طريق:
View > Disassembly Listing
الكود يعمل على تغيير الديوتي سايكل للمخرج CCP1 و CCP2
كود:
#include <htc.h>
__CONFIG(FOSC_INTOSC&WDTE_OFF&MCLRE_ON&CP_OFF);
#define _XTAL_FREQ 16000000
void main (void)
{
OSCCON = 0x7B; //select internal osciallator =16Mhz
__delay_us(4); //allow the new clock to stabilize
TRISCbits.TRISC2 =1; // disable CCP1
TRISCbits.TRISC1 =1; // disable CCP2
RC1=0;
RC2=0; //clear CCP1
PR2=0x3f; // load 63 to PR2
CCP1M0=0; // sets CCP1CON in PWM mode
CCP1M1=0;
CCP1M2=1;
CCP1M3=1;
CCP2M0=0; // sets CCP2CON in PWM mode
CCP2M1=0;
CCP2M2=1;
CCP2M3=1;
C1TSEL0= 0; //CCP1 is based off Timer 2 in PWM Mode
C1TSEL1= 0;
C2TSEL0= 0; //CCP2 is based off Timer 2 in PWM Mode
C2TSEL1= 0;
CCPR1L=128; //starts with 50% duty cycle
CCPR2L=128; //starts with 50% duty cycle
TMR2IF=0; //clear timer 2 flag
T2CKPS0=0; //Prescaler is 1
T2CKPS1=0;
TMR2ON= 1; //Turn on timer2
TMR2=0; //clear timer2
TRISCbits.TRISC2 =0; //enable CCP1
TRISCbits.TRISC1 =0; //enable CCP2
while (1){
while(TMR2IF==1)
{
for(int dc = 0 ; dc < 80; dc++)
{
CCPR1L = 80 - dc ;
__delay_ms(20) ;
}
for(int dc = 0 ; dc < 80; dc++)
{
CCPR1L = dc ;
__delay_ms(20) ;
}
for(int dc = 0 ; dc < 80; dc++)
{
CCPR2L = 80 - dc ;
__delay_ms(20) ;
}
for(int dc = 0 ; dc < 80; dc++)
{
CCPR2L = dc ;
__delay_ms(20) ;
}
}
}
}