Em đang làm đồ án môn học 1, có tham khảo code trên mạng, có đoạn code này các anh có biết thì giải thích dùm em.cho em hỏi hàm start, stop để làm gì (sda,scl,slc các chân DS1307 và dòng Data=Data|sda có tác dụng làm gì), câu lệnh màu đỏ có sai ko, tại sao lại có dấu ? nữa,học vixuli rồi mà ko thấy cái lệnh nào như vậy.
Code:
/**********************************************************************************/
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
// CAC CHUONG TRINH CON GIAO TIEP VOI RTC //
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
// ca 2 dk start va stop dc tao ra boi thiet bi chu
void start_rtc(void) //dk start: 1 su cdoi tthai tu cao xuong thap tren duong sda trong khi
{ //duong scl dang o muc cao
scl=1;
sda=1;
_nop_();
_nop_();
sda=0;
scl=0;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
void stop_rtc(void) //dk stop: 1 su cdoi trang thai tu muc thap len cao tren duong sda trong khi duong
{ // slc dang o muc cao
sda=0;
scl=1;
_nop_();
_nop_();
sda=1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
void gui_rtc(unsigned char x)
{
unsigned char i;
for(i=0;i<8;i++)
{
sda=(x&0x80)? 1:0; //dua bit du lieu ra chan SDA
scl=1;
_nop_();
_nop_();
scl=0;
x<<=1; //bit co trong so lon hon dc truyen truoc
}
scl=1; //nhan bit ACK tu SLAVER bao hieu ket thuc mot byte du lieu
_nop_();
_nop_();
scl=0;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
unsigned char nhan_rtc(void)
{
unsigned char Data,i;
for(i=0;i<8;i++) // nhan vao 8 bit
{
scl=1;
Data<<=1;
Data=Data|sda;
scl=0;
}
sda=1; // trong qua trinh doc mot chuoi byte tu slaver master gui bit ACK=> sda=1
scl=1; //master nhan/gui bit du lieu(sda) khi scl o muc cao
_nop_();
scl=0;
_nop_();//du lieu(sda) thay doi khi scl muc thap/
return Data;//tra gia tri cho ham
}