这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » STC12C2052,SPI STC12C2052的SPI接口问题请教

共4条 1/1 1 跳转至

STC12C2052,SPI STC12C2052的SPI接口问题请教

院士
2006-09-17 18:14:16     打赏
STC12C2052,SPI STC12C2052的SPI接口问题请教



关键词: STC12C2052     接口     问题     请教    

院士
2006-12-22 22:43:00     打赏
2楼
问 大家好:
    我用2052的SPI接口,访问HC595是好的,说明SPI接口没坏,至少可以工作.595输出对的.
   现在我用同样的设置来访问一个SPI接口芯片,MCP2515,我编写的读写函数都是对的(改造的,原来在AVR单片机那里用的,都是好好的).现在就是写个数到2515,然后读出来,竟然都不对的,不知道为什么啊?
sbit SCLK    = P1^7;
sbit MISO    = P1^6;
sbit MOSI    = P1^5;
sbit SS      = P1^4;


/*SPI初始化*/
void init_SPI (void)
{ P1M0=0x40;                    //0b01000000;
  P1M1=0xb0;                    //0b10110000;
  //P1.6为输入,P1.7,P1.5,P1.4为推挽输出
      SPCTL=0xD0;
//SSIG=1;忽略SS脚
//SPEN=1;允许SPI工作
//DORD=0;先传高位MSB
//MSTR=1;设为主机
//CPOL=0,CPHA=0;
//SPR1,SPR0=00;主模式时SPI时钟源选择为fosc/4    
}

/*MCP2515写操作*/
void write_MCP (unsigned char adress, unsigned char value)
{
    SS=0;                                //    CS  Low -> MCP enable
    SPDAT=0x02;                            //    sende Write Kommando
    while(!(SPSTAT & (1<<SPIF)));            //    warten bis das Byte gesendet wurde
    SPDAT=adress;                        //    Addresse senden
    while(!(SPSTAT & (1<<SPIF)));            //    warten bis das Byte gesendet wurde
    SPDAT=value;                            //    Wert senden
    while(!(SPSTAT & (1<<SPIF)));            //    warten bis das Byte gesendet wurde
    SS=1;                                //    CS  High -> MCP disable
}
/*MCP2515读操作*/
unsigned char read_MCP(unsigned char adress)
{
    unsigned char spidata;

    SS=0;                               //    CS  Low -> MCP enable
    SPDAT=0x03;                            //    sende Read Kommando
    while(!(SPSTAT & (1<<SPIF)));            //    warten bis das Byte gesendet wurde
    SPDAT=adress;                        //    Adresse von der gelesen werden soll
    while(!(SPSTAT & (1<<SPIF)));            //    warten bis das Byte gesendet wurde
    SPDAT=0xAA;                            //    Dummy-Byte senden
    while(!(SPSTAT & (1<<SPIF)));            //    warten bis das Byte gesendet wurde
    spidata = SPDAT;                        //    Daten aus SPI abholen
    SS=1;                                //    CS  High -> MCP disable
    return (spidata); 1: 1 现在写了测试程序,就写数到一个寄存器,然后读出来,但就是不对啊?        
           P3L=0;                    //指示灯亮
       write_MCP (CNF1, 0x03);  
       
       while(read_MCP(CNF1)!=0x03)
       {write_MCP (CNF1, 0x03);}  
       
          P3L=1;
请大家帮忙啊,谢谢了. 2: 2052 的SPI功能是不是不好用的啊 3: 姚工帮忙啊 4: 我用2052的SPI接口,访问HC595是好的我用2052的SPI接口,访问HC595是好的,说明SPI接口没坏,至少可以工作.595输出对的 5: RE stcmcu:
     你好.我用595做是好的,595只要输出就好了,不用读数据回来,现在的SPI从器件需要读数据回来的.
     昨天我用SPI的几个I/O口模拟SPI时序已经实现访问MCP2515了.模拟的时序和这里的读写函数一样.但真正的SPI功能还是不行啊,不知道为什么??????
     我就是简单的要写一个数到MCP2515的寄存器中,然后读出来,看对不对,但好象就是读不对的样子.这2个读写函数肯定没错了,在AVR+MCP2515那边用过的.
所以只能怀疑STC的SPI功能了啊,主要我有个朋友也是这个问题啊,试不出来STC的SPI功能.
     6: 已经找到原因并解决了原来STC的SPI有点特殊啊,没仔细看资料

菜鸟
2010-12-31 16:06:43     打赏
3楼
请问你指的特殊是什么?我也遇到相似的问题,头痛好几天了

菜鸟
2011-09-07 15:36:00     打赏
4楼

老兄,你是怎么解决的?
我在操作射频卡读写芯片FM1702时也遇到你类似的问题,我用的是STC12C5616,不管怎么设置就是不能跟FM1702通讯,可是我改用软件模拟的方式是可以的,可不可把你的经验分享一下,谢谢!


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]