誰(shuí)幫我看看這個(gè)程序?yàn)槭裁床荒苓B接到上位機(jī)

以下是我上網(wǎng)找的一個(gè)程序說(shuō)已經(jīng)通過(guò)測(cè)試,但是我怎么嘗試都不行呢,用DEBUG372.exe調(diào)試過(guò)了,硬件連接好像沒(méi)有問(wèn)題,就是沒(méi)有發(fā)現(xiàn)ch372的設(shè)備,哪位好心人幫我看看程序啊,急?。。?!多謝,多謝了。 以下是我的程序:

/****************************** CH375測(cè)試程序 Mega16 模擬總線(xiàn)

控制端口定義: A0 -- PC0 RD -- PC1 WR -- PC6 CS -- PC7 數(shù)據(jù)端口定義: PORTA ******************************/ #include #include

#define A0 PC0 //定義引腳 #define RD PC1 #define WR PC6 #define CS PC7 #define NOP asm("nop") //定義一個(gè)空操作語(yǔ)句

#define CHECK_375 0x06 //測(cè)試375命令(CH375手冊(cè)中有詳細(xì)的命令列表)

/******************************************* 函數(shù)原型聲明區(qū) ********************************************/

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寫(xiě)數(shù)據(jù)函數(shù) ********************************************/ void WR_DAT_ch375(unsigned char dat) { PORTC &= ~(1 << A0); //A0 = Low 選擇輸出是數(shù)據(jù) PORTC &= ~(1 << WR); //WR = Low 選擇寫(xiě) DDRA = 0xFF; NOP; NOP; PORTA = dat; //端口寫(xiě)數(shù)據(jù)(0x55) } /******************************************* 寫(xiě)命令函數(shù) ********************************************/ void WR_CMD_ch375(unsigned char cmd) { PORTC &= ~(1 << WR); //WR = Low 選擇寫(xiě) PORTC |= (1 << A0) | (1 << RD); //A0 = High 寫(xiě)命令 DDRA = 0xFF; NOP; NOP; PORTA =cmd; //發(fā)送數(shù)據(jù) } /******************************************* 讀CH375數(shù)據(jù)函數(shù) ********************************************/ unsigned char RD_data_ch375(void) { unsigned char data; PORTC |= (1 << WR); PORTC &= ~(1 << RD); //RD = Low 選擇讀 PORTC &= ~(1 << A0); DDRA = 0x00; PORTA = 0xFF; //初始化端口上拉(實(shí)際使用 NOP; NOP; data = PINA; //讀端口數(shù)據(jù)并返回 return data; } /******************************************* 控制線(xiàn)初始化函數(shù) ********************************************/ void CONT_PORT_init(void) { PORTC |= (1 << A0) | (1 << RD) | (1 << WR) | (1 << CS); PORTC &= ~(1 << CS); DDRC = 0xFF; //控制端口初始化為輸出 } /******************************************* 主函數(shù) ********************************************/ int main() { unsigned char testret; DDRB = 0xFF; PORTB = 0x00; CONT_PORT_init(); WR_CMD_ch375(CHECK_375); //向CH375寫(xiě)命令(測(cè)試0x06) WR_DAT_ch375(0x55); testret = RD_data_ch375(); while(1); return 0; }

你的時(shí)序錯(cuò)了,我們的375芯片WR,RD是在上升沿有效的而非低電平有效,另外,在操作的時(shí)候建議先操作A0,在操作其他信號(hào)線(xiàn)!例如: unsigned char RD_data_ch375(void) { unsigned char data; PORTC &= ~(1 << A0); PORTC |= (1 << WR); PORTC &= ~(1 << RD); //RD = Low 選擇讀 data = PINA; //初始化端口上拉(實(shí)際使用 NOP; NOP; PORTC |= (1 << RD); //讀端口數(shù)據(jù)并返回 DDRA = 0x00; PORTA = 0xFF; return data; }


謝謝你的回答,但是剛才我按照你所說(shuō)的那樣改了程序測(cè)試了還是沒(méi)有能成功,我用CHECK_EXIST命令測(cè)試返回的數(shù)據(jù),無(wú)論我剛開(kāi)始發(fā)什么數(shù)據(jù)給ch372,我收到的數(shù)據(jù)都是0x43,實(shí)在是不知道是什么原因了,請(qǐng)?jiān)趲臀曳治龇治?,我繼續(xù)嘗試。


版主能幫我看看嗎,頭都想炸了還是不知道什么問(wèn)題啊。


如果你的讀寫(xiě)子函數(shù)所有的時(shí)序都改掉了,那MAIN函數(shù)里,上電后要加50MS的延時(shí),我們的375上電復(fù)位大概50MS.上電后你測(cè)試一下25,26腳,正常情況下25腳為低,26腳為高,否則就是復(fù)位!


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

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