msp430g2533之iic(gpio模拟iic)
来源:互联网 发布:用友数据恢复 编辑:程序博客网 时间:2024/05/22 00:07
#include <msp430g2553.h>
#include <stdio.h>
#define SCL BIT6;
#define SDA BIT7;
#define uchar unsigned char
#define uint unsigned int
volatile int j;
void UART0_send_byte(unsigned char data)
{
for( j=10000;j>0;j--);
UCA0TXBUF=data;
}
void UART0_send_str(char *s)
{
while(*s != '\0')
{
UART0_send_byte(*s++);
}
}
void UART0()
{
DCOCTL = 0; // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P1SEL |= BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 |= BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
}
uchar R_word;
uchar ACK_Flag;
uchar read_buffer_iic[16] = {0};
uchar write_buffer_iic[16] = {0};
void delay(uint v)
{
while(v!=0)
v--;
}
void Start(void)
{
P1OUT &= ~SCL ;
P1OUT &= ~SDA ;
P1DIR &= ~SDA ;
P1DIR &= ~SCL ; delay(6);
P1DIR |= SDA ; delay(6);
P1DIR |= SCL ;
}
void Stop(void)
{
P1DIR |= SDA;
P1DIR &= ~SCL;
delay(6);
P1DIR &= ~SDA;
P1DIR |= SDA;
P1DIR |= SCL;
}
void Send_Byte(uchar Byte)
{
uint i;
for (i=0;i<8;i++)
{
if(Byte & 0x80)
{P1DIR &= ~SDA;}
else
{P1DIR |= SDA; }
P1DIR &= ~SCL ; delay(3) ;
Byte = Byte << 1;
P1DIR |= SCL ; delay(3) ;
}
}
void ACK(void)
{
P1DIR &= ~SDA;
P1DIR &= ~SCL;
ACK_Flag = 0;
delay(6);
if ((P1IN & BIT7))
ACK_Flag = 1;
P1DIR |= SCL;
delay(3);
}
void ACK_0(void)
{
P1DIR |= SCL;
P1DIR |= SDA;
delay(6);
P1DIR &= ~SCL;
P1DIR |= SCL;
delay(6);
}
void NOACK(void)
{
P1DIR &= ~SDA; delay(6);
P1DIR &= ~SCL; delay(6);
P1DIR |= SCL; delay(6);
P1DIR |= SDA;
}
void Receive_Byte(void)
{
uint j;
R_word = 0x00;
P1DIR &= ~SDA;
for(j=0;j<8;j++)
{
R_word = R_word << 1;
P1DIR &= ~SCL; delay(3);
if((P1IN & BIT7 ) == BIT7 )
R_word ++ ;
P1DIR |= SCL; delay(1);
}
}
void I2C_101_write(uchar W_addr,uchar dat)
{
Start();
delay(20);
Send_Byte(0x48); //write a byte :slave device
ACK();
Send_Byte(W_addr); // write a byte :e2prom address
ACK();
Send_Byte(dat);
ACK();
Stop();
delay(800);
}
void I2C_101_Read(uint R_addr,uchar n)
{
uchar i=0;
Start();
Send_Byte(0x90);
ACK();
Send_Byte(R_addr);
ACK();
Start();
Send_Byte(0x91);
ACK();
for(i=0;i<n-1;i++)
{
Receive_Byte();
ACK_0();
read_buffer_iic[i] = R_word ;
}
Receive_Byte();
ACK_0(); //NOACK();
read_buffer_iic[i] = R_word ;
Stop();
}
uint t;
void main(void)
{float t;
float tem;
char buf[10];
WDTCTL = WDTPW + WDTHOLD;
I2C_101_write(0x01,0x00) ;
UART0();
while(1)
{
I2C_101_Read(0,2) ;
t= read_buffer_iic[0]*100 + (uint)(read_buffer_iic[1]*0.0625*0.0625*100);
tem = t/100;
sprintf(buf," %8.4f\n",tem);
UART0_send_str(buf);
}
}
#include <stdio.h>
#define SCL BIT6;
#define SDA BIT7;
#define uchar unsigned char
#define uint unsigned int
volatile int j;
void UART0_send_byte(unsigned char data)
{
for( j=10000;j>0;j--);
UCA0TXBUF=data;
}
void UART0_send_str(char *s)
{
while(*s != '\0')
{
UART0_send_byte(*s++);
}
}
void UART0()
{
DCOCTL = 0; // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P1SEL |= BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 |= BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
}
uchar R_word;
uchar ACK_Flag;
uchar read_buffer_iic[16] = {0};
uchar write_buffer_iic[16] = {0};
void delay(uint v)
{
while(v!=0)
v--;
}
void Start(void)
{
P1OUT &= ~SCL ;
P1OUT &= ~SDA ;
P1DIR &= ~SDA ;
P1DIR &= ~SCL ; delay(6);
P1DIR |= SDA ; delay(6);
P1DIR |= SCL ;
}
void Stop(void)
{
P1DIR |= SDA;
P1DIR &= ~SCL;
delay(6);
P1DIR &= ~SDA;
P1DIR |= SDA;
P1DIR |= SCL;
}
void Send_Byte(uchar Byte)
{
uint i;
for (i=0;i<8;i++)
{
if(Byte & 0x80)
{P1DIR &= ~SDA;}
else
{P1DIR |= SDA; }
P1DIR &= ~SCL ; delay(3) ;
Byte = Byte << 1;
P1DIR |= SCL ; delay(3) ;
}
}
void ACK(void)
{
P1DIR &= ~SDA;
P1DIR &= ~SCL;
ACK_Flag = 0;
delay(6);
if ((P1IN & BIT7))
ACK_Flag = 1;
P1DIR |= SCL;
delay(3);
}
void ACK_0(void)
{
P1DIR |= SCL;
P1DIR |= SDA;
delay(6);
P1DIR &= ~SCL;
P1DIR |= SCL;
delay(6);
}
void NOACK(void)
{
P1DIR &= ~SDA; delay(6);
P1DIR &= ~SCL; delay(6);
P1DIR |= SCL; delay(6);
P1DIR |= SDA;
}
void Receive_Byte(void)
{
uint j;
R_word = 0x00;
P1DIR &= ~SDA;
for(j=0;j<8;j++)
{
R_word = R_word << 1;
P1DIR &= ~SCL; delay(3);
if((P1IN & BIT7 ) == BIT7 )
R_word ++ ;
P1DIR |= SCL; delay(1);
}
}
void I2C_101_write(uchar W_addr,uchar dat)
{
Start();
delay(20);
Send_Byte(0x48); //write a byte :slave device
ACK();
Send_Byte(W_addr); // write a byte :e2prom address
ACK();
Send_Byte(dat);
ACK();
Stop();
delay(800);
}
void I2C_101_Read(uint R_addr,uchar n)
{
uchar i=0;
Start();
Send_Byte(0x90);
ACK();
Send_Byte(R_addr);
ACK();
Start();
Send_Byte(0x91);
ACK();
for(i=0;i<n-1;i++)
{
Receive_Byte();
ACK_0();
read_buffer_iic[i] = R_word ;
}
Receive_Byte();
ACK_0(); //NOACK();
read_buffer_iic[i] = R_word ;
Stop();
}
uint t;
void main(void)
{float t;
float tem;
char buf[10];
WDTCTL = WDTPW + WDTHOLD;
I2C_101_write(0x01,0x00) ;
UART0();
while(1)
{
I2C_101_Read(0,2) ;
t= read_buffer_iic[0]*100 + (uint)(read_buffer_iic[1]*0.0625*0.0625*100);
tem = t/100;
sprintf(buf," %8.4f\n",tem);
UART0_send_str(buf);
}
}
0 0
- msp430g2533之iic(gpio模拟iic)
- msp430g2533之iic(硬件iic)
- GPIO模拟IIC代码模板
- GPIO模拟IIC代码模板
- GPIO口模拟IIC通信
- GPIO软件模拟IIC时序
- GPIO模拟IIC过程中对IIC的理解
- 00025-----GPIO模拟IIC总线程序
- 00025-----GPIO模拟IIC总线程序
- 用s5pc100的GPIO模拟IIC
- 模拟IIC
- STM32 GPIO IIC学习
- gpio软件模拟IIC与硬件IIC驱动有什么区别
- 使用GPIO模拟IIC的遇到的N个问题
- STM32Cube MX 下IIC的配置与使用--GPIO模拟
- C51 GPIO口模拟IIC读写24CXX
- IIC
- IIC
- 使用symbolicatecrash分析crash文件
- codeforces--707E. Garlands(二维树状数组)
- HDU 1048 Fire Net
- cocoscreate 官方例子说明 02_ui_01_widget_AlignOnceWidget by:adady
- 安卓谷歌电子市场学习笔记系列——ViewHolder及convertView
- msp430g2533之iic(gpio模拟iic)
- OpenJudge 2705:扩号匹配问题
- 3D玫瑰
- 使用tomcat8.0.36实现的websocket技术,实现向单个以及全部用户实时推送消息的功能
- 常用库的混淆
- Linux下的SSH端口转发
- Web系统大规模并发
- Android xml常用
- Linux线程编程 - 线程同步机制之互斥锁