📄 main.c
字号:
#include "C8051F340.h"
#include <intrins.h>
#define SomeNop() _nop_();_nop_();_nop_();_nop_();_nop_();
sbit SCL=P0^1;
sbit SDA=P0^0;
sbit RST=P0^6;
/////////////////////////////////////
// Generated Initialization File //
/////////////////////////////////////
// Peripheral specific initialization functions,
// Called from the Init_Device() function
void PCA_Init()
{
PCA0MD &= ~0x40;
PCA0MD = 0x00; //禁止看门狗
}
void Port_IO_Init()
{
// P0.0 - Skipped, Open-Drain, Digital
// P0.1 - Skipped, Open-Drain, Digital
// P0.2 - Unassigned, Open-Drain, Digital
// P0.3 - Unassigned, Open-Drain, Digital
// P0.4 - Unassigned, Open-Drain, Digital
// P0.5 - Unassigned, Open-Drain, Digital
// P0.6 - Unassigned, Push-Pull, Digital
// P0.7 - Unassigned, Open-Drain, Digital
// P1.0 - Unassigned, Open-Drain, Digital
// P1.1 - Unassigned, Open-Drain, Digital
// P1.2 - Unassigned, Open-Drain, Digital
// P1.3 - Unassigned, Open-Drain, Digital
// P1.4 - Unassigned, Open-Drain, Digital
// P1.5 - Unassigned, Open-Drain, Digital
// P1.6 - Unassigned, Open-Drain, Digital
// P1.7 - Unassigned, Open-Drain, Digital
// P2.0 - Unassigned, Open-Drain, Digital
// P2.1 - Unassigned, Open-Drain, Digital
// P2.2 - Unassigned, Open-Drain, Digital
// P2.3 - Unassigned, Open-Drain, Digital
// P2.4 - Unassigned, Open-Drain, Digital
// P2.5 - Unassigned, Open-Drain, Digital
// P2.6 - Unassigned, Open-Drain, Digital
// P2.7 - Unassigned, Open-Drain, Digital
// P3.0 - Unassigned, Open-Drain, Digital
// P3.1 - Unassigned, Open-Drain, Digital
// P3.2 - Unassigned, Open-Drain, Digital
// P3.3 - Unassigned, Open-Drain, Digital
// P3.4 - Unassigned, Open-Drain, Digital
// P3.5 - Unassigned, Open-Drain, Digital
// P3.6 - Unassigned, Open-Drain, Digital
// P3.7 - Unassigned, Open-Drain, Digital
P0MDOUT = 0x40;
P0SKIP = 0x03;
XBR1 = 0x40;
}
void Oscillator_Init()
{
OSCICN = 0x83; //系统时钟12MHz;
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
PCA_Init();
Port_IO_Init();
Oscillator_Init();
}
//----------------------------------------------------------------------------
void Delay(unsigned int x)
{
unsigned int i, j;
for (i=0; i<x; i++)
{
for (j=0; j<0xff; j++)
{;}
}
}
//----------------------------------------------------------------------------
void Init_TTQH6(void)
{
RST=0;
Delay(1);
RST=1;
Delay(20);
}
void I2C_Delay(void)
{
// SomeNop();
_nop_();//_nop_();//_nop_();_nop_();// 1uS ,>0.6uS
}
//----------------------------------------------------------------------------
/*
**start
** ________
**SCL \______
** ____
**SDA \__________
**
*/
void I2C_Start(void)
{
SCL = 0;
I2C_Delay();
I2C_Delay();
SDA = 1;
I2C_Delay();
SCL = 1;
I2C_Delay();
SDA = 0;
I2C_Delay();
SCL = 0;
I2C_Delay(); //jm add
}
//----------------------------------------------------------------------------
/*
**stop
** _______
**SCL ____/ -------
** ____
**SDA _______/ ----
**
*/
void I2C_Stop(void)
{
SCL = 0;
I2C_Delay();
SDA = 0;
I2C_Delay();
SCL = 1;
I2C_Delay();
while(SCL != 1) SCL = 1;
SDA = 1;
I2C_Delay();
}
//----------------------------------------------------------------------------
void I2C_Write_Byte(unsigned char w_dat)
{
unsigned char i;
for (i=0; i<8; i++)
{
SDA = (bit)(w_dat & 0x80);
I2C_Delay();
SCL = 1;
w_dat <<= 1;
I2C_Delay();
SCL = 0;
I2C_Delay(); //jm add
}
SDA = 1; //释放SDA数据线
I2C_Delay();
}
//----------------------------------------------------------------------------
unsigned char I2C_Read_Ack(void)
{
SCL = 1;
do
{
SDA = 1;
}while (SDA != 0);
SCL = 0;
I2C_Delay(); //jm add
return(0);
}
//----------------------------------------------------------------------------
unsigned char I2C_Read_Byte(void)
{
unsigned char i, r_dat;
SDA = 1;
SCL = 1;
while(SCL != 1)
{ //释放
SCL = 1;
}
for (i=0; i<8; i++)
{
SCL = 1;
I2C_Delay();
r_dat <<= 1;
r_dat |= (char)SDA;
SCL = 0;
I2C_Delay(); //jm add
I2C_Delay(); //jm add
}
SDA = 1; //释放
I2C_Delay();
SCL = 1;
I2C_Delay();
SCL = 0;
return(r_dat);
}
//----------------------------------------------------------------------------
//---------------------------------------------------------------------------
unsigned char Read_TTQH6(unsigned char device_ID,unsigned char register_address)
{
unsigned char dat;
// I2C_Stop(); //jm delete
I2C_Start();
I2C_Write_Byte(device_ID); // 器件写地址
I2C_Read_Ack();
I2C_Write_Byte(register_address); // 寄存器地址
I2C_Read_Ack();
I2C_Stop(); //
I2C_Start(); //
I2C_Write_Byte(device_ID+1); //器件读地址
I2C_Read_Ack();
dat = I2C_Read_Byte();
//I2C_Write_Ack(); //数据已从TTQH6中读出不用再理会回传应答
I2C_Stop();
return(dat);
}
//----------------------------------------------------------------------------
void Write_TTQH6(unsigned char device_ID,unsigned char register_address,unsigned char value)
{
// I2C_Stop(); //jm delete
I2C_Start();
I2C_Write_Byte(device_ID); // 器件写地址
I2C_Read_Ack();
I2C_Write_Byte(register_address); // 寄存器地址
I2C_Read_Ack();
I2C_Write_Byte(value); // 写数据
I2C_Read_Ack();
I2C_Stop();
SomeNop();
SomeNop();
SomeNop();
SomeNop();
}
//------------------------------------------------------------------------
void main(void)
{
unsigned char Rdata1,Rdata2;
Init_Device();
Init_TTQH6();
// Write_TTQH6(0xC4,0x00,0x10);
//while(1)
//{
Rdata1=Read_TTQH6(0xC4,0x00);
//}
// Rdata2=Read_TTQH6(0xC4,0x00);
// while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -