📄 main._c
字号:
#include"iom16v.h"
#include <iom16v.h>
#include<macros.h>
#include"UART.h"
#include"DELAY.h"
#define uchar unsigned char
#define STATUS (TWSR&0xf8)
#define SLA_W 0x32
#define SLA_R 0x33
#define SLAVER_ADDRESS 0x32
#define START 0x08
#define RE_START 0x10
#define MT_SLA_WRITE_ACK 0x18
#define MT_SLA_READ_ACK 0x40
#define MT_DATA_ACK 0x28
#define MT_READ_ACK 0x58
void Start(void)
{
TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while(!(TWCR&(1<<TWINT)));
}
void Stop(void)
{
TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
}
void Load(uchar i)
{
TWDR=i;
TWCR=(1<<TWINT)|(1<<TWEN);
while(!(TWCR&(1<<TWINT)));
}
void Get(unsigned char *d)
{
TWCR=(1<<TWINT)|(1<<TWEN);
while(!(TWCR&(1<<TWINT)));
*d= TWDR;
}
void ERROR(uchar state)
{Stop();
}
/*写一个字节data,成功则返回1,否则
返回0*/
uchar SendByte(uchar data)
{
//启动I2C
Start();
if(STATUS!=START) //{ERROR(STATUS);return 0;}
puts("Start ERRor");
//发送从机地址(写),等待回应, 错误检测
Load(0);
if(STATUS!=MT_SLA_WRITE_ACK) //{ERROR(STATUS);return 0;}
puts("SLA_W RROR");
/*
//发送EEPROM地址,等待回应,错误检测
Load(addr);
if(STATUS!=MT_DATA_ACK) {ERROR(STATUS);return 0;}
*/
//发送数据,等待回应,错误检测
Load(data);
if(STATUS!=MT_DATA_ACK) //{ERROR(STATUS);return 0;}
puts("Date Error");
Stop();
return 1;//发送成功,返回1;
}
void Init_Io(void)
{
DDRC&=~((1<<PC0)&(1<<PC1)&(1<<PC2));
PORTC|= (1<<PC0)|(1<<PC1)|(1<<PC2);
TWCR=(1<<TWEA)|(1<<TWEN); //主机模式,使能TWI
TWBR=32;//波特率 100K 8M晶振
}
void main()
{
uchar temp;
Init_Io();
uart_init();
// puts("串口工作");
while(1)
for(temp=0;temp<10;temp++)
{
SendByte(temp+0x30);
Delay_nms(10);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -