我用CMD_CHECK_EXIST做测试375是否正常工作,输入数据是0X5A,那么若375正常工作的话,读出来的数应该是0xA5,但是怎么我读出来的数是0X5F呢? 这样的数是不是首先说明375是工作了(复位成功,晶振振动),只是硬件的IO口连接错误,如果是这样的化,应该是怎么连接? 很急的问题啊,请高手指点指点!!!谢谢拉!
你再发送数据AA看测试出的数据是什么.从发送55测试来看,好象根本没有执行成功. 一般来说测试命令错误是由于硬件连接错误,或者读写子函数有问题.你去检查一下硬件连线.
发送AA 返回的还是5F啊 请问是怎么回事啊?急啊
返回0x5F 说明你的命令操作失败. 你把你的硬件原理图贴出来看看.
我的硬件是at89s51+ch375,51的p0口接375的D0-D7,51的WR,RD接375的WR,RD,375的cs直接接地,A0接51的p2.0 就这么简单的 我的测试程序是: #include #include "CH375INC.H" #include
#define CH375_DATA_PORT P0 #define CMD_RET_SUCCESS 0x51 /* 命令操作成功 */ sbit CH375_CMD_DAT=P2^0; sbit CH375_RD=P3^7; sbit CH375_WR=P3^6 ; sbit CH375_INT_WIRE=P3^2;
void delay50ms(); void delay1s(); void CH375_WR_CMD_PORT(unsigned char cmd) ; void CH375_WR_DAT_PORT(unsigned char dat) ; unsigned char CH375_RD_DAT_PORT(void) ; unsigned char wait_interrupt(void);
void delay50ms() { unsigned char i,j; for(i=100;i!=0;i--) for(j=250;j!=0;j--); {_nop_(); _nop_(); } } void CH375_WR_CMD_PORT(unsigned char cmd) { _nop_(); _nop_(); CH375_DATA_PORT=cmd;
_nop_(); _nop_();
}
void CH375_WR_DAT_PORT(unsigned char dat) { _nop_(); _nop_();
CH375_DATA_PORT=dat; _nop_(); _nop_(); }
unsigned char CH375_RD_DAT_PORT(void) { unsigned char recv_data=0x00;
_nop_(); _nop_(); recv_data=CH375_DATA_PORT; return (recv_data); }
void main(void) { unsigned char i,k; unsigned char ch=0x00;
SCON=0x50; //工作方式1 允许串行接收 PCON=0x80; //SMOD=1 TMOD=0x20; //定时计数器1 工作方式2 8-bit 自动加载 TL1=0xF3; TH1=0xF3; //波特率为9600 fosc=11.0592 若fosc=24MHZ 则TH1=oxF2 TR1=1; IP=0x10; EA=1; //开启定时计数器1 ES=1; //串行接收中断
for(k=500;k!=0;k--) { CH375_WR_CMD_PORT(CMD_CHECK_EXIST); i=0X55; CH375_WR_DAT_PORT(i); i=~i; ch=CH375_RD_DAT_PORT(); SBUF=ch; while(!TI) ; TI=0; if(ch!=i) { for(i=80;i!=0;i--) { CH375_WR_CMD_PORT(CMD_RESET_ALL); CH375_RD_DAT_PORT(); } CH375_WR_CMD_PORT(0); delay50ms(); }
}
} 哪里出问题了啊?
我的用CH375坐的USB主机也不工作,发送0xA6的时间没有中断发生,该是什么问题的,高手给以指点呀
TO:wangyy6552 您到底是总线方式还是想模拟I/O口操作CH375呢,看接口程序,像总线方式,但却找不到375的命令口地址和数据口地址。 CH375没有收到单片机发送的命令码,因为CH375_CMD_DAT,CH375_WR根本没有用到,CH375是通过A0区分数据和命令的。 (1)建议您下载:CH375EVT.ZIP,参考\CH375EVT\PUB\MCS51C\MISCELL示例中CH375总线接口程序的写法 (2)模拟I/O,参考下述程序 /* 单片机的引脚 CH375芯片的引脚 P3.2 INT# P1.0 A0 P1.1 CS# 如果模拟出的并口上只有CH375,那么CS#可以直接接低电平,强制片选 P1.2 WR# P1.3 RD# P0(8位端口) D7-D0 */ sbit CH375_A0 = P1^0; sbit CH375_CS = P1^1; sbit CH375_WR = P1^2; sbit CH375_RD = P1^3;
void mDelay1_2uS( ) /* 至少延时1.2uS,根据单片机主频调整 */ { return; }
void CH375_PORT_INIT( ) /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */ { CH375_CS = 1; CH375_WR = 1; CH375_RD = 1; CH375_A0 = 0; P0 = 0xFF; /* 并口输入 */ }
void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时1uS */ P0 = mCmd; /* 向CH375的并口输出数据 */ CH375_A0 = 1; CH375_CS = 0; CH375_WR = 0; /* 输出有效写控制信号, 写CH375芯片的命令端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ CH375_WR = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; CH375_A0 = 0; P0 = 0xFF; /* 禁止数据输出 */ mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时2uS */ }
void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { P0 = mData; /* 向CH375的并口输出数据 */ CH375_A0 = 0; CH375_CS = 0; CH375_WR = 0; /* 输出有效写控制信号, 写CH375芯片的数据端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ CH375_WR = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; P0 = 0xFF; /* 禁止数据输出 */ mDelay1_2uS( ); /* 至少延时1.2uS */ }
UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { UINT8 mData; mDelay1_2uS( ); /* 至少延时1.2uS */ P0 = 0xFF; /* 输入 */ CH375_A0 = 0; CH375_CS = 0; CH375_RD = 0; /* 输出有效写控制信号, 读CH375芯片的数据端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ mData = P0; /* 从CH375的并口输入数据 */ CH375_RD = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; return( mData ); }
哦 我在上面的程序中忘了说打了 我用得是总线方式 命令端口地址是 0XBDF1 数据端口的地址的0XBCF0 如果这样的话 我上面的程序还对么?
谢谢啊 我看来您给我推荐的程序 然后改写了一下我的程序 现在能输入55给返回aa了 很感谢您
TO:SCM { M } 您好,我按您说的 CH375EVT.ZIP,参考\CH375EVT\PUB\MCS51C\MISCELL示例中CH375总线接口程序的写法 可程序里没说怎么配置管脚呀,怎么连线的?怎么办?
51单片机的总线是不需要配置的。硬件连线为CS接P2.6,A0接P2.0,WR接WR,RD接RD
TO:hcn 谢谢你! 再问一个小白的问题,如果我通过单片机向U盘里写数据,会以什么形式保存呢?在U盘里能看到写入的数据吗?
我司的文件系统不关心数据格式,一般创建成".TXT"文件。这个数据格式是安装ASCII码的形式存储。至于其他数据格式需要去查看每一个文件对应的数据格式。