历史上的今天
今天是:2025年01月30日(星期四)
2018年01月30日 | MSP430 IIC总线程序
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
下一篇:MSP430F449时钟
史海拾趣
|
德州仪器达芬奇五年之路七宗罪,嵌入式处理器架构之争决战2012(五) 正文:2009年春暖花开之时,TI果然毫不迟疑的推出了能支持H.264 720P30压缩的DM365达芬奇处理器,该处理器可以认为是DM355的完善版本,除了更新了ISP之外,DM365使用了和DM355相同的 ARM926E-JS内核,使用了DM355的MJCP硬件加速器,这个加速器可以 ...… 查看全部问答> |
|
这个问题很多人问过了,但还是要问一下,因为和他们情况不太相同。。。 我是一名二本大三的学生,计算机专业,学过C C++ 数据结构等,也用VC做过一些程序,现在想转到嵌入式软件方面,但已经快大四了,不知道时间够不够? 第二个问题,嵌入式软件 ...… 查看全部问答> |
|
在2440.h中这么写的 #define ADC_BASE 0xB1800000 // 0x58000000 而在map.a中是这样写的, DCD 0x91800000, 0x58000000, 1 ; A/D convert register 0x91800000: 虚拟地址 0x58000000: 物理地 ...… 查看全部问答> |
|
转载:http://www.powersystems.eet-china.com/ART_8800623749_2400002_NT_51116982.HTM 美国科研人员制成了一种新型超级电容(DLC,double-layer capacitors),只需200微秒的时间即可完成充电,并在交流电路的测试中获得了成功。(人类每次眨眼的时 ...… 查看全部问答> |
|
论坛里松翰单片机资料貌似很少。本人最近在用松翰单片机sn8f2288 的MSP(main series port)接口做I2C通信,从陀螺仪中读取数据,折腾了两个礼拜,还没弄出来。分析了很久我认为是MSP速率发生器设置的问题,资料中就是往MSPADR寄存器中写一个数据, ...… 查看全部问答> |
|
用了INA116,AD623,TL064等几个仪表运放,连接电路只是简单地接上电源、输入和ref,给输出端接个负载,然后测输出电压。G=1,也就是没有接电阻RG。输入大概是3V的峰峰值,信号发生器的50欧口。 这种电路在十几个kHz的时候工作的还挺好,可是频率 ...… 查看全部问答> |
|
奋斗 STM32 V2 开发板(网络芯片位置留出,没有焊接网络芯片) 200包邮 新唐NANO 130 110包邮 全要 300包邮 QQ 744 252 519 [ 本帖最后由 upc_arm 于 20 ...… 查看全部问答> |




