微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 基于MSP430F449的数据存储和USB串行通信实现

基于MSP430F449的数据存储和USB串行通信实现

时间:07-31 来源:互联网 点击:
延时处理模块  
void IIC_Delay(void)   
{  
_NOP();  
_NOP();  
_NOP();  
}  

启动I2C模块   
void start_IIC(void) // 启动I2  
{  
P2OUT&=0xf9; //设置P2输出  
P2DIR&=0XFD; //SDA=1, 上拉电阻使得P2.1为H,FD=1111,1101  
P2DIR&=0XFB; //SCL=1 FB=1111,1011  
P2DIR|=0X02; // SDA=0  
P2DIR|=0X04; // SCL=0  
}  

停止I2C模块  
void stop_IIC(void) //   
{  
P2DIR|=0X02;//SDA=0  
IIC_Delay();  
P2DIR&=0XFB;//SCL=1 FB=1111,1011  
P2DIR&=0XFD;//SDA=1, 上拉电阻使得P2.1为H,FD=1111,1101   
IIC_Delay();  
P2DIR|=0X04;// SCL=0   
}  

发送 “ 0”模块  
void send_zero(void) //   
{  
P2DIR|=0X02;// SDA=0  
IIC_Delay();  
P2DIR&=0XFB;//SCL=1 FB=1111,1011  
IIC_Delay();  
P2DIR|=0X04;// SCL=0   
}  

发送 1模块  
void send_one(void) //   
{  
P2DIR&=0XFD;//SDA=1, 上拉电阻使得P2.1为H,FD=1111,1101   
IIC_Delay();  
P2DIR&=0XFB;//SCL=1 FB=1111,1011  
IIC_Delay();  
P2DIR|=0X04;// SCL=0   
}  

发送单字符数据  
void send _char(unsigned char data_out) //   
{  
unsigned char i,tmp=0x80;  
for(i=0;i  
{  
if((data_out & tmp)>0)  
send_one();  
else  
send_zero();  
tmp/=2;  
}  
}  

读单字符数据  
unsigned char read_char(void)   
{  
unsigned char i,tmp=0x80;  
unsigned char data1=0;   
for (i=0;i  
{  
P2DIR&=0XFD;//SDA=1, 11111101  
IIC_Delay();//   
P2DIR&=0XFB;//SCL=1 FB=1111,1011  
IIC_Delay();  
if((P2IN&0x02)>0x00)  
{  
data1|=tmp;  
}  
P2DIR|=0X04;// SCL=0   
IIC_Delay();  
tmp/=2;  
}  
return data1;  
}  

检查应答信号模块  
void iic_ACK(void)  
{  
ack_flag=0x00;  
P2DIR&=0XFD;//SDA=1, FD=1111,1101  
IIC_Delay();  
P2DIR&=0XFB;//SCL=1 FB=1111,1011  
IIC_Delay();  
while((P2IN&BIT1)==BIT1);   
P2DIR|=0X04;// SCL=0   
IIC_Delay();  
}  

拒绝应答模块  
void iic_NACK(void) {  
P2DIR&=0XFD;//SDA=1,  
IIC_Delay();  
P2DIR&=0XFB;//SCL=1 FB=1111,1011  
IIC_Delay();  
P2DIR|=0X04;// SCL=0   
IIC_Delay();  
P2DIR|=0X02;// SDA=0  
IIC_Delay();//   
}  

写连续数据模块  
void WriteNbyte(unsigned char *p,unsigned int addr,unsigned char number)   
{  
start_IIC();  
send_char(0xa2);  
iic_ACK();   
send_char(addr/256); //high address byte  
iic_ACK();  
send_char(addr%256);  
iic_ACK();   
do  
{  
send_char(*p);  
p++;  
iic_ACK();   
}  
while(--number);  
   
stop_IIC();  
delay(10);  
}  

发送应答模块:ACK (LOW)  
void S_ACK(void)   
{  
P2DIR|=0X02;// SDA=0  
IIC_Delay();  
P2DIR&=0XFB;//SCL=1 FB=1111,1011  
IIC_Delay();  
P2DIR|=0X04;// SCL=0   
IIC_Delay();  
}  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top