Có bác nào biết về chuẩn giao tiếp SPI và I2C là gì ko.Khái niệm cũng như ứng dụng của nó.
![63](http://dientuvietnam.net/forums/images/smilies/63.gif)
1- Code khởi tạo RTC (nạp lần 1 để setup time cho RTC)
#include <AT89x52.h>
unsigned char xdata xreg[14] _at_ 0xFF00;//cac thanh ghi dieu khien (second, minutes,..A,B,..)
unsigned char xdata theky _at_ 0xFF32;
//////////////////// DINH DANH CAC NHAN DIEU KHIEN
sbit CS =P3^1;
#define sqw_on xreg[0xB]|=0x08;// phat xung vuong//SQWE=1
#define sqw_off xreg[0xB]&=0xF7;// phat xung vuong//SQWE=0
#define edit_on xreg[0x0B]|=0x80;// dat che do chinh sua//SET=1
#define edit_off xreg[0x0B]&=0x7F;// tat che do chinh sua//SET=0
#define UIE_on xreg[0x0B]|=0x10;// cho phet ngat ket thuc viec cap nhap
#define UIE_off xreg[0x0B]&=0xEF;// khong cho phet ngat ket thuc viec cap nhap
data unsigned char n,c1,c2;
//////////////////// DINH NGHIA VA KHAI BAO CAC KIEU DU LIEU MOI
void delay(unsigned char n)// thu tuc tre
{
for(c1=0;c1<=n;c1++)
for(c2=0;c2<=200;c2++);
}
//////////////////////////// CHUONG TRINH CHINH
void main()
{
CS=0;//chon chan CS
xreg[0xA]=0xAF;//bat chip dong ho va tan so cua SQW=2Hz;
edit_on //10101111 UIP=1;DV=010;RS=1111
delay(100);
//xreg[0xB]|=0x04;// dat che do binary (DM=0),DSE=0
xreg[0xB]|=0x04;// dat che do BCD (DM=0),DSE=0
edit_on
xreg[0xB]|=0x2;// dat che do kieu 24h
//////// dat gio va lich
edit_on
theky=20;//thanh ghi the ky
xreg[0]=0;//dat 0 giay
xreg[2]=12;//dat phut
xreg[4]=22;//dat gio
xreg[6]=2;// thu
xreg[7]=24;// ngay
xreg[8]=11;// thang
xreg[9]=8;// nam
edit_off
sqw_on
UIE_on
}
//////////////////////////////////// PHAN DINH NGHIA CAC THU TUC
2-Code chính của chương trình
-----------------------------------------------------------
|REG A | UIP | DV2 | DV1 | DV0 | RS3 | RS2 | RS1 | RS0 |
---------------r--------------------------------------------
|REG B | SET | PIE | AIE | UIE |SQWE | DM |24/12| DSE |
------------------------------------------------------------
|REG C |IRQF | PF | AF | UF | 0 | 0 | 0 | 0 |
---------------r-----r-----r-----r---------------------------
*/
#include <AT89x51.h>
unsigned char xdata xreg[14] _at_ 0xFF00;//vi tri cac thanh ghi gio ,phut,giay..
unsigned char xdata theky _at_ 0xFF32;//thanh ghi the ky
///////////// DINH DANH CAC NHAN DIEU KHIEN///////////////////
sbit donghe= P1^0;//dinh nghia cac cong lam nut an
sbit AMPM= P1^1;//Led AM -PM
sbit DOT= P1^2;//chan H
sbit chuong=P3^0;//bao chuong
sbit CS=P3^1;//chon chip DS
sbit chon=P3^3;//chon Led de dieu chinh
sbit role=P1^6;//chon role mac dinh =0
sbit loa=P1^7;//chon role mac dinh =1
sbit set=P3^5;//thiet lap
//////////////////////////////////////////////////////
#define sqw_on xreg[0xB]|=0x08;// phat xung vuong//SQWE=1
#define sqw_off xreg[0xB]&=0xF7;// tat phat xung vuong//SQWE=0
#define edit_on xreg[0x0B]|=0x80;// dat che do chinh sua//SET=1
#define edit_off xreg[0x0B]&=0x7F;// dat che do chinh sua//SET=0
#define intr0_on EX0=1;// cho phep ngat ngoai 0
#define intr0_off EX0=0;// khong phep ngat ngoai 0
#define UIE_on xreg[0x0B]|=0x10;// cho phet ngat ket thuc viec cap nhap
#define UIE_of xreg[0x0B]&=0xEF;// khong cho phet ngat ket thuc viec cap nhap
data unsigned char view[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // vung dem danh cho viec hien thi
data unsigned char pp[4]={0x10,0x12,0x11};
data unsigned char UIP,K,loi;
////////////////////////////////////////////////////////////////
//////////////////// DINH NGHIA VA KHAI BAO CAC KIEU DU LIEU MOI
data unsigned char giay,phut,gio,thu,ngay,thang,nam;
/////////////////gio bao chuong////////////////////
//////////////////////Khai bao cac bien du lieu/////////////////////////////
unsigned char i,j,x,t,h,m,h,p,q,ii,jj,vao2,kk,y;
///////////////thu tuc tre^~///////////////////////////
void delay(unsigned char vao)
{
for(i=0;i<=vao;i++)
for(j=0;j<=100;j++);
}
void delay2(unsigned char vao2)
{
for(ii=0;ii<=vao2;ii++)
for(jj=0;jj<=200;jj++)
for(kk=0;kk<=250;kk++);
}
///////////////thoi gian bao tiet///////////////////////////
/////////khoi tao RTC chi 1 lan////////////
/*void khoitao()
{
CS=0;//chon chan CS
delay(200);
delay(200);
xreg[0xA]=0xEF;//reset bo giao dong cua RTC
delay(100);
xreg[0xA]=0xAF;//bat chip dong ho va tan so cua SQW=2Hz;
edit_off //10101111 UIP=1;DV=010;RS=1111
delay(100);
edit_on
xreg[0xB]|=0x04;// dat che do binary (DM=1),DSE=0
xreg[0xB]|=0x2;// dat che do kieu 24h
//////// dat gio va lich
theky=20;//thanh ghi the ky
edit_on
xreg[0]=0;//dat 0 giay
xreg[2]=50;//dat phut
xreg[4]=0;//dat gio
xreg[6]=7;// thu
xreg[7]=26;// ngay
xreg[8]=8;// thang
xreg[9]=06;// nam
edit_off
sqw_on
UIE_on
}
*/
/////////////////kieu chuong////////////////
void baochuong()
{
role=0;
delay2(5);
role=1;
delay2(5);
}
//////////////////////CHUONG TRINH HIEN THI LED/////////////////////////
void displayLed()
{
view[0]=(unsigned char)(thu==1)?8:thu;// phan don vi cua thu <=8
view[1]=(unsigned char)(ngay/10);// phan chuc cua ngay
view[2]=(unsigned char)(ngay%10);// phan donvi cua ngay
view[3]=(unsigned char)(thang/10);// phan chuc cua thang
view[4]=(unsigned char)(thang%10);// phan donvi cua thang
view[5]=(unsigned char)(nam/10);// phan chuc cua nam
view[6]=(unsigned char)(nam%10);// phan donvi cua nam
view[7]=(unsigned char)(gio/10);// phan chuc cua gio
view[8]=(unsigned char)(gio%10);// phan donvi cua gio
view[9]=(unsigned char)(phut/10);// phan chuc cua phut
view[10]=(unsigned char)(phut%10);// phan donvi cua phut
view[12]=(unsigned char)(giay/10);//phan donvi cua giay
view[13]=(unsigned char)(giay%10);//phan don chuc cua giay
view[11]=view[0];
for(x=0;x<15;x++){P2=(((x+1)&0x0F)|(view[x]<<4));delay(2);}
if(gio<12)AMPM=1;else if(gio>=12) AMPM=0;
while((gio==6)&(phut==45)&(giay<=10))baochuong();//bao chuong get up
while((gio==1)&(phut==15)&(giay<=10))baochuong();//bao chuong get up
if((ngay>=15)&(thang>=10))donghe=1;else donghe=0;
}
////////////////THU TUC PHUC VU NGAT RTC/////////////
void intr0() interrupt 0//chuong trinh con phuc vu ngat
{
EA=0;//cam tat ca cac ngat
h=xreg[0x0C];// REG C=0;
while(xreg[0x0A]&0x80);//cho qua giai doan tu cap nhap
giay=xreg[0];// lay giay
phut=xreg[2];// lay phut
gio=xreg[4];// lay gio
thu=xreg[6];// lay thu trong tuan
ngay=xreg[7];// lay ngay trong thang
thang=xreg[8];// lay thang trong nam
nam=xreg[9];// lay nam
EA=1;//cho phep ngat tro lai
}
/////////////THU TUC PHUC VU NGAT PHIM//////////
void intr1() interrupt 2//chuong trinh con phuc vu ngat
{
}
//////////////////////////////////////////////////////
///////////////CHUONG TRINH CHINH//////////////////////////
void main()
{
//khoitao();//goi ham khoi tao 1 lan;
////////////khoi tao ngat////////////
chuong=0;//cam chuong
delay2(30);
role=0;//cam role
loa=1;//cam loa
CS=0;//bat RTC
EX0=1;// phep ngat ngoai 0 cua RTC
IT0=1;// ngat theo suon
EX1=1;// phep ngat ngoai 0 cua RTC
IT1=1;// ngat theo suon
///////// khoi tao RTC lien tuc
xreg[0xB]&=0x8F;// cam ngat chu ky va ngat cap nhap
edit_off//set=0;
UIE_on;//bat cho phep ngat dinh ky
sqw_on
/////////// CONG VIEC CHINH CUA MAIN BAT DAU
EA=1;// cho phep ngat toan cuc
intr0_on// ngat RTC
while(1)displayLed();
}
Comment