完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
使用PIC18F23 K22作为I2C从机并使用XC8编译器时的奇怪行为。中断也在SSP1STATbits上发生,D_nA==1,相同的pic处理器,相同的代码,但是用汇编语言编写,一切正常,有人做过类似的观察吗?谢谢
|
|
相关推荐
4个回答
|
|
|
对不起,不明白您在问什么。您能详细解释一下,也许在C和Amblr中都显示一下您的设置代码吗?
|
|
|
|
|
|
嗨,Mysil,谢谢你的回答。从我这边可以得到一些澄清:i2c主机具有相同的pic(18F23k22),并且如前所述,可以毫无问题地与不同的从机一起工作,其中一些从机使用pic18f2321,但是全部用汇编代码编程。我从一段时间以来一直在学习C语言,所以我根本不是教授。当我拆开初始化并将它与汇编代码进行比较时,所有的东西似乎都是匹配的。您在我的代码中看到,在红线上插入了“dayNA”检查,如果数据而不是ADADEST,则从中断例程退出。用汇编代码,我从来没有中断过“数据”,怎么了?谢谢你的帮助,包括“main.h”#definitionadressMask0b00110000/***************************************************声明***********************************/const char Vers1=2|0x80;const char Suffix1=“a”|0x80;const char Suffix2 const char Suffix2 Cx80;Pot123,Hobbs,HobbsRefresh,Module;无符号char InterimAdr,i2c_address,OldEnc,OldRead,Enc4;unsigned char Vers,SndIt,NewVal;unsigned.result;unsigned char Count,OldLowByte;unsigned char CodeByte,ToGa,OldToToGa;unsigned char Data_from_MB[20];unsigned char Vers_for_MB[5];unsigned char Poti_for_MB[20];无符号字符SndSec_for_MB[5];无符号字符SndEnc_for_MB[20];常量字符掩码=0x03;无效中断中断中断管理器(void);void Execute_.(void);void Execute_.(void);void ElevTrimEnc(void);void ElevatorTrimIndication);void Firmware(void);void Sec5Send(void);void I2C1_ISR(void);void RudderTrim;void);数据(void);void RudderTrim(void);void SendEncoder(void);void Send Encoder(void);/*******************************************MAIN***************************************/void main(void main main){/***************************************************************************************************初始化时钟32MHz**********************************************************************************************0 x40;//PLL启用,OSCCON2=0b0000000000000000;//启用OSCCON2=0b000000000OSCCON2=0b00000000000启用,,//启用Os振荡器驱动电路/********************************************************************************************************************___TRISA__=00;//ANSELASELASELASELALALALALALALALA LALALALA********************************************************************C=00;****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************R0H=00;//T0=>8或16比特定时器TMR0L=00;T0CON=0b01000001;//T0 OFF,16比特,1/T0 OFF,16比特,1/T0 OFF,16比特,1/T0,1/4 INTCON比特1/4 INTCON比特。TMR0IF=0;T0CON.TMR0ON TMR0ON TMR1H=1;//T0ONTMR1R1R1R1H=00;//T0ONTMR10TMR1H=00;//T0ONTMR10 TMR1H=00;//T1,3,3,3,5=>=16比特定时器TMR1;16比特定时器TMR11/T1 T1CONbits.TMR1ON=1;TMR2=00;8位定时器T2CON=0b0111101010;//后刻度1:16,T2=OFF,预刻度16PIR1位,预刻度1:16,T2=关闭,预刻度16PIR1位。TMR2IF=0;////32us)-(32us)-(8毫秒)-(8毫秒)-(8毫秒T2 T2 T2 T2 T2 T2CON比特.TMR2ON TMR2ON=1;//T2ONTMRONTMR2ONTMR2ONTMR2ONTMR2ON=1;//T2ONTMRONTMRTMR3H=TMR3H=1;//T2ONTMRONTMRTMRTMRTMR3H=TMR3H=0000TMR3H=00;TMR3L=00;TMR3L P();/**************************************************/SSP1ADD=0x30;//从地址SSP1MSK=adressMask;//SSP1STAT=0x00;//SMP高速;CKE禁用;SSP1CON1=0x26;//SSPEN启用;WCOL无冲突;CKP禁用;SSPM 7位轮询;SSPOV无溢出;SSP1CON2=0x01;//ACKEN禁用led;GCEN禁用;PEN禁用;ACKDT确认;RSEN禁用;RCEN禁用;SEN禁用;SSP1CON3=0x00;//SBCDE禁用;BOEN禁用;SCIE禁用;PCIE禁用;DHEN禁用;SDAHEN禁用;PIR1bits.SSP1IF=0;PIE1bits.SSP1IE=1;//enable中断/*************************************初始化中断*************************/INTCONbits.GIE=1;//启用全局和外围中断INTCONbits.PEIE=1;/**********************************************************************************************************执行主程序()/**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************)I2C1YISR();PrI1BITS SSP1IF=0;SSP1CON1BIT.CKP=1;//释放CLK}
|
|
|
|
|
|
嗨,不处理传输数据的I2C传输操作是没有意义的。如果从代码在中断处理程序内等待数据传输,轮询SSP寄存器和传输每个数据字节,接收或发送,直到e完成整个传输。虽然可能,但这是处理中断的低效方法。这里是MSSP I2C中断处理程序的主体,它同时处理地址和数据字节。代码是从MCC创建的代码中修改的。它将调用一个回调例程,该例程应该实现应用程序。论议论,Mysil
|
|
|
|
|
|
Hi MysilMy对i2c总线的理解是,当接收到第一个字节并且中断处理程序变为活动时,从机应该只对地址作出响应。但在我的例子中,中断函数中看到的第一个字节有时是一个数据字节。这就是A不理解的。正如我前面提到的一样,汇编程序也是一样的,这是从来没有发生过的。我想知道这是一个XC8(VES 1.40)的bug吗?关于贝雷克
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 05:45 , Processed in 0.741268 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2636