// 发送单字符数据
void send _char(unsigned char data_out) //
{
unsigned char i,tmp=0x80;
for(i=0;i<8;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<8;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) & nbsp; {
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();//
}
// 发送应答模块: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();
}
// 连续读字符模块
void ReadNbyte(unsigned char *p,unsigned int addr,unsigned char number)
{
start_IIC();
send_char(0xa2);
iic_ACK();
send_char(addr/256);
iic_ACK();
send_char(addr%256);
iic_ACK();
start_IIC();
send_char(0xa3);
iic_ACK();
do
{
*p=read_char();
p++;
if(number!=1)
S_ACK(); //send ACK
}
while(--number);
iic_NACK();
stop_IIC();
}
数据的传输
数据传输是存储在EEPROM中的数据到达计算机的有效途径,数据上传到计算机最常用的是串行(RS232)接口, 现在由于 USB 计数的不断成熟,通过USB可以方便快捷实现数据传输,而且可以满足速率和设备外观的要求,但是USB的驱动程序设计是比较复杂的工作,本例中使用简单的桥接电路,把UART接口的数据经过CP2102的桥接,直接实现数据的USB转换,从430F449异步串口输出的数据自动转化为符合USB协议的数据直接连接到计算机的USB口,上位机应用程序通过CP2102的驱动程序可以象操作串口一样直接读写端口数据。
结论
以上的硬件设计比较简单可靠,可以照搬到同类型的控制芯片上,软件代码也同样具有较好的移植性,只要把控制时钟和数据端口和程序软件设置相一致即可。
参考文献:
1、MSP430系列16位超低功耗单片机实践与系统设计《清华大学出版社》
2、MSP430系列单片机接口计数及系统设计实例《北京航天航空大学出版社》
3、MSP430系列单片机C语言程序设计与开发《北京航天航空大学出版社》
本文关键字:通信 DSP/FPGA技术,单片机-工控设备 - DSP/FPGA技术