[求助]程序调试出错

我做块串口的板子调试不成功,又做了快并口的板子。先做个测试程序,可是编译的时候出现这个错误,不知道是什么意思,怎么改正。

!ERROR file 'bing.o': undefined symbol '_xReadCH375Cmd'

我的头文件是 "CH375HFB.H", "1602.h",另外还添加了“CH375HF。A”,这几个文件添加正确了。可是这是为什么呢?大家帮帮忙解答一下。

程序如下:

#include #include #include #include "CH375HFB.H" #include "1602.h"

/* 单片机的引脚 CH375芯片的引脚 PINB.4 A0 PORTB.3 RD PORTB.2 INT# PORTB.1 WR# PORTB.0 CS PORTA(8位端口) D7-D0 */

void mDelay1uS( ) /* 至少延时1uS,根据单片机主频调整 */ { UINT8 i; for ( i = 5; i != 0; i -- ); }

void CH375_PORT_INIT( ) /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */ { DDRA = 0x00; /* 设置8位并口为输入 */ PORTB = 0x0B; /* 设置CS,WR,RD默认为高电平 */ DDRB = 0x1B; /* 设置CS,WR,RD,A0为输出,设置INT#为输入 */ }

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { mDelay1uS( ); mDelay1uS( ); /* 至少延时1uS */ /* *(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd; 通过并口直接读写CH375而非普通I/O模拟 */ PORTB |= 0x10; /* 输出A0=1 */ PORTA = mCmd; /* 向CH375的并口输出数据 */ DDRA = 0xFF; /* 并口D0-D7输出 */ PORTB &= 0xFC; /* 输出有效写控制信号, 写CH375芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */ DDRA = 0xFF; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ PORTB |= 0x1B; /* 输出无效的控制信号, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */ DDRA = 0x00; /* 禁止数据输出 */ PORTB &= 0xEF; /* 输出A0=0; 可选操作 */ mDelay1uS( ); mDelay1uS( ); /* 至少延时2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { /* *(volatile unsigned char *)CH375_DAT_PORT_ADDR = mData; 通过并口直接读写CH375而非普通I/O模拟 */ PORTA = mData; /* 向CH375的并口输出数据 */ DDRA = 0xFF; /* 并口D0-D7输出 */ PORTB &= 0xEC; /* 输出有效写控制信号, 写CH375芯片的数据端口, A0=0; CS=0; WR=0; RD=1; */ DDRA = 0xFF; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ PORTB |= 0x0B; /* 输出无效的控制信号, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ DDRA = 0x00; /* 禁止数据输出 */ mDelay1uS( ); /* 至少延时1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { UINT8 mData; /* mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR; 通过并口直接读写CH375而非普通I/O模拟 */ mDelay1uS( ); /* 至少延时1.2uS */ DDRA = 0x00; /* 数据输入 */ PORTB &= 0xF4; /* 输出有效读控制信号, 读CH375芯片的数据端口, A0=0; CS=0; WR=1; RD=0; */ DDRA = 0x00; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ mData = PINA; /* 从CH375的并口PA输入数据 */ PORTB |= 0x1B; /* 输出无效的控制信号, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ return( mData ); }

/* 延时指定毫秒时间,根据单片机主频调整,不精确 */ void mDelaymS( UINT8 ms ) { UINT16 i; while ( ms -- ) for ( i = 2600; i != 0; i -- ); }

void main() { unsigned char i; xWriteCH375Cmd( 0x06 ); /* 测试CH375是否正常工作 */ xWriteCH375Data( 0x55 ); /* 写入测试数据 */ i = ~ 0x55; /* 返回数据应该是测试数据取反 */ if ( xReadCH375Data( ) != i ) { /* CH375不正常 */ LCD_write_string(0,0,"wrong" ); for ( i=80; i!=0; i-- ) { xWriteCH375Cmd( 0x05 ); /* 多次重复发命令,执行硬件复位 */ } } else LCD_write_string(0,0,"right" );

xReadCH375Cmd未定义,在包含CH375HFB.H先声明一下:unsigned char xReadCH375Cmd( void ),再定义一个其函数体,这个函数主要是用来查询CH375中断,如果定义CH375_INT_WIRE,那么该函数可以不定义


你没有定义中断引脚,头文件中则使用xReadCH375Cmd()来查询CH375B的命令端口,如果位7为1说明中断引脚输出高电平,为0则说明有中断,而在使用前你需要定义和声明该函数.


CH375HFB.H中定义了CH375_INT_WIRE函数,我以前用串口的时候,也不用在CH375HFB.H中添加什么函数。这次奇怪了。我现在做测试程序也没有用到CH375中断啊。


现在解决了那个错误。想问一下,执行这句xWriteCH375Cmd( 0x05 )后程序跳到哪里?

xWriteCH375Cmd( 0x06 ); /* 测试CH375是否正常工作 */ xWriteCH375Data( 0x55 ); /* 写入测试数据 */ i = ~ 0x55; /* 返回数据应该是测试数据取反 */ if ( xReadCH375Data( ) != i ) { /* CH375不正常 */ LCD_write_string(0,0,"wrong" ); for ( i=80; i!=0; i-- ) { xWriteCH375Cmd( 0x05 ); /* 多次重复发命令,执行硬件复位 */ }


0X05的命令是复位我们的芯片,在复位芯片之后你需要延时50MS之后在重新做测试命令.


复位后程序是不是又从main()函数中的第一行开始执行?


0X05命令是复位CH375芯片,不是复位单片机,程序不会从main开始执行


我的CH375通电后,芯片发烫,但测试其工作电压以及晶振都正常,怎么回事呢?


检查你的硬件,ch375几V供电?v3引脚怎么接的? 测试命令是否通过 ch375上电先延时50ms


5V供电,V3通过一个0.01uF的电容接地。测试没通过,发现它发烫了就停止了!


你现在在主函数中什么也不做,只是上电,不对CH375做任何操作,如果不发烫的话,可能上时序有问题


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