初始化0x81錯(cuò)誤的測(cè)試

貼上讀寫(xiě)函數(shù) /* 單片機(jī)的引腳 CH374芯片的引腳 PINE.4 INT# PORTE.2 A0 PORTE.3 CS# PORTE.5 WR# PORTE.6 RD# PORTF(8位端口) D7-D0 */

void CH374_PORT_INIT( ) /* 由于使用通用I/O模擬并口讀寫(xiě)時(shí)序,所以進(jìn)行初始化 */ { DDRF = 0x00; /* 設(shè)置8位并口為輸入 */ PORTE = 0x68; /* 設(shè)置CS,WR,RD默認(rèn)為高電平 */ DDRE = 0xEF; /* 設(shè)置CS,WR,RD,A0為輸出,設(shè)置INT#為輸入 */ } void Write374Index( UINT8 mCmd ) /* 向索引端口寫(xiě)入索引地址 */ { PORTE |= 0x04; /* 輸出A0=1 */ PORTF = mCmd; /* 向CH374的并口輸出數(shù)據(jù) */ DDRF = 0xFF; /* 并口D0-D7輸出 */ PORTE &= 0xD4; /* 輸出有效寫(xiě)控制信號(hào), 寫(xiě)CH374芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */ DDRF = 0xFF; /* 該操作無(wú)意義,僅作延時(shí),CH374要求讀寫(xiě)脈沖寬度大于100nS */ PORTE |= 0xFF; /* 輸出無(wú)效的控制信號(hào), 完成操作CH374芯片, A0=1; CS=1; WR=1; RD=1; */ DDRF = 0x00; /* 禁止數(shù)據(jù)輸出 */ PORTE &= 0xF3; /* 輸出A0=0; 可選操作 */ } void Write374Data( UINT8 mData ) /* 向數(shù)據(jù)端口寫(xiě)入數(shù)據(jù),索引地址自動(dòng)加1 */ { PORTF = mData; /* 向CH374的并口輸出數(shù)據(jù) */ DDRF = 0xFF; /* 并口D0-D7輸出 */ PORTE &= 0x40; /* 輸出有效寫(xiě)控制信號(hào), 寫(xiě)CH374芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=0; RD=1; */ DDRF = 0xFF; /* 該操作無(wú)意義,僅作延時(shí),CH374要求讀寫(xiě)脈沖寬度大于100nS */ PORTE |= 0xFF; /* 輸出無(wú)效的控制信號(hào), 完成操作CH374芯片, A0=0; CS=1; WR=1; RD=1; */ DDRF = 0x00; /* 禁止數(shù)據(jù)輸出 */ } UINT8 Read374Data( void ) /* 從數(shù)據(jù)端口讀出數(shù)據(jù),索引地址自動(dòng)加1 */ { UINT8 mData;

DDRF = 0x00; /* 數(shù)據(jù)輸入 */ PORTE &= 0x20; /* 輸出有效讀控制信號(hào), 讀CH374芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=1; RD=0; */ DDRF = 0x00; /* 該操作無(wú)意義,僅作延時(shí),CH374要求讀寫(xiě)脈沖寬度大于100nS */ mData = PINF; /* 從CH374的并口PA輸入數(shù)據(jù) */ PORTE |= 0x6B; /* 輸出無(wú)效的控制信號(hào), 完成操作CH374芯片, A0=0; CS=1; WR=1; RD=1; */ return( mData ); } 讀寫(xiě)寄存器,寫(xiě)索引和讀數(shù)據(jù)都測(cè)試過(guò),正常,但是寫(xiě)數(shù)據(jù)函數(shù)不對(duì),寫(xiě)數(shù)據(jù)到40H~45H再讀出來(lái)一只都是0xFD,求救.

寄存器的速度相對(duì)來(lái)說(shuō)速度快些,40--45是RAM速度稍微慢寫(xiě),這可能是讀寫(xiě)速度快導(dǎo)致出現(xiàn)錯(cuò)誤。 另外建議A0先與CS WR,RD變化,然后CS,然后WR在變,WR電平保持寬些,另外數(shù)據(jù)與數(shù)據(jù),數(shù)據(jù)與索引之間的延時(shí)按照芯片說(shuō)明書(shū)上去做,你可以在以上每個(gè)函數(shù)之間做個(gè)延時(shí),大概1.5US即可


芯片的延遲都是幾十ns的。 再貼個(gè)按你說(shuō)的改的程序,幫我看看謝謝??! /* 單片機(jī)的引腳 CH374芯片的引腳 PINE.4 INT# PORTE.2 A0 PORTE.3 CS# PORTE.5 WR# PORTE.6 RD# PORTF(8位端口) D7-D0 */

void CH374_PORT_INIT( ) /* 由于使用通用I/O模擬并口讀寫(xiě)時(shí)序,所以進(jìn)行初始化 */ { DDRF = 0x00; /* 設(shè)置8位并口為輸入 */ PORTE = 0x68; /* 設(shè)置CS,WR,RD默認(rèn)為高電平 */ DDRE = 0xEF; /* 設(shè)置CS,WR,RD,A0為輸出,設(shè)置INT#為輸入 */ } void Write374Index( UINT8 mCmd ) /* 向索引端口寫(xiě)入索引地址 */ { PORTE |= 0x04; /* 輸出A0=1 */ PORTF = mCmd; /* 向CH374的并口輸出數(shù)據(jù) */ DDRF = 0xFF; /* 并口D0-D7輸出 */ PORTE &= 0xD4; /* 輸出有效寫(xiě)控制信號(hào), 寫(xiě)CH374芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */ DDRF = 0xFF; /* 該操作無(wú)意義,僅作延時(shí),CH374要求讀寫(xiě)脈沖寬度大于100nS */ PORTE |= 0xF0; /* 輸出無(wú)效的控制信號(hào), 完成操作CH374芯片, A0=0; CS=0; WR=1; RD=1; */ PORTE |= 0xF8; /* 輸出無(wú)效的控制信號(hào), 完成操作CH374芯片, A0=0; CS=1; WR=1; RD=1; */ DDRF = 0x00; /* 禁止數(shù)據(jù)輸出 */ PORTE &= 0xFB; /* 輸出A0=0; 可選操作 */ } void Write374Data( UINT8 mData ) /* 向數(shù)據(jù)端口寫(xiě)入數(shù)據(jù),索引地址自動(dòng)加1 */ { PORTE &= 0xFB; /* 輸出A0=0 */ PORTF = mData; /* 向CH374的并口輸出數(shù)據(jù) */ DDRF = 0xFF; /* 并口D0-D7輸出 */ PORTE &= 0xD8; /* 輸出有效寫(xiě)控制信號(hào), 寫(xiě)CH374芯片的命令端口, A0=0; CS=1; WR=0; RD=1; */ PORTE &= 0xD0; /* 輸出有效寫(xiě)控制信號(hào), 寫(xiě)CH374芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=0; RD=1; */ DDRF = 0xFF; /* 該操作無(wú)意義,僅作延時(shí),CH374要求讀寫(xiě)脈沖寬度大于100nS */ DDRF = 0xFF; /* 該操作無(wú)意義,僅作延時(shí),CH374要求讀寫(xiě)脈沖寬度大于100nS */ delay_nus(5); PORTE |= 0xF0; /* 輸出無(wú)效的控制信號(hào), 完成操作CH374芯片, A0=0; CS=0; WR=1; RD=1; */ PORTE |= 0xF8; /* 輸出無(wú)效的控制信號(hào), 完成操作CH374芯片, A0=0; CS=1; WR=1; RD=1; */ DDRF = 0x00; /* 禁止數(shù)據(jù)輸出 */ PORTE |= 0x04; /* 輸出A0=1; 可選操作 */ } UINT8 Read374Data( void ) /* 從數(shù)據(jù)端口讀出數(shù)據(jù),索引地址自動(dòng)加1 */ { UINT8 mData;

DDRF = 0x00; /* 數(shù)據(jù)輸入 */ PORTE &= 0xB0; /* 輸出有效讀控制信號(hào), 讀CH374芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=1; RD=0; */ DDRF = 0x00; /* 該操作無(wú)意義,僅作延時(shí),CH374要求讀寫(xiě)脈沖寬度大于100nS */ mData = PINF; /* 從CH374的并口PA輸入數(shù)據(jù) */ PORTE |= 0x6B; /* 輸出無(wú)效的控制信號(hào), 完成操作CH374芯片, A0=0; CS=1; WR=1; RD=1; */ return( mData ); } /* 并口接口子程序,供CH374子程序庫(kù)調(diào)用 */ //********************************************************************** //函 數(shù) 名: //說(shuō) 明: //返 回 值: //示 范: //********************************************************************** UINT8 CH374_READ_REGISTER( UINT8 mAddr ) /* 外部定義的被CH374程序庫(kù)調(diào)用的子程序,從指定寄存器讀取數(shù)據(jù) */ { Write374Index( mAddr ); return( Read374Data( ) ); } //********************************************************************** //函 數(shù) 名: //說(shuō) 明: //返 回 值: //示 范: //********************************************************************** void CH374_WRITE_REGISTER( UINT8 mAddr, UINT8 mData ) /* 外部定義的被CH374程序庫(kù)調(diào)用的子程序,向指定寄存器寫(xiě)入數(shù)據(jù) */ { Write374Index( mAddr ); delay_nus(5); Write374Data( mData ); } 測(cè)試用程序:

printf("Read 0x04 Register is %02x.\n",CH374_READ_REGISTER(0x04)); delay_nms( 100 ); CH374_WRITE_REGISTER(0x40,0x48); delay_nms( 100 ); CH374_WRITE_REGISTER(0x41,0x49); delay_nms( 100 ); CH374_WRITE_REGISTER(0x42,0x50); delay_nms( 100 ); CH374_WRITE_REGISTER(0x43,0x51); delay_nms( 100 ); printf("Read 0x05 Register is %02x.\n",CH374_READ_REGISTER(0x05)); delay_nms( 100 ); printf("Read 0x06 Register is %02x.\n",CH374_READ_REGISTER(0x06)); delay_nms( 100 ); printf("Read 0x07 Register is %02x.\n",CH374_READ_REGISTER(0x07)); delay_nms( 100 ); printf("Read 0x08 Register is %02x.\n",CH374_READ_REGISTER(0x08)); delay_nms( 100 ); printf("\n"); printf("Read 0x40 Register is %02x.\n",CH374_READ_REGISTER(0x40)); delay_nms( 100 ); printf("Read 0x41 Register is %02x.\n",CH374_READ_REGISTER(0x41)); delay_nms( 100 ); printf("Read 0x42 Register is %02x.\n",CH374_READ_REGISTER(0x42)); delay_nms( 100 ); printf("Read 0x43 Register is %02x.\n",CH374_READ_REGISTER(0x43));


現(xiàn)在的測(cè)試結(jié)果是什么?不知道你的MCU以及頻率多快


還是一樣的結(jié)果,我使用的是Atmega64A的單片機(jī),模擬并口方式,使用16M晶振和8M晶振都測(cè)試過(guò),讀0x40以后的發(fā)送緩存都是0xfd,讀不出寫(xiě)進(jìn)去的數(shù)據(jù),救命啊~! ~~估計(jì)ch374u初始化0x81的錯(cuò)誤就是寫(xiě)數(shù)據(jù)這個(gè)函數(shù)造成的。所以急需解決這個(gè)問(wèn)題!


解決!! 錯(cuò)誤:CH374與HY62256的A0連在一起了??! 低級(jí)錯(cuò)誤........ 畫(huà)電路時(shí)都使用了A0標(biāo)號(hào),所以連接一起了.....


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

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