📄 jj.txt
字号:
};
//=============================================================
void CLEARAM (void)
{
//nop();
};
void timer1_set (void)
{
T1CON=0;
TMR1=0;
PR1=0X100; //4mS/次.
T1CONbits.TSIDL=0;
T1CONbits.TGATE=0;
T1CONbits.TCKPS1=0;
T1CONbits.TCKPS0=0;
T1CONbits.TSYNC=0;
T1CONbits.TCS=0;
T1CONbits.TON=1;
IPC0bits.T1IP=1; //T1优先.
IEC0bits.T1IE=1;
};
void INT_SET (void)
{
IPC0=IPC1=IPC2=IPC3=IPC4=IPC5=IPC7=IPC8=0;
IEC0=IEC1=IEC2=0;
//--------------------
//中断嵌套.
INTCON1=0;
INTCON2=0;
//--------------------
//中断优先权处理.
IPC8bits.CMP4IP=0;
IPC7bits.CMP1IP=0;
IPC7bits.CMP2IP=0;
IPC7bits.CMP3IP=0;
IPC4bits.PWM1IP=0;
IPC5bits.PWM2IP=0;
IPC5bits.PWM3IP=0;
IPC5bits.PWM4IP=0;
IPC4bits.INT1IP=0;
IPC4bits.INT2IP=0;
IPC4bits.PSEMIP=0;
IPC4bits.PWM1IP=0;
IPC3bits.NVMIP=0;
IPC3bits.SI2CIP=0;
IPC3bits.MI2CIP=0;
IPC2bits.SPI1IP=0;
IPC2bits.U1RXIP=0;
IPC2bits.U1TXIP=0;
IPC2bits.ADIP=0;
IPC1bits.T3IP=0;
IPC1bits.T2IP=0;
IPC0bits.T1IP=1; //T1优先.
IPC0bits.OC1IP=0;
IPC0bits.IC1IP=0;
IPC0bits.INT0IP=0;
//--------------------
IFS0=IFS1=IFS2=0;
//--------------------
//中断位开放.
IEC0bits.T1IE=1;
};
//==========================================================================================================
void ADC_Init(void)
{
ADCON=ADCPC0=0;
ADSTAT=0X00; //AD对取样结果
ADBASE=0X1; //AD基本配置.
// ADPCFG=0X00; //AD端口配置. 0为AD脚.1为IO脚.
// ADCPC0=0XE2E2; //AD对配置. AN3-AN2,AN1-AN0
// ADCPC1=0XE2E2; //AD对配置. AN7-AN6,AN5-AN4
// ADCPC2=0XE2E2; //AD对配置. AN11-AN10,AN9-AN8
// ADCONbits.ADSIDL=0;
ADCONbits.GSWTRG=0;
// ADCONbits.FORM=0;
// ADCONbits.EIE=1;
// ADCONbits.ORDER=1;
// ADCONbits.SEQSAMP=1;
// ADCONbits.ADCS=0;
//ADCONbits.ADON=1;
ADCONbits.ADSIDL = 0; /* Operate in Idle Mode */
ADCONbits.FORM = 0; /* Output in Integer Format */
ADCONbits.EIE = 1; /* No Early Interrupt */
ADCONbits.ORDER = 0; /* Even channel first */
ADCONbits.SEQSAMP = 1; /* Sequential Sampling Enabled */
ADCONbits.ADCS = 5; /* Clock Divider is set up for Fadc/14 */
ADPCFG = 0xFFFC; /* AN0 and AN1 are analog inputs */
ADSTAT = 0; /* Clear the ADSTAT register */
ADCPC0bits.TRGSRC0 = 0x1; /* Trigger conversion on TMR1 Prd Match */
ADCPC0bits.PEND0 =1;
ADCPC0bits.SWTRG0 =1;
ADCPC0bits.IRQEN0 = 1;
/* Enable the interrupt */
/* Set up the Interrupts */
IFS0bits.ADIF = 0; /* Clear AD Interrupt Flag */
IPC2bits.ADIP = 4; /* Set ADC Interrupt Priority */
IEC0bits.ADIE = 1; /* Enable the ADC Interrupt */
/* Enable ADC and Timer */
ADCONbits.ADON = 1; /* Start the ADC module */
PTPER = 2048; /* PWM Period = 2.199 usec @ 29.1 MIPS */
/* Refer to PWM section for more details */
/* Initialize PWM Generator 1 */
IOCON1bits.PENH = 1; /* PWM Module controls High output */
IOCON1bits.PENL = 1; /* PWM Module controls Low output */
IOCON1bits.POLH = 0; /* High Output Polarity is active High */
IOCON1bits.POLL = 0; /* Low Output Polarity is active High */
IOCON1bits.PMOD = 1; /* Independant output mode */
IOCON1bits.OVRENH = 0; /* High Output Override disabled */
IOCON1bits.OVRENL = 0; /* Low Output Override disabled */
TRGCON1bits.TRGDIV = 0; /* Trigger on evry event */
TRGCON1bits.TRGSTRT = 0; /* Start the counting at the start */
TRIG1 = 200; /* Trigger event at 0.214 usec from
start of the PWM cycle */
PWMCON1bits.FLTSTAT = 0; /* Clear Fault Interrupt flag */
PWMCON1bits.CLSTAT = 0; /* Clear Current Limit Interrupt flag */
PWMCON1bits.TRGSTAT = 0; /* Clear PWM Trigger Interrupt flag */
PWMCON1bits.FLTIEN = 0; /* Disable Fault Interrupt */
PWMCON1bits.CLIEN = 0; /* Disable Current Limit Interrupt */
PWMCON1bits.TRGIEN = 0; /* Disable Trigger Interrupt */
PWMCON1bits.ITB = 0; /* Time base is read from PTMR */
PWMCON1bits.MDCS = 0; /* Duty cycle is read from PDC */
PWMCON1bits.DTC = 2; /* No Dead Time */
PWMCON1bits.XPRES = 0; /* No extenal reset for PTMR */
PWMCON1bits.IUE = 0; /* Immediate update to PDC */
PDC1 = 128; /* Start with a Ton value of 0.137usec */
PHASE1 = 0; /* No staggering */
/* Intialize the ADC */
ADCONbits.ADSIDL = 0; /* Operate in Idle Mode */
ADCONbits.FORM = 0; /* Output in Integer Format */
ADCONbits.EIE = 1; /* Enable Early Interrupt */
ADCONbits.ORDER = 0; /* Even channel first */
ADCONbits.SEQSAMP = 1; /* Sequential Sampling Enabled */
ADCONbits.ADCS = 5; /* Clock Divider is set up for Fadc/14 */
ADPCFG = 0xFFFC; /* AN0 and AN1 are analog inputs */
ADSTAT = 0; /* Clear the ADSTAT register */
ADCPC0bits.TRGSRC0 = 0x4; /* Trigger conversion on PWM#1 Trigger */
ADCPC0bits.IRQEN0 = 1; /* Enable the interrupt */
ADCONbits.ADON = 1; /* Start the ADC module */
/* Set up the Interrupts */
IFS0bits.ADIF = 0; /* Clear AD Interrupt Flag */
IPC2bits.ADIP = 4; /* Set ADC Interrupt Priority */
IEC0bits.ADIE = 1; /* Enable the ADC Interrupt */
PTCON = 0x8000; /* Enable PWM Module */
}
//==========================================================================================================
void PWM_Init(void)
{
/*~~~~~~~~~~~~~~~~~~~~~~~ PWM1 Configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/* PWM1 I/O Control Register register */
IOCON1bits.PENH = 0; /* PWM1H is controlled by GPIO module */
IOCON1bits.PENL = 1; /* PWM1L is controlled by PWM module */
IOCON1bits.PMOD = 1; /* Select Independent Output PWM mode */
/* Load PDC1 register with initial Duty Cycle value */
PDC1 = 640;
/* Load PDTR1 and ALTDTR2 register with preset dead time value */
DTR1 = 64; /* Deadtime setting */
ALTDTR1 = 64; /* Deadtime setting */
/* PHASE1 register */
PHASE1 = 0; /* No phase shift */
/*~~~~~~~~~~~~~~~~~~~~~~~ PWM2 Configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/* PWM2 I/O Control Register register */
IOCON2bits.PENH = 0; /* PWM2H is controlled by GPIO module */
IOCON2bits.PENL = 1; /* PWM2L is controlled by PWM module */
IOCON2bits.PMOD = 1; /* Select Independent Output PWM mode */
/* Load PDC2 register with initial Duty Cycle value */
PDC2 = 640;
/* Load PDTR2 and ALTDTR2 register with preset dead time value */
DTR2 = 64; /* Deadtime setting */
ALTDTR2 = 64; /* Deadtime setting */
/* PHASE2 register */
PHASE2 = 240; /* approximately 250 nsec phase shift */
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/* Configure PTPER register to produce 400kHz PWM frequency */
PTPER = 2380; /* PWM Period @30 MIPS, 2.5usec == 400kHz */
/* PWM Time Base Control Register */
PTCONbits.PTEN = 1; //_PTEN=1; PWM使能.
//-------------------------------------------
}
//==========================================================================================================
int main(void)
{
//======================================
CLEARAM(); //清内存
timer1_set(); //时间中断设定
//INT_SET(); //开对应中断.
ADC_Init(); //开AD中断.
// PWM_Init();
//======================================
TRISB=0;
PORTB=0x0000;
TRISB=0x0000;
temp3=0;
while(1)
{
clrwdt();
// temp3++;
// PORTB=~PORTB;
};
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -