[問題] 8051控制MAX3100 (SPI)

看板Electronics作者 (阿乾)時間9年前 (2015/03/04 10:45), 9年前編輯推噓3(302)
留言5則, 4人參與, 最新討論串1/1
大家好 之前有在ASM版問過相關問題 不過還是沒有完全解決 因此想在這邊請教大家 我現在是用STC的晶片 我的51跟MAX3100透過SPI的方式控制 之後再把MAX3100的TX接回電腦 現在的問題是 我的Terminal有時候可以接收到正確的資料 有時候又全部資料都寫 FF 我電源重置後 有時候又正常(程式都沒變) 這種問題是? 以下附上程式碼 #include "STC12C5A60S2.h" #include<intrins.h> sbit DIN=P0^0; //MAX3100 SPI寫入 sbit DOUT=P0^1; //MAX3100 SPI讀取 sbit DCLK=P0^2; //MAX3100 SPI時脈 sbit CS=P0^3; //MAX3100 晶片選擇 直接接地 void MAX3100_write(unsigned short dat); void MAX3100_init(); void trans_data(unsigned char ch); void delay1msX(unsigned int count) ; // 1ms*count 延遲副程式 void delay1msX(unsigned int count) { unsigned int i,j; for(i=0;i<count;i++) for(j=0;j<114;j++); } //暫存器寫函數,向MAX3100寫入16位元資料 void MAX3100_write(unsigned short dat) { unsigned char i=16; CS=0; for(;i>0;i--) { if(dat&0x8000) DIN=1; else DIN=0; DCLK=1; __nop_(); __nop_(); DCLK=0; dat=dat<<1; delay1msX(100); } CS=1; } //MAX3100初始化 void MAX3100_init() { MAX3100_write(0xe00c);// 初始MAX3100 禁能FIFO // MAX3100保持在工作狀態 關閉收發中斷 // UART模式 1位元停止位元 8位元資料位元 串列傳輸速率為 4800 //振盪器選用3.6864MHZ } // void trans_data(unsigned char ch) { unsigned short tmp=0x8000;//發送命令 tmp=tmp|ch; //合併資料 MAX3100_write(tmp);//發送資料 } void main() { MAX3100_init();//MAX3100初始化 DOUT=1; while(1) { trans_data(0x80);//發送資料 trans_data(0x90);//發送資料 trans_data(0xa0);//發送資料 trans_data(0xb0);//發送資料 } } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.125.20.234 ※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1425437141.A.C21.html

03/04 10:53, , 1F
雖然是題外,if加個括號吧,改天出bug會想死
03/04 10:53, 1F
好的 謝謝 ※ 編輯: wads90828 (140.125.20.234), 03/04/2015 11:02:30

03/09 01:21, , 2F
不大確定 不過會不會是CA=1到CS=0時間太短造成資料遺失
03/09 01:21, 2F

03/09 01:21, , 3F
啊?
03/09 01:21, 3F

03/12 11:29, , 4F
設個spi接收完的中斷看看
03/12 11:29, 4F

05/15 23:42, , 5F
if下面只有一行,本來就不用括號!
05/15 23:42, 5F
文章代碼(AID): #1Kzd7LmX (Electronics)