AVR单片机万年历程序
//***************************FileName:RTC.C************************//
//***************************ICCAVR V6.30编译**********************//
#include <io8535v.h> //寄存器定义文件
#include <macros.h> //使用到宏
#define uchar unsigned char //数据类型定义
#define uint unsigned char //数据类型定义
#define SD2303 0x64 //SD2303器件IIC识别码
uchar Table[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x38,0x76};
//显示数据表 0 1 2 3 4 5 6 7 8 9 L H
uchar Data[4]={0,0,0,0}; //DS1722
uchar Enter_Flag; //确定
uchar F_Flag; //数据应答标志
void DelayMs(uint i) //延时函数1
{uchar j;
for(;i!=0;i--)
{for(j=2000;j!=0;j--) {;}}
}
void Display(uchar *p) //显示函数
{uchar i,sel=0x00;
for(i=0;i<16;i++)
{PORTC=sel;
PORTA=Table[p[i]];
DelayMs(10);
sel=sel<<1;
}
}
void NOPNOP(uchar i) //延时函数2
{for(;i!=0;i--) NOP();}
void SetSCL(uchar i) //IIC时钟线SCL设置
{if(i==1) PORTB=PORTB|0x01;
else PORTB=PORTB&0xFE;}
void SetSDA(uchar i) //IIC数据线SDA设置
{if(i==1) PORTB=PORTB|0x02;
else PORTB=PORTB&0xFD;}
//SCL=PB^0; SD2303时钟线
//SDA=PB^1; SD2303数据线
//INTRB=PB^3; SD2303中断线A
//INTRA=PB^2; SD2303中断线B
void Start() //IIC总线开始信号
{SetSDA(1);
SetSCL(1);
NOPNOP(50);
SetSDA(0);
NOPNOP(50);
SetSCL(0);
}
void Stop() //IIC总线停止信号
{SetSDA(0);
SetSCL(1);
NOPNOP(50);
SetSDA(1);
NOPNOP(50);
SetSCL(0);
}
void Ack() //单片机应答信号
{SetSDA(0);
SetSCL(1);
NOPNOP(50);
SetSCL(0);
SetSDA(1);
}
void Nack() //单片机非应答信号
{SetSDA(1);
SetSCL(1);
NOPNOP(50);
SetSCL(0);
SetSDA(0);
}
void Check_Ack() //器件应答信号检查
{SetSDA(1);
SetSCL(1);
F_Flag=0;
DDRB=DDRB&0xFD;
if((PINB&0x02)==0)
{SetSCL(0);
NOPNOP(50);}
else
{F_Flag=1;
SetSCL(0);
NOPNOP(50);}
DDRB=DDRB|0x02;
}
void Write_Bit0() //向IIC总线写0
{SetSDA(0);
SetSCL(1);
NOPNOP(50);
SetSCL(0);
}
void Write_Bit1() //向IIC总线写1
{SetSDA(1);
SetSCL(1);
NOPNOP(50);
SetSCL(0);
SetSDA(0);
}
void Write_Byte(uchar Data) //向IIC总线写一字节数据
{uchar i;
for(i=0;i<8;i++)
{if((Data&0x80)>0)
Write_Bit1();
else
Write_Bit0();
Data<<=1;
}
}
uchar Read_Byte() //从IIC总线读一字节数据
{uchar nn=0xff;
uchar j;
for (j=0;j<8;j++)
{SetSDA(1);
SetSCL(1);
DDRB=DDRB&0xFB;
if((PINB&0x02)==0)
{nn<<=1;
上一篇:AVR单片机控制交流电机测试程序