[問題] 8051控制MAX3100 (SPI)
大家好
之前有在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
03/04 10:53, 1F
好的 謝謝
※ 編輯: wads90828 (140.125.20.234), 03/04/2015 11:02:30
推
03/09 01:21, , 2F
03/09 01:21, 2F
→
03/09 01:21, , 3F
03/09 01:21, 3F
推
03/12 11:29, , 4F
03/12 11:29, 4F
推
05/15 23:42, , 5F
05/15 23:42, 5F