我做塊串口的板子調(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" );