硬件连接注意事项:
1.
第1、29、30脚必须通过10K电阻接地。
2.
第8脚必须接地。
3.
11、12或27、18任意接一组电源就可以。
4.
驱动步进电机的L298的相线必须接正确,否则电机肯定不转
5.
其它没说明的引脚不用管。
6.
在连接、测试时千万不要用手去接触MMC芯片的任何引脚,否则输出不了信号。
7.
一旦过流保护被启动,芯片必须重新上电后才可恢复正常工作,如果用手去碰MMC的第1、29、30脚则过流保护立即启动。
8.
强烈建议先不要直接接L298,先用示波器查看MMC信号输出的波形,然后再接L298,如果波形都没,那什么也出不来。
#include <reg52.h>
sbit SPI_DI =P0^1; //MMC数据输入
sbit SPI_DO =P0^0;//MMC数据输出,可不接
sbit SPI_SCL=P0^2;//时钟线
void delay(unsigned int time)
{
while(time--);
}
void Write_Byte(unsigned char value)
//**********************************************************
******************
{
unsigned char i;
for (i=0;i<8;i++)
{
if (((value>>(7-i))&0x01)==0x01)
SPI_DI=1;
else SPI_DI=0;
SPI_SCL=0;
delay(5);
//必须要加延时,否则会因为操作太快而不响应。
SPI_SCL=1;
delay(5);
//必须要加延时,否则会因为操作太快而不响应。
}
}
//以下为读数据函数,不用读MMC,所以不用管,供参考用
unsigned char Read_Byte()
{
unsigned char temp=0;
unsigned char i;
for (i=0;i<8;i++)
{
SPI_DO=1;
SPI_SCL=0;
delay(5);
temp=(temp<<1)+(unsigned char)SPI_DO;
SPI_SCL=1;
delay(5);
}
return (temp);
}
void main()
{
delay(50);//首次上电先延时一会儿
Write_Byte(0x50);//设置第一通道配置寄存器
Write_Byte(0x80);//配置第一通道
/*
一定要先设计配置字,再设计频率字,否则不出来,不要看管方资料。
*/
delay(5);
Write_Byte(0x51);// 设置第一通道频率寄存器
Write_Byte(49); //送入频率字,49为20hz.
/* 频率字的计算方法如下,不要看管方给的资料,否则计算错误:
设你想要的频率为F,频率字为FC则用以下公式计算
F*4=4000/(FC+1)
如:我想要20Hz,则20*4=4000/(FC+1)
求得:FC=49,
*/
Write_Byte(0x54);//设置第二通道
Write_Byte(0x80);
delay(5);
Write_Byte(0x55);
Write_Byte(24);
/*
第三通道固定为1Khz,怎么设置都改不过来,大家不要用第三通道了,就用第一二通道就足够了。*/
delay(50);
while(1);
}