#include "I2C_16BIT.H"
void init(void)
{
Init_WDT();
_DINT();
Init_Uart();
Init_Timer();
KillDog; // clear WDT
Init_AD();
_EINT();
FOCUS_IDLE; //控制调焦电机
}
void Init_WDT(void)
{
StartDog; // WDT 1000ms, ACLK
}
void Init_Timer(void)
{
CCR0 = 10485;
CCTL0 &= (~CCIE);
}
void Init_Uart(void)
{
P3SEL |= (BIT4 + BIT5); //P3.4,5 UART option select
BCSCTL1 |= DIVA_3; // ACLK= LFXT1CLK/8
ME2 |= (UTXE0 + URXE0); //enable txd and rxd
UCTL0 |= CHAR; //8-bit characters
UTCTL0 |= SSEL1; //UCLK = SMCLK
UBR00 = 0x36; // 19200 from 1Mhz
UBR10 = 0x00; //
UMCTL0 = 0XB5;//0x6B; // Modulation
UCTL0 &= (~SWRST); //Initialize USART state machine
IE2 |= URXIE0; //enable rxd interrupt
CCTL2 = CM_1 + CCIS_1 + CAP + CCIE; // CAP, ACLK, interrupt
TACTL = TASSEL_2 + MC_2 + TACLR; // SMCLK, cont-mode, clear
}
void Init_AD(void)
{
ADC10CTL1 = INCH_1+ADC10DIV_3; // Temp Sensor ADC10CLK/4
ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON ; //REF1_5V
ADC10AE |= 0x02; // P2.1 ADC10 option select
}
float GetSysVoltage(void)
{
int long temp=0,i=0;
float tempt=0.0;
for(i=0;i<32;i++)
{
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
while (ADC10CTL1 & ADC10BUSY);
temp += ADC10MEM;
}
temp/=32;
tempt=(temp*18)/1024.0;
return(tempt);
}
void Delay(unsigned long cont)
{
unsigned long i;
for (i = 0; i < cont; i++)
{
;
}
}
//===================================================================================================//
//延时子程序
void I2C_Delay()
{
unsigned char i;
for (i = 0; i < I2C_TIME; i++){;}
}
//===================================================================================================//
//I2C总线停止信号
void I2C_Stop(void)
{
//负周期
SCLK_LOW;
I2C_Delay();
SDOUT_LOW;
I2C_Delay();
//正周期
SCLK_HIGH;
I2C_Delay();
//在正周期内产生一个上升沿
SDOUT_HIGH;
I2C_Delay();
SDOUT_LOW;
I2C_Delay();
SDOUT_HIGH;
I2C_Delay();
}
//===================================================================================================//
//I2C总线发送一个字
unsigned int I2C_transmit_word(unsigned int data)
{
unsigned int receive_data = 0;
unsigned int transmit_data = data;
unsigned char j;
for(j = 0; j < 5; j++)
{
//发送十六位数据
for(int i = 0; i < 16; i ++)
{
receive_data = receive_data >> 1;
receive_data = receive_data + I2C_transmit_bit(transmit_data);
transmit_data = transmit_data >> 1;
}
//判断是否传输正确
if(receive_data == data)
{
I2C_transmit_bit(BIT0);
j = 5;//传输正确,跳出循环
}
else
{
I2C_transmit_bit(0x00);
}
I2C_Stop();
}
return receive_data;
}
//===================================================================================================//
//I2C总线发送一个BIT
unsigned int I2C_transmit_bit(unsigned int data)
{
unsigned int receive_data;
SCLK_LOW;
I2C_Delay();
if((data & BIT0) == BIT0)
{
SDOUT_HIGH;
}
else
{
SDOUT_LOW;
}
I2C_Delay();
SCLK_HIGH;
I2C_Delay();
SCLK_LOW;
I2C_Delay();
if(SDIN == BIT0)
{
receive_data = BITF;
}
else
{
receive_data = 0;
}
I2C_Delay();
return receive_data;
}
I2c.rar_430 I2C
版权申诉
186 浏览量
2022-09-20
15:37:39
上传
评论
收藏 2KB RAR 举报
Kinonoyomeo
- 粉丝: 77
- 资源: 1万+
最新资源
- win10-64位画图cab安装包Microsoft-Windows-MSPaint
- 基于C#财务管理系统设计与实现
- 封装redis常用基本命令.zip
- 基于python的图书推荐管理系统设计与实现
- Termius 7.13.0 (windows免登录版)
- 基于STM32F072C8T6单片机PWM波控制蜂鸣器实验软件例程 KEIL工程源码+核心板硬件PDF原理图.zip
- debian package
- Redis 命令脑图.zip
- 机器学习使用Stable Diffusion实现潜在空间搜索
- 基于Python+tkinter+MySQL的图书管理系统+设计报告+PPT(课程设计高分项目).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈