我用的CH372B,3.3V供電,設(shè)置模式,測試,都對,中斷也能進(jìn),就是讀到的中斷值不對,老是0x24或者0x5f,不知道怎么會事?期待大家?guī)兔?!謝謝!
測試命令需要做2次,假如你首先做測試命令的數(shù)據(jù)是0X55,讀取的數(shù)據(jù)是0XAA的話,在發(fā)送測試命令,發(fā)送數(shù)據(jù)0XAA,讀取到的數(shù)據(jù)是0X55的話,那么,才能說明你的硬件沒有問題。那么后面讀取到的中斷狀態(tài)才是正確的。
是你說那么做的,現(xiàn)在的問題就是別的地方都對,就是讀到的中斷值不對?
還有個問題就是,我看資料上有個372b讀中斷的時序,要求a0=?。?;這個怎么用?讀中斷命令具體怎么做呢?
這個是在不采用INT引腳的時候在讀取是否有中斷的函數(shù),類似于讀取數(shù)據(jù)函數(shù),只不過在讀取數(shù)據(jù)的過程中將A0引腳拉高。如果采用INT#引腳的話,就沒必要用這個函數(shù),還有一個問題就是你讀取數(shù)據(jù)的時候是采用模擬I/O口方式還是總線方式,如果是模擬I/O口的話需要注意時序
還有這個測試是必須做的嗎?還是可選的呢?
該測試命令主要是用來測試硬件電路有沒有問題, 如果你覺的你的硬件沒有問題,可以不做
如果是模擬I/O口的話需要注意時序?是io口模擬的,但是別的命令都對,主程序初始化完后發(fā)一組數(shù)據(jù)到電腦,也能收到,中斷也進(jìn),進(jìn)去以后讀的中斷狀態(tài)不對,用調(diào)試軟件下發(fā)一組數(shù)據(jù)也能引起中斷,但是同樣讀到的中斷狀態(tài)值不對!不知道為什么?郁悶好幾天了!
(1)模擬I/O口是需要注意時序,如讀寫脈寬至少為60nS之類 (2)應(yīng)該與你的程序有關(guān)系,不妨貼出來看看
/* 延時2微秒,不精確,需要根據(jù)硬件實際情況調(diào)整 */ void Delay2us( ) { UINT8 i; for ( i=200; i!=0; i-- ); }
/* 與CH372/CH375有關(guān)的基本I/O操作 */
void CH375_WR_CMD_PORT( UINT8 cmd ) { /* 向CH375的命令端口寫入命令,周期不小于4uS,如果單片機(jī)較快則延時 */ char SFRPAGE_SAVE; SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page SFRPAGE=0x0f; //
Delay2us(); U_RD = 1; U_A0=1;//寫命令 U_WR=0;//向CH372發(fā)數(shù)據(jù) P3=cmd; Delay2us(); U_WR=1;
SFRPAGE = SFRPAGE_SAVE; // restore SFR_PAGE }
void CH375_WR_DAT_PORT( UINT8 dat ) { /* 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時 */ char SFRPAGE_SAVE; SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page SFRPAGE=0x0f; // U_RD = 1; U_A0=0;//數(shù)據(jù) U_WR=0;
P3=dat; Delay1us(); /* 如果是MCS51單片機(jī),因其較慢,所以實際上無需延時 */ U_WR=1;
SFRPAGE = SFRPAGE_SAVE; // restore SFR_PAGE }
UINT8 CH375_RD_DAT_PORT( void ) { /* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時 */ char SFRPAGE_SAVE; SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page SFRPAGE=0x0f; // P3=0xff; U_WR=1; U_A0=0;//數(shù)據(jù) U_RD=0; Delay2us(); /* 如果是MCS51單片機(jī),因其較慢,所以實際上無需延時 */ U_RD=1;
SFRPAGE = SFRPAGE_SAVE; // restore SFR_PAGE return( P3 ); }
用的是c8051f060,io口模擬時序,晶振是22.1184m,單指令周期!
你可以拿下面修改了的程序去測試下看可以不可以: void CH375_WR_CMD_PORT( UINT8 cmd ) { /* 向CH375的命令端口寫入命令,周期不小于4uS,如果單片機(jī)較快則延時 */ char SFRPAGE_SAVE; SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page SFRPAGE=0x0f; //
Delay2us(); U_RD = 1; U_A0=1;//寫命令 U_WR=0;//向CH372發(fā)數(shù)據(jù) P3=cmd; U_WR=0;//向CH372發(fā)數(shù)據(jù) U_WR=0;//向CH372發(fā)數(shù)據(jù) U_WR=1; Delay2us(); U_A0=0;//寫命令
SFRPAGE = SFRPAGE_SAVE; // restore SFR_PAGE }
void CH375_WR_DAT_PORT( UINT8 dat ) { /* 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時 */ char SFRPAGE_SAVE; SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page SFRPAGE=0x0f; // U_RD = 1; U_A0=0;//數(shù)據(jù) U_WR=0;
P3=dat; U_WR=0; U_WR=0; U_WR=1; Delay1us(); /* 如果是MCS51單片機(jī),因其較慢,所以實際上無需延時 */
U_A0=0;//數(shù)據(jù) SFRPAGE = SFRPAGE_SAVE; // restore SFR_PAGE }
UINT8 CH375_RD_DAT_PORT( void ) { /* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時 */ char SFRPAGE_SAVE; unsigned char i; SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page SFRPAGE=0x0f; // P3=0xff; U_WR=1; U_A0=0;//數(shù)據(jù) U_RD=0; U_RD=0; U_RD=0; U_RD=0; i=P3; U_RD=1; Delay2us(); /* 如果是MCS51單片機(jī),因其較慢,所以實際上無需延時 */
SFRPAGE = SFRPAGE_SAVE; // restore SFR_PAGE return( i ); }
謝謝!我先試試
用上面的程序讀出的中斷狀態(tài)為0x00,還是不對呀?
你把完整的程序打包傳上來看看
不好意思,最近家里有點事情,回了 趟老家,剛回來,現(xiàn)象還是那樣,不清楚是怎么會事. 怎么上傳附件呢?