[求助]程序調(diào)試出錯

我做塊串口的板子調(diào)試不成功,又做了快并口的板子。先做個測試程序,可是編譯的時候出現(xiàn)這個錯誤,不知道是什么意思,怎么改正。

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

我的頭文件是 "CH375HFB.H", "1602.h",另外還添加了“CH375HF。A”,這幾個文件添加正確了。可是這是為什么呢?大家?guī)蛶兔獯鹨幌隆?/p>

程序如下:

#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,根據(jù)單片機主頻調(diào)整 */ { UINT8 i; for ( i = 5; i != 0; i -- ); }

void CH375_PORT_INIT( ) /* 由于使用通用I/O模塊并口讀寫時序,所以進行初始化 */ { DDRA = 0x00; /* 設(shè)置8位并口為輸入 */ PORTB = 0x0B; /* 設(shè)置CS,WR,RD默認為高電平 */ DDRB = 0x1B; /* 設(shè)置CS,WR,RD,A0為輸出,設(shè)置INT#為輸入 */ }

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫命令 */ { mDelay1uS( ); mDelay1uS( ); /* 至少延時1uS */ /* *(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd; 通過并口直接讀寫CH375而非普通I/O模擬 */ PORTB |= 0x10; /* 輸出A0=1 */ PORTA = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ 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; /* 禁止數(shù)據(jù)輸出 */ PORTB &= 0xEF; /* 輸出A0=0; 可選操作 */ mDelay1uS( ); mDelay1uS( ); /* 至少延時2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫數(shù)據(jù) */ { /* *(volatile unsigned char *)CH375_DAT_PORT_ADDR = mData; 通過并口直接讀寫CH375而非普通I/O模擬 */ PORTA = mData; /* 向CH375的并口輸出數(shù)據(jù) */ DDRA = 0xFF; /* 并口D0-D7輸出 */ PORTB &= 0xEC; /* 輸出有效寫控制信號, 寫CH375芯片的數(shù)據(jù)端口, 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; /* 禁止數(shù)據(jù)輸出 */ mDelay1uS( ); /* 至少延時1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; /* mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR; 通過并口直接讀寫CH375而非普通I/O模擬 */ mDelay1uS( ); /* 至少延時1.2uS */ DDRA = 0x00; /* 數(shù)據(jù)輸入 */ PORTB &= 0xF4; /* 輸出有效讀控制信號, 讀CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=1; RD=0; */ DDRA = 0x00; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ mData = PINA; /* 從CH375的并口PA輸入數(shù)據(jù) */ PORTB |= 0x1B; /* 輸出無效的控制信號, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ return( mData ); }

/* 延時指定毫秒時間,根據(jù)單片機主頻調(diào)整,不精確 */ void mDelaymS( UINT8 ms ) { UINT16 i; while ( ms -- ) for ( i = 2600; i != 0; i -- ); }

void main() { unsigned char i; xWriteCH375Cmd( 0x06 ); /* 測試CH375是否正常工作 */ xWriteCH375Data( 0x55 ); /* 寫入測試數(shù)據(jù) */ i = ~ 0x55; /* 返回數(shù)據(jù)應該是測試數(shù)據(jù)取反 */ if ( xReadCH375Data( ) != i ) { /* CH375不正常 */ LCD_write_string(0,0,"wrong" ); for ( i=80; i!=0; i-- ) { xWriteCH375Cmd( 0x05 ); /* 多次重復發(fā)命令,執(zhí)行硬件復位 */ } } else LCD_write_string(0,0,"right" );

xReadCH375Cmd未定義,在包含CH375HFB.H先聲明一下:unsigned char xReadCH375Cmd( void ),再定義一個其函數(shù)體,這個函數(shù)主要是用來查詢CH375中斷,如果定義CH375_INT_WIRE,那么該函數(shù)可以不定義


你沒有定義中斷引腳,頭文件中則使用xReadCH375Cmd()來查詢CH375B的命令端口,如果位7為1說明中斷引腳輸出高電平,為0則說明有中斷,而在使用前你需要定義和聲明該函數(shù).


CH375HFB.H中定義了CH375_INT_WIRE函數(shù),我以前用串口的時候,也不用在CH375HFB.H中添加什么函數(shù)。這次奇怪了。我現(xiàn)在做測試程序也沒有用到CH375中斷啊。


現(xiàn)在解決了那個錯誤。想問一下,執(zhí)行這句xWriteCH375Cmd( 0x05 )后程序跳到哪里?

xWriteCH375Cmd( 0x06 ); /* 測試CH375是否正常工作 */ xWriteCH375Data( 0x55 ); /* 寫入測試數(shù)據(jù) */ i = ~ 0x55; /* 返回數(shù)據(jù)應該是測試數(shù)據(jù)取反 */ if ( xReadCH375Data( ) != i ) { /* CH375不正常 */ LCD_write_string(0,0,"wrong" ); for ( i=80; i!=0; i-- ) { xWriteCH375Cmd( 0x05 ); /* 多次重復發(fā)命令,執(zhí)行硬件復位 */ }


0X05的命令是復位我們的芯片,在復位芯片之后你需要延時50MS之后在重新做測試命令.


復位后程序是不是又從main()函數(shù)中的第一行開始執(zhí)行?


0X05命令是復位CH375芯片,不是復位單片機,程序不會從main開始執(zhí)行


我的CH375通電后,芯片發(fā)燙,但測試其工作電壓以及晶振都正常,怎么回事呢?


檢查你的硬件,ch375幾V供電?v3引腳怎么接的? 測試命令是否通過 ch375上電先延時50ms


5V供電,V3通過一個0.01uF的電容接地。測試沒通過,發(fā)現(xiàn)它發(fā)燙了就停止了!


你現(xiàn)在在主函數(shù)中什么也不做,只是上電,不對CH375做任何操作,如果不發(fā)燙的話,可能上時序有問題


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频