-
/**********************************
晶振
:11.0592M
模拟
I2C
总线操作
DS1624
2007/11/27
编写
:fjh
/**********************************/
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned
long
#define
SCL_H PORTD|=(1<<4)
#define SCL_L PORTD&=~(1<<4)
#define SDA_H
PORTD|=(1<<5)
#define SDA_L
PORTD&=~(1<<5)
unsigned char temperdata[2]={0,0};
unsigned char
buffer[6]={1,1,1,1,1,1};
<
/p>
/******************
应用程序
********************/
void timer1_init(void);
void delay(uchar us);
void Start(void);
void Stop(void);
void SendByte(uchar Dat);
uchar ReceiveByte(uchar b);
void Start_Temperature_T(void);
void I2cByteRead(void);
void data_to_buffer(uint
a);
void Display(void);
/**************************
********************/
void
port_init(void)
{
PORTA = 0xff;
DDRA = 0xff;
PORTB = 0xff;
DDRB = 0xff;
PORTC = 0xff;
DDRC = 0xff;
PORTD = 0x00;
DDRD = 0xff;
PORTE = 0xff;
DDRE = 0xff;
PORTF = 0xff;
DDRF = 0xff;
PORTG = 0x00;
DDRG = 0x00;
}
// actual
value: 1.000Sec (0.0%)
void timer1_init(void)
{
TCCR1B =
0x00; //stop
TCNT1H =
0xD5; //setup
TCNT1L =
0xD1;
OCR1AH = 0x2A;
OCR1AL = 0x2F;
OCR1BH = 0x2A;
OCR1BL = 0x2F;
OCR1CH =
0x2A;
OCR1CL = 0x2F;
ICR1H = 0x2A;
ICR1L = 0x2F;
TCCR1A = 0x00;
TCCR1B =
0x05; //start Timer
TIMSK
= 0x04; //timer interrupt sources
}
#pragma interrupt_handler
timer1_ovf_isr:15
void
timer1_ovf_isr(void)
{
uint temperbuf=0;
ulong temperbuff=0;
//TIMER1 has overflowed
TCNT1H = 0xD5; //reload
counter high value
TCNT1L
= 0xD1; //reload counter low value
PORTF=~PORTF;
I2cByteRead();
buffer[5]=temperdata[1]/10;
buffer[4]=temperdata[1]%10;
temperbuf=temperdata[0];
temperbuf=(temperbuf>>3)*312;
data_to_buffer(temperbuf);
Display();
Start_Temperature_T();
}
void delay(uchar us)
{
while(us--);
}
/************************START*********
******************/
void
Start(void)
{
//SDA_H;
delay(5);
SCL_H;
delay(5);
SDA_L;
delay(5);
SCL_L;
delay(5);
}
void Stop(void)
{
//SDA_L;
delay(5);
SCL_H;
delay(5);
SDA_H;
delay(5);
SCL_L;
delay(5);
}
<
/p>
/***************************************
*****************/
/*******
****
向
I2C
总线发送一个字节<
/p>
+
接收一个
ACK**********
**/
void SendByte(uchar
Dat)
{
uchar i=0;
uchar T_Data=0;
DDRD|=(1<<1);//
输出
-
-
-
-
-
-
-
-
-
上一篇:VxWorks的中断服务
下一篇:pic16f1824增强型串口通信源码