谁帮我看看这个程序为什么不能连接到上位机

以下是我上网找的一个程序说已经通过测试,但是我怎么尝试都不行呢,用DEBUG372.exe调试过了,硬件连接好像没有问题,就是没有发现ch372的设备,哪位好心人帮我看看程序啊,急啊!!!多谢,多谢了。 以下是我的程序:

/****************************** CH375测试程序 Mega16 模拟总线

控制端口定义: A0 -- PC0 RD -- PC1 WR -- PC6 CS -- PC7 数据端口定义: PORTA ******************************/ #include #include

#define A0 PC0 //定义引脚 #define RD PC1 #define WR PC6 #define CS PC7 #define NOP asm("nop") //定义一个空操作语句

#define CHECK_375 0x06 //测试375命令(CH375手册中有详细的命令列表)

/******************************************* 函数原型声明区 ********************************************/

unsigned char RD_data_ch375(void); void WR_CMD_ch375(unsigned char cmd); void CONT_PORT_init(void); void WR_DAT_ch375(unsigned char dat); unsigned char RD_data_ch375(void);

/******************************************* 向CH375写数据函数 ********************************************/ void WR_DAT_ch375(unsigned char dat) { PORTC &= ~(1 << A0); //A0 = Low 选择输出是数据 PORTC &= ~(1 << WR); //WR = Low 选择写 DDRA = 0xFF; NOP; NOP; PORTA = dat; //端口写数据(0x55) } /******************************************* 写命令函数 ********************************************/ void WR_CMD_ch375(unsigned char cmd) { PORTC &= ~(1 << WR); //WR = Low 选择写 PORTC |= (1 << A0) | (1 << RD); //A0 = High 写命令 DDRA = 0xFF; NOP; NOP; PORTA =cmd; //发送数据 } /******************************************* 读CH375数据函数 ********************************************/ unsigned char RD_data_ch375(void) { unsigned char data; PORTC |= (1 << WR); PORTC &= ~(1 << RD); //RD = Low 选择读 PORTC &= ~(1 << A0); DDRA = 0x00; PORTA = 0xFF; //初始化端口上拉(实际使用 NOP; NOP; data = PINA; //读端口数据并返回 return data; } /******************************************* 控制线初始化函数 ********************************************/ void CONT_PORT_init(void) { PORTC |= (1 << A0) | (1 << RD) | (1 << WR) | (1 << CS); PORTC &= ~(1 << CS); DDRC = 0xFF; //控制端口初始化为输出 } /******************************************* 主函数 ********************************************/ int main() { unsigned char testret; DDRB = 0xFF; PORTB = 0x00; CONT_PORT_init(); WR_CMD_ch375(CHECK_375); //向CH375写命令(测试0x06) WR_DAT_ch375(0x55); testret = RD_data_ch375(); while(1); return 0; }

你的时序错了,我们的375芯片WR,RD是在上升沿有效的而非低电平有效,另外,在操作的时候建议先操作A0,在操作其他信号线!例如: unsigned char RD_data_ch375(void) { unsigned char data; PORTC &= ~(1 << A0); PORTC |= (1 << WR); PORTC &= ~(1 << RD); //RD = Low 选择读 data = PINA; //初始化端口上拉(实际使用 NOP; NOP; PORTC |= (1 << RD); //读端口数据并返回 DDRA = 0x00; PORTA = 0xFF; return data; }


谢谢你的回答,但是刚才我按照你所说的那样改了程序测试了还是没有能成功,我用CHECK_EXIST命令测试返回的数据,无论我刚开始发什么数据给ch372,我收到的数据都是0x43,实在是不知道是什么原因了,请在帮我分析分析,我继续尝试。


版主能帮我看看吗,头都想炸了还是不知道什么问题啊。


如果你的读写子函数所有的时序都改掉了,那MAIN函数里,上电后要加50MS的延时,我们的375上电复位大概50MS.上电后你测试一下25,26脚,正常情况下25脚为低,26脚为高,否则就是复位!


只有登录才能回复,可以选择微信账号登录