|
|
| | -文章搜索 - 最新文章 - | |
第590篇:通用MSP430—I2C程序 |
| 发布时间:2004年2月25日 点击次数:7250 |
| 来源: 作者: |
//通用MSP430—I2C程序 //收藏:清风徐徐 //QQ:78779514 //EMAIL:XSL88888@TOM.com //2004.2.4 //===================================// #include "MSP430x14x.h" //P3.2 SCL //P3.3 SDA #define SDA_1 P3OUT |= BIT3 //SDA = 1 #define SDA_0 P3OUT &=~ BIT3 //SDA = 0 #define SCL_1 P3OUT |= BIT2 //SCL = 1 #define SCL_0 P3OUT &=~ BIT2 //SCL = 0 #define DIR_IN P3DIR &=~ BIT3; SDA_1 //I/O口为输入 #define DIR_OUT P3DIR |= BIT3 //I/0口为输出 #define SDA_IN ((P3IN >> 3) & 0x01) //Read SDA unsigned int a[50]; static void Delay(unsigned int n) { unsigned int i; for (i=0; i void Init(void) { SCL_1; Delay(5); SDA_1; Delay(5); } void Start(void) { SDA_1; Delay(5); SCL_1; Delay(5); SDA_0; Delay(5); SCL_0; Delay(5); } void Stop(void) { SDA_0; Delay(5); SCL_1; Delay(5); SDA_1; Delay(5); } void WriteByte(unsigned char WriteData) { unsigned char i; for (i=0; i<8; i++) { SCL_0; Delay(5); if (((WriteData >> 7) & 0x01) == 0x01) { SDA_1; } else { SDA_0; } Delay(5); SCL_1; WriteData = WriteData << 1; Delay(5); } SCL_0; SDA_1; Delay(5); Delay(5); } unsigned char ReadByte(void) { unsigned char i; unsigned char TempBit = 0; unsigned char TempData = 0; SCL_0; Delay(5); SDA_1; for (i=0; i<8; i++) { Delay(5); SCL_1; Delay(5); DIR_IN; if (SDA_IN == 0x01 /*sda==1*/) { TempBit = 1; } else { TempBit = 0; } DIR_OUT; TempData = (TempData << 1) | TempBit; SCL_0; } Delay(5); return(TempData); } void ReceiveAck(void) { unsigned char i = 0; SCL_1; Delay(5); DIR_IN; while ((SDA_IN == 0x01 /*sda==1*/) && (i < 255)/*调试方便,可以不要*/) { i++; } DIR_OUT; SCL_0; Delay(5); } void Acknowledge(void) { SCL_0; Delay(5); DIR_OUT; SDA_0; SCL_1; Delay(5); SCL_0; } unsigned int ReadWord(unsigned char unit/*address*/) { unsigned char HighData = 0; unsigned char LowData = 0; unsigned int TempData = 0; Start(); WriteByte(0xa0); ReceiveAck(); WriteByte(unit); ReceiveAck(); Start(); WriteByte(0xa1); ReceiveAck(); LowData = ReadByte(); Acknowledge(); HighData = ReadByte(); Stop(); TempData = (HighData << 8) + LowData; Delay(1000); return(TempData); } void ReadWords(unsigned char unit/*address*/) { unsigned char i; unsigned char HighData = 0; unsigned char LowData = 0; unsigned int TempData = 0; Start(); WriteByte(0xa0); ReceiveAck(); WriteByte(unit); ReceiveAck(); Start(); WriteByte(0xa1); ReceiveAck(); for (i=0; i<49; i++) { LowData = ReadByte(); Acknowledge(); HighData = ReadByte(); Acknowledge(); a[i]= (HighData << 8) + LowData; } LowData = ReadByte(); Acknowledge(); HighData = ReadByte(); Stop(); a[49] = (HighData << 8) + LowData; Delay(1000); } void WriteWord(unsigned char unit/*address*/, unsigned int WriteData) { unsigned char LowData = 0; unsigned char HighData = 0; LowData = (unsigned char)WriteData; HighData = (unsigned char)(WriteData >> 8); Start(); WriteByte(0xa0); ReceiveAck(); WriteByte(unit); ReceiveAck(); WriteByte(LowData); ReceiveAck(); WriteByte(HighData); ReceiveAck(); Stop(); Delay(2000); } |
|
|
|
|
[PIC MSP430 ] 相关文章: 利尔达MSP430系列单片机技术讲座和培训简介: 一、技术讲座 -- 内容: 介绍主流单片机和MSP430单片机的技术特点和发展趋势;国内外品牌产品中的应用;利用MSP430开发的成功实例;掌握MSP430的就业和发展机会。 主讲: 梁源 -- TI MSP430 资深工程师、 LIERDA 公司技术总监 &nb...... MSP430三表技术讨论区 msp430单片机没有外部RAM,也就是说:无法接总线驱动设备。不知各位大侠是否同意。 请问在网上哪里可以找到带12位A/D转换的单片机的资料? 多路A/D不用的输入端一般如何处理?接地吗? |
|
|
|