完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,我想在PIC18F24K40上学习CCP。我使用time1配置了CCP2。Time1工作良好。但ccp不工作。以下是我的代码include<&stdio.h>包括&包括&stdio.h>包括&stdlib.h>包括< xc.h>\包括&xc.h>>包括“HW_Config.h”//pragma设置64MHzSET_INTERRUPUPT_INTERRUPT_TI646400IFUPT_TI6400无效Timer6400idTimer1InTTimer1Iner1IntTimer1Init(int用户中断时间);无效CCP2IOInit(无效);无效;intTimer1软Count=0Timer1软Count==0Timer1软Count芬娜lInter.Time=0;int main(){SYSConfig();CCP2IOInit();CCP2Init();Timer1Init(SET_INTERRUPT_TIME);TRISBbits.TRISB4=0;//设置pin作为输出,而(1){}返回0;}void Timer1Init(intUserInter.Time){UserInter.Time=0xFFFF-UserInter.Time;/(0xFF-time)必须设置为定时器寄存器FinalInter.Time=UserInter.Time;TMR1H=UserInter.Time>>8;//向右移动8位TMR1L=(UserInter.Time&0x00FF);//100us延迟中断值T1CONbits.RD16=1;//16位TIMER T1CONbits.CKPS=2;//预缩放至8MHz TMR1CLKbits.CS=1;//16MHz TMR1GSS=0x0F;PIE4bits.TMR1IE=1;//定时器溢溢出中断中断中断INTCON比特.PEIE=1;//定时器溢溢出中断中断中断中断中断INTCON比特.PEIE=1;//定时器溢出溢出中断中断INTCONTCONTCONTCONON比特。GIE=1=1;GIE=1;//GLOBAL中断中断中断中断可启用PIR4比特,可启用PIR4比特。TMR1IF=0;//GLOLOBALOBAL中断可启用PIR4比特。TMR1IF=0;TMR1IF/溢出标志/0=0=0 IPR4比特=0 IPR4比特=0 IPR4{CCP2CON =0; //清零CCP2 CCP2 CCP2 CCP2CON比特.MODE=5;//上升边缘捕获MODECCPTMRS=0x04;//TIMER1/TIMER1用于CCP2 CCP2 CCP2 CCP2 CCP2 CCP2 CCP2CACAPbPbCAPbits.CTS=0;//由CCP2模式PMD3位PMD3位CCP2MD=0;//由CCP2模式PMD3位PMD3位选择PIN.CCP2MD=0;//CCP2PERP2PER面可启用PIE6位.CCP2IE=1;//CCP2对等CCP2周边可启用PIE6位.CCP2IE=1;//CCP2对等CCP2间可中断可启用PI6位.CCP2IE=1;//=0;//标志已清除IPR6bits.CCP2IP=0;//低优先级INTCON比特.GIE=1;//设置全局和周边中断全局和周边中断INTCON比特.GIE=1;//设置全局和周边中断全局和周边中断中断INTC全局和周边中断中断INTCON比特。PEIE=1;//设置全局和周边中断和周边中断CPCPCP2CP2CON通信CP2CON比特.EN.EN=1;//周边中断CCP2互连CP2CP2CP2CP2CONCP2CONCP2CON比特.EN.EN=1;//CCP2P2已启用},无效CCP2IOInInInInInInInInInInInInInInInInInInInI(void){TRISC比特.TRISC比特.TRI1PPS=0x11;ANSEANSELC1=1;}无效中断低优先级ISR(){如果(PIR6位.CCP2IF==1.CCP2IF==1.PIR6位.CCP2IF==1)//ccp2标志{LATB比特.LATBB比特.LATBB4^^=1;//仅用于调试目的的,PIR6位PIR6位.CCP2IF=0;//仅用于调试目的,CCP2IF.CCP2IF=0;如果(PIR4位TMR1IF=0.TMR4比特.TMR1IF=TMR11=TMR1IF){PIR4比特.TMR14位.TMR14IF=TMR14IF=TMR4位.TMR1IF 8位TMR1L=(FinalInterru)ptTime&0x00FF);//DELAY中断值Timer1SoftCount+;if(Timer1SoftCount==100){Timer1SoftCount=0;}}}
以上来自于百度翻译 以下为原文 Hi all, I am trying to learn CCP on PIC18F24K40. I have configured CCp2 using Timer1. Timer1 works fine. but ccp is not working. Below is my code #include #include #include #include "HW_Config.h"// pragma setting for 64 MHz #define SET_INTERRUPT_TIME 6400 void Timer1Init(int UserInterruptTime); void CCP2Init(void); void CCP2IOInit(void); int Timer1SoftCount= 0, FinalInterruptTime = 0; int main() { SYSConfig(); CCP2IOInit(); CCP2Init(); Timer1Init(SET_INTERRUPT_TIME); TRISBbits.TRISB4 = 0; // set pin as output while(1) { } return 0; } void Timer1Init(int UserInterruptTime) { UserInterruptTime = 0xFFFF - UserInterruptTime; // (0xFFFF - time) must be set to timer registers FinalInterruptTime = UserInterruptTime; TMR1H = UserInterruptTime >> 8; // shift right for 8 bits TMR1L = (UserInterruptTime & 0x00FF); // 100us DELAY interrupt value T1CONbits.RD16 = 1; // 16 BIT TIMER T1CONbits.CKPS = 2; // prescalar to 8MHz TMR1CLKbits.CS = 1; // 16MHz TMR1GATEbits.GSS = 0x0F; PIE4bits.TMR1IE = 1; // Timer overflow interrupt INTCONbits.PEIE = 1; // Timer overflow interrupt INTCONbits.GIE = 1; // GLOBAL INTERRUPT ENABLE PIR4bits.TMR1IF = 0; // Overflow flag = 0 IPR4bits.TMR1IP = 0; T1CONbits.ON = 1; // TURN ON TIMER1 } void CCP2Init(void) { CCP2CON = 0; // CLEAR CCP2 CCP2CONbits.MODE = 5; // RISING EDGE CAPTURED MODE CCPTMRS = 0x04; // TIMER1 USED FOR CCP2 CCP2CAPbits.CTS = 0; // PIN SELECTED BY CCP2 MODE PMD3bits.CCP2MD =0; // CCP2 PERIPHERAL ENABLE PIE6bits.CCP2IE = 1; // CCP2 INTERRUPT ENABLED PIR6bits.CCP2IF = 0; // FLAG IS CLEARED IPR6bits.CCP2IP = 0; // LOW PRIORITY INTCONbits.GIE = 1; // SET GLOBAL AND PERIPHERAL INTERRUPT INTCONbits.PEIE = 1; // PERIPHERAL INTERRUPT CCP2CONbits.EN = 1; // CCP2 ENABLED } void CCP2IOInit(void) { TRISCbits.TRISC1 = 1; // make as input CCP2PPS = 0x11; // RC1 INPUT PIN FOR CAPTURED RC1PPS = 0x11; ANSELCbits.ANSELC1 = 1; } void interrupt low_priority ISR() { if(PIR6bits.CCP2IF == 1) // ccp2 flag { LATBbits.LATB4 ^= 1; // only for debugging purpose PIR6bits.CCP2IF = 0; } if(PIR4bits.TMR1IF) { PIR4bits.TMR1IF = 0; TMR1H = FinalInterruptTime >> 8; // shift right for 8 bits TMR1L = (FinalInterruptTime & 0x00FF); // DELAY interrupt value Timer1SoftCount++; if(Timer1SoftCount == 100) { Timer1SoftCount = 0; } } } |
|
相关推荐
5个回答
|
|
这个指令:将RC1放入模拟模式。它总是读为零。您需要清除数字模式的位。
以上来自于百度翻译 以下为原文 This instruction: ANSELCbits.ANSELC1 = 1; Is putting RC1 into analog mode. It will always read as zero. You need to clear the bit for digital mode. |
|
|
|
如果在输入捕捉时间源中使用TMR1,那么为什么要在TMR1中写入中断?为什么使用中断优先级?把一切都放在低优先级中断中是没有意义的;它只是增加了中断的延迟并添加了一堆不必要的设置代码。
以上来自于百度翻译 以下为原文 Why are you writing to TMR1 in an interrupt if you're using it for the input capture time source? Why are you using interrupt priorities? Putting everything in a low-priority interrupt makes no sense; all it does is increase the latency of your interrupts and adds a bunch of unnecessary setup code. |
|
|
|
我使用CCP捕捉模式只检测边缘。Time1用于产生中断延迟。我不使用CCP存储寄存器。当捕获边缘时,CCP应该产生中断。Time1只用于计数多个中断延迟时间的延迟,也删除了ANSELC。但不工作…我的GPIO配置是否正确??
以上来自于百度翻译 以下为原文 i am using ccp capture mode only to detect edge. Timer1 is used to genrate interrupt delay. i dont use ccp storing register. When edge is captured, ccp should generate interrupt. Timer1 is only used to count delays in multiple of interrupt delay time. I also removed ANSELC. but not working.... Is my GPIO configuration for CCP correct ?? |
|
|
|
删除它是不正确的。默认设置是模拟的,所以您应该写一个零到该位。
以上来自于百度翻译 以下为原文 Removing it is not correct. The default setting is analog, so you should write a zero to that bit. |
|
|
|
对于周期性的中断,TMR2/4/6是更好的选择,因为它们具有不需要在ISR中重新加载的周期寄存器。而且您对CKPS的评论是错误的,并且您的重新加载值没有给您100我们。
以上来自于百度翻译 以下为原文 TMR2/4/6 are better choices for a periodic interrupt since they have period registers which don't require reloading in the ISR. And your comments on CKPS are wrong, and your reload value doesn't give you 100 us. |
|
|
|
只有小组成员才能发言,加入小组>>
4834 浏览 9 评论
1842 浏览 8 评论
1756 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
2966 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2068 浏览 5 评论
467浏览 1评论
1117浏览 1评论
288浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
371浏览 0评论
267浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-3 09:09 , Processed in 1.013898 second(s), Total 77, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号