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芯片
厂家源代码
- /* 单片机的引脚 CH376芯片的引脚*/
- P3.3 A0 //->
- P3.5 CS# //-> 如果模拟出的并口上只有CH376,那么CS#可以直接接低电平,强制片选
- P3.6 WR# //->
- P3.7 RD# //->
- P3.2 INT# //<-
- P0(8位端口) D7-D0 */
- sbit CH376_A0 = P3^3;
- sbit CH376_CS = P3^5;
- sbit CH376_WR = P3^6;
- sbit CH376_RD = P3^7;
- //sbit CH376_INT = P3^2;
- #define CH376_DATA_DAT_OUT( d ) { P0 = d; } /* 向并口输出数据 */
- #define CH376_DATA_DAT_IN( ) ( P0 ) /* 从并口输入数据 */
- #define CH376_DATA_DIR_OUT( ) /* 设置并口方向为输出 */
- #define CH376_DATA_DIR_IN( ) { P0 = 0xFF; } /* 设置并口方向为输入 */
- #define CH376_INT_WIRE INT0 /* 假定CH376的INT#引脚,如果未连接那么也可以通过查询状态端口实现 */
- void CH376_PORT_INIT( void ) /* 由于使用通用I/O模拟并口读写时序,所以进行初始化 */
- {
- CH376_CS = 1;
- CH376_WR = 1;
- CH376_RD = 1;
- CH376_A0 = 0;
- CH376_DATA_DIR_IN( ); /* 设置并口输入 */
- }
- void Delayms(unsigned int n)
- {
- unsigned int i,j;
- for (j=n; j>0;j--)
- for (i=112;i>0; i--);
- }
- UINT8 main( void ) /* 初始化CH376 */
- {
- UINT8 res;
- Delayms(60);//必须延迟50ms以上
- CH376_PORT_INIT( ); /* 接口硬件初始化 */
- xWriteCH376Cmd( 0x06 ); /* 测试单片机与CH376之间的通讯接口 */
- xWriteCH376Data( 0x55 );
- res = xReadCH376Data( );
- //执行到此处即没有反应了,无法得到CH376的回应
- if ( res != 0xAA ) return( ERR_USB_UNKNOWN ); /* 通讯接口不正常,可能原因有:接口连接异常,其它设备影响(片选不唯一),串口波特率,一直在复位,晶振不工作 */
- xWriteCH376Cmd( CMD11_SET_USB_MODE ); /* 设备USB工作模式 */
- xWriteCH376Data( 0x03 ); //操作SD卡的话设置模式代码为03H时切换到SD卡主机模式,用于管理和存取SD卡中的文件;
- }
复制代码
此帖出自
小平头技术问答
一周热门 更多>