|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
關(guān)于040和5043的接口程序問題 |
| 作者:bao11975 欄目:單片機(jī) |
關(guān)于040和5043的接口程序問題 我現(xiàn)在用C8051F040,軟件模擬的方式對(duì)5V供電的5043設(shè)置,對(duì)SI、SO、CS、SCK均通過4.7K電阻上拉 但是現(xiàn)在的問題是只要一讀狀態(tài)寄存器,5043的REST腳有復(fù)位電平輸出 請(qǐng)教一下哪位大哥知道是什么原因 也請(qǐng)用040的朋友多交流 bao-11975@163.com qq:22329794 我本來也想用040的硬件SPI,但是對(duì)5043的讀狀態(tài)寄存器,在給出0x05的讀命令(在SCK的上升沿,第0個(gè)到第7個(gè)脈沖輸出0x05),從第7個(gè)的下降沿開始,SO就有數(shù)據(jù)輸出了,040不象020那樣能夠控制要發(fā)出的無效字的長(zhǎng)度,我就不知道這里該怎么處理了。哪位大哥能不能給個(gè)思路? 我用硬件SPI的幾個(gè)函數(shù)如下: void SPI0_Init (void) { SFRPAGE = SPI0_PAGE; SPI0CFG = 0x40; //主方式 SPI0CN = 0x03; // MASTER mode; SPI enabled; flags // cleared SPI0CKR = 15; //SCK-->1M CS_5043 = 1; // post SPI0/EEPROM available // EIE1 |= 0x01; // enable SPI0 interrupts } void outbyte( unsigned CHAR byte) //輸出一個(gè)數(shù)據(jù)到25045,此數(shù)據(jù)可能為地址,先導(dǎo)字,寫入的數(shù)據(jù)等 { SFRPAGE = SPI0_PAGE; // SPI0CFG = 0x40; //主方式 SPIF = 0; SPI0DAT=byte; while (SPIF == 0); } unsigned CHAR inbyte(void) //得到一個(gè)數(shù)據(jù),此數(shù)據(jù)可能為狀態(tài)寄存器數(shù)據(jù),讀出的單元數(shù)據(jù)等 { SFRPAGE = SPI0_PAGE; SPI0CFG = 0x60; //主方式 SPIF = 0; // if(!(SPI0CFG&0x80==0x80)) SPI0DAT=0; while (SPIF == 0); temp5=SPI0DAT; return (temp5); } 軟件模擬SPI的源程序如下: #include <c8051f040.h> // SFR declarations sbit cs=P2^2; sbit si=P0^4; sbit so=P0^3; sbit sck=P0^2; //*************************************************************** //** All x5043 command ** //*************************************************************** #define WREN 0X06 #define WRDI 0X04 #define WRSR 0X01 #define RDSR 0x05 #define WRITE 0x02 // 0 0 0 0 A8 0 1 0 #define READ 0x03 // 0 0 0 0 A8 0 1 1 #define STATUS_REG1 0X00 // WATCHDOG 200ms, NO EEPROM PROTECT #define STATUS_REG2 0X38 // 看門狗被禁止,受保護(hù)的陣列為100-1FF #define STATUS_REG3 0X3c // 看門狗被禁止,受保護(hù)的陣列為000-1FF #define STATUS_REG4 0X30 // 看門狗被禁止,無受保護(hù)的陣列 // 7 6 5 4 3 2 1 0 // 0 0 WD1 WD0 BL1 BL0 WEL WIP // BL1 BL1 受保護(hù)的陣列地址 // 0 0 無 // 0 1 180-1FF // 1 0 100-1FF // 1 1 000-1FF // // WEL:只讀位,WREN設(shè)置WEL位(使能寫操作);WRDI復(fù)位WEL位(禁止寫操作) // WIP:只讀位,用RDSR讀。=1表示寫操作正在進(jìn)行。;=0,表示沒有寫操作 // // WD1 WD0 看門狗超時(shí)周期 // 0 0 1.4S // 0 1 600mS // 1 0 200mS // 1 1 禁止 void si_h(void) {si=1;} void si_l(void) {si=0;} void sck_h(void) {sck=1;} void sck_l(void) {sck=0;} void cs_h(void) {cs=1;} void cs_l(void) {cs=0;} void eeprominit(void); void outbyte(unsigned CHAR byte); unsigned CHAR inbyte(void); voi |
| 2樓: | >>參與討論 |
| 作者: bao11975 于 2005/3/9 22:00:00 發(fā)布:
自己頂一下 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |