?? 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("串口工作");
SendByte(0x30);
while(1)
{
;
}
/*for(temp=0;temp<10;temp++)
{
SendByte(temp+0x30);
Delay_nms(10);
}
*/
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -