作者wads90828 (阿乾)
看板Electronics
标题[问题] 8051控制MAX3100 (SPI)
时间Wed Mar 4 10:45:38 2015
大家好
之前有在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://webptt.com/cn.aspx?n=bbs/Electronics/M.1425437141.A.C21.html
1F:→ KawasumiMai: 虽然是题外,if加个括号吧,改天出bug会想死 03/04 10:53
好的 谢谢
※ 编辑: wads90828 (140.125.20.234), 03/04/2015 11:02:30
2F:推 tomtsmi: 不大确定 不过会不会是CA=1到CS=0时间太短造成资料遗失 03/09 01:21
3F:→ tomtsmi: 啊? 03/09 01:21
4F:推 pbzw: 设个spi接收完的中断看看 03/12 11:29
5F:推 cherry1225: if下面只有一行,本来就不用括号! 05/15 23:42