历史上的今天
今天是:2025年01月30日(星期四)
2018年01月30日 | MSP430 24C64控制程序
2018-01-30 来源:eefocus
#ifndef _I2C_H
#define _I2C_H
#define SDA_1 P4OUT|=0x02 //SDA = 1
#define SDA_0 P4OUT&=~0x02 //SDA = 0
#define SCL_1 P4OUT|=0x01 //SCL = 1
#define SCL_0 P4OUT&=~0x01 //SCL = 0
#define SDA_IN P4DIR&=~0x02; //I/O口为输入
#define SDA_OUT P4DIR|=0x02 //I/0口为输出
#define J_SDA_1_or_0 (P4IN&0x02)==0x02
//--------------------------------------------
//--------以下为24C64读写子函数
//DELAY 函数程序//功能:延时子程序
//==========================================
statIC void Delay(unsigned int n)
{
while(n!=0)
{n--;}
}
//=========================================
//START 函数程序
//功能:开始闪存操作
//==========================================
void Start(void)
{
SDA_OUT;
SDA_1;
Delay(10);
SCL_1;
Delay(10);
SDA_0;
Delay(10);
SCL_0;
Delay(10);
}
//=========================================
//STOP 函数程序
//功能:停止闪存操作
//==========================================
void Stop(void)
{
SDA_0;
Delay(10);
SCL_1;
Delay(10);
SDA_1;
Delay(10);
}
void TX_Byte(unsigned char WritEDAta)
{
unsigned char i,j;
j=WriteData;
SDA_OUT;
for (i=0; i<8; i++)
{
if ((j&0x80)==0)
{ SDA_0;}
else
{ SDA_1;}
j <<=1;
Delay(10);
SCL_1;
Delay(10);
SCL_0;
Delay(10);
}
}
unsigned char RX_Byte(void)
{
unsigned char i;
unsigned char TempData = 0;
SDA_IN;
for (i=0; i<8; i++)
{
Delay(10);
SCL_1;
Delay(10);
TempData <<= 1;
if (J_SDA_1_or_0)
{ TempData++; }
SCL_0;
Delay(10);
}
SDA_OUT;
return(TempData);
}
//=========================================
//ACK 函数程序
//功能:挂高电平表示闪存时钟信号
//==========================================
void ReceiveAck(void)
{
SDA_IN;
SCL_1;
Delay(10);
while (J_SDA_1_or_0)
{ }
SCL_0;
SDA_OUT;
Delay(10);
}
unsigned char ReadWord(unsigned long int unit/*address*/)
{
unsigned char LowAdd = 0;
unsigned char HighAdd = 0;
unsigned char TempData = 0;
LowAdd = (unsigned char)unit;
HighAdd = (unsigned char)(unit >> 8);
SDA_OUT;
Start();
TX_Byte(0xa0);
ReceiveAck();
TX_Byte(HighAdd);
ReceiveAck();
TX_Byte(LowAdd);
ReceiveAck();
Start();
TX_Byte(0xa1);
ReceiveAck();
TempData = RX_Byte();
Stop();
Delay(8000);
return(TempData);
}
void WriteWord(unsigned long int unit/*address*/, unsigned char WriteData)
{
unsigned char LowAdd = 0;
unsigned char HighAdd = 0;
LowAdd = (unsigned char)unit;
HighAdd = (unsigned char)(unit >> 8);
Start();
TX_Byte(0xa0);
ReceiveAck();
TX_Byte(HighAdd);
ReceiveAck();
TX_Byte(LowAdd);
ReceiveAck();
TX_Byte(WriteData);
ReceiveAck();
Stop();
Delay(8000);
}
#endif
史海拾趣
|
DSP是一种高性能的数字信号处理器。由于其具有快速的计算能力和强大的信息处理能力,因此被广泛地应用到工业自动化、国防科研等领域中。与常规单片机相比,DSP的内部结构和时序发生了很大的变化。所以单片机适用的接口芯片,DSP并不一定适用。对于非常 ...… 查看全部问答> |
|
APDK6400开发板简介 APDK6400是基于SAMSUNG的16/32位RSIC微处理器S3C6400X的一款开发平台,S3C6400X是基于ARM1176JZF-S核的用于手持、移动等终端设备的通用处理器。 S3C6400是一款低功率、高性价比、高性能的用于移动电话和通用处理RSIC处理器。 ...… 查看全部问答> |
|
WINCE5.0找不到应用程序(或它的某一个组件)的问题,宇龙酷派7360手机 我做了一个程序,是用在宇龙酷派7360手机上。已经使用了宇龙公司提供的SDK开发。但是放到手机上运行的时候仍然提示:“找不到“Lemon”(或它的某一个组件)。请确认路径和文件名正确并且所需要的库全部可用”。 我用dumpbin看了一下,我的程序使用 ...… 查看全部问答> |
|
请教各位大侠,在嵌入式机上建立SQL数据库的具体方法是什么样的呢?我知道在PC机上用SQL SERVER 2000 在查询分析器里面建立,可是又该怎么应用SQL FOR CE呢?在哪里编程?还是通过PC机移植? 毕设有这方面的内容,要求在嵌入式系统建立一个数据库 ...… 查看全部问答> |
|
为了能在wince中加入compact framework 2.0组件,下载了platformbuilder2007全年补丁,随即产生了这个问题:第一次烧录完成后能进入wince,跳针接回nand位置后重启无法进入wince,我使用的是QQ2440v3板及原配的BSP。看来又是个大难题… 查看全部问答> |
|
我用vc++编了一个板卡的数据采集接口程序,其中用到了winio控件,我按照使用说明一步步操作,可是就是编译不成功,请帮我看看是怎么回事,谢谢了!程序如下: #include #include #include #include \"winio.h\" void main() { &n ...… 查看全部问答> |
|
读通道 ADC_16 ADC_17注意: 必须设置TSVREFE位以激活内部通道:ADCx_IN16(温度传感器)和ADCx_IN17(VREFINT)的转换。通道使能。 数字不对。如图 [2][3]是温度。[4][5][6] [7]是VERF+万利的板 ...… 查看全部问答> |




