STC单片机无法控制CH376S,很急!

2019-03-24 18:42发布

STC单片机无法控制CH376S,很急!
问题:单片机无法完成针对CH376S芯片初始化,16个pin连接CH376S的时候,无法使CH376S晶振起振RSTI恢复到低电位,
但是一旦断开两者的连接,CH376S可以正常工作,晶振起振,复位正常
CH376厂家提供的源代码是针对SST单片机的,现在不知道要如何修改才能使STC12C5A16AD正常控制CH376
编译软件是keil,其他程序都测试过了单片机是正常的,仔细查过硬件完全没问题


分析下来是程序编写问题关键是不清楚如何控制P0口的状态诸如P0 =0xFF之类,以及P0M0,P0M1的控制,void     CH376_PORT_INIT( void)应该如何写?
目的:用单片机通过专用芯片读写SD卡
方案:STC12C5A16AD单片机+CH376S芯片

厂家源代码
  1. /* 单片机的引脚    CH376芯片的引脚*/
  2.       P3.3                 A0    //->
  3.       P3.5                 CS#   //-> 如果模拟出的并口上只有CH376,那么CS#可以直接接低电平,强制片选
  4.       P3.6                 WR#   //->
  5.       P3.7                 RD#   //->
  6.       P3.2                 INT#  //<-
  7.       P0(8位端口)         D7-D0       */
  8. sbit        CH376_A0        =        P3^3;
  9. sbit        CH376_CS        =        P3^5;
  10. sbit        CH376_WR        =        P3^6;
  11. sbit        CH376_RD        =        P3^7;
  12. //sbit        CH376_INT        =        P3^2;

  13. #define        CH376_DATA_DAT_OUT( d )        { P0 = d; }        /* 向并口输出数据 */
  14. #define        CH376_DATA_DAT_IN( )        ( P0 )                /* 从并口输入数据 */
  15. #define        CH376_DATA_DIR_OUT( )                        /* 设置并口方向为输出 */
  16. #define        CH376_DATA_DIR_IN( )        { P0 = 0xFF; }        /* 设置并口方向为输入 */

  17. #define CH376_INT_WIRE          INT0        /* 假定CH376的INT#引脚,如果未连接那么也可以通过查询状态端口实现 */

  18. void        CH376_PORT_INIT( void )  /* 由于使用通用I/O模拟并口读写时序,所以进行初始化 */
  19. {
  20.         CH376_CS = 1;
  21.         CH376_WR = 1;
  22.         CH376_RD = 1;
  23.         CH376_A0 = 0;
  24.         CH376_DATA_DIR_IN( );  /* 设置并口输入 */
  25. }

  26. void Delayms(unsigned int n)
  27. {
  28.     unsigned int i,j;
  29.         for (j=n; j>0;j--)
  30.            for (i=112;i>0; i--);
  31. }

  32. UINT8        main( void )  /* 初始化CH376 */
  33. {
  34.         UINT8        res;
  35.         Delayms(60);//必须延迟50ms以上
  36.         CH376_PORT_INIT( );  /* 接口硬件初始化 */
  37.         xWriteCH376Cmd( 0x06 );  /* 测试单片机与CH376之间的通讯接口 */
  38.         xWriteCH376Data( 0x55 );
  39.         res = xReadCH376Data( );
  40. //执行到此处即没有反应了,无法得到CH376的回应
  41.         if ( res != 0xAA ) return( ERR_USB_UNKNOWN );  /* 通讯接口不正常,可能原因有:接口连接异常,其它设备影响(片选不唯一),串口波特率,一直在复位,晶振不工作 */
  42.         xWriteCH376Cmd( CMD11_SET_USB_MODE );  /* 设备USB工作模式 */
  43.         xWriteCH376Data( 0x03 ); //操作SD卡的话设置模式代码为03H时切换到SD卡主机模式,用于管理和存取SD卡中的文件;
  44. }
复制代码 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。