需要有关pic18中的xc8下i2c1代码的流向的帮助

时间:2019-05-02 23:30:15

标签: pic18 xc8

我从事MikroC已有很长时间了,现在,我开始使用xc8-mplab X进行编码。

我正在从事一个将ds1307和pic18f46k22(i2c)连接在一起的项目。使用MikroC大约需要20分钟,但是了解MCC驱动程序会让我发疯。
我已经阅读了pic18f46k22数据表和xc8 v2.05指南。

我在Google上搜索了很多代码,但没有人为我工作(xc8版本,不支持的库,仅在pic16中工作,与mcc冲突...)

此代码对我有用(在Proteus和I2CDebugger下):


    flagStartI2c1 = i2c1_driver_open(); // Init i2c1
    i2c1_driver_start();   //S Start
    __delay_ms(20);   
    i2c1_driver_TXData (0xD0); //address DS1307
    __delay_ms(20);
    i2c1_driver_TXData (0x07); //Register SQW/Out
    __delay_ms(20);
    i2c1_driver_TXData (0x90); // Out Enable 1Hz
    __delay_ms(20);
    i2c1_driver_stop();

analyzer: **S D0 A 07 A 90 A P**
simulation: **works OK**

当我发送Restart / RXEnable条件时问题开始

inline void i2c1_driver_startRX(void)
{
    SSP1CON2bits.RCEN = 1;
}
inline void i2c1_driver_restart(void)
{
    SSP1CON2bits.RSEN = 1;
}

此结果为“检测到虚假”或“ ???????????”在I2CDebugger中:

//Option 1
    i2c1_driver_start();
    i2c1_driver_TXData (0xD0);
    i2c1_driver_TXData (0x00);
    i2c1_driver_restart();----> MALFUNCTION (Spurious detected)
    i2c1_driver_startRX();-----> MALFUNCTION (????? in analyzer)
    sec = i2c1_driver_getRXData();---> broke tx, doesnt arrive data
    min = i2c1_driver_getRXData();
    hora = i2c1_driver_getRXData();
    .....
analyzer: **S D0 A 00 A FF ?????????????**

//Option 2
    i2c1_driver_start();
    i2c1_driver_TXData (0xD0);
    i2c1_driver_TXData (0x00);
    sec = i2c1_driver_getRXData(); --->nothing in SSP1BUF
    min = i2c1_driver_getRXData(); --->nothing in SSP1BUF
    hora = i2c1_driver_getRXData(); --->nothing in SSP1BUF
    ....
analyzer: **S D0 A 00 A ...and nothing happens**



Mikroc中的工作流程为:

driverOpen->开始-> Tx(D0)-> Tx(00)->重新启动-> Tx(D1)-> Rx(秒)-> Rx(min)-> Rx(小时)-> .. ... NACK->停止。

我承认我对此很陌生,但是至少有人可以帮助我编写由mcc生成的驱动程序功能的工作流程吗?还是指向任何在xc8和pic18中均可使用的具有简单功能(初始化,启动,tx,rx和停止)的库的链接?

预先感谢

0 个答案:

没有答案