Ds1302控制字在C语言中怎么生成的

C语言 码拜 9年前 (2016-05-01) 888次浏览
        这是时钟芯片Ds1302程序,在下列程序中控制字是怎么生成的?控制字不是可以设定的吗?为什么在程序中看不到呢?形参addr和dat 在何处给赋值了呢?该程序在开发板上是可用的。
#include”ds1302.h”
//–DS1302Ð写入和读取的地址命令–//
Uchar code READ_RTC_ADDR[7] = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};   // 读取
uchar code WRITE_RTC_ADDR[7] = {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};   // 写入
//–发送秒,分,时,日,星期,月,年BCD码–//
uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};  //
/***发送(地址、数据)***/
void Ds1302Write(uchar addr, uchar dat)
{
uchar n;
RST = 0;   // 将CE端置低
_nop_();
SCLK = 0;  // 将SCLK端置高
_nop_();
RST = 1;   // 将CE端置高
_nop_();
for (n=0; n<8; n++)  // 8次循环
{
SCLK = 0;     // 清零时钟总线
_nop_();
DSIO = addr & 0x01;  // 每次传输低字节
addr >>= 1;          //· 右循环1位
SCLK = 1;           // 置位时钟总线
_nop_();
}
//– 发送数据–//
for (n=0; n<8; n++)      // 8次循环
{
SCLK = 0;          //
_nop_();
DSIO = dat & 0x01;  // 每次传输低字节
dat >>= 1;          //· 右循环1位
SCLK = 1;          // 置位时钟总线
_nop_();
}
RST = 0;               //
_nop_();
}
/***读取地址和数据***/
uchar Ds1302Read(uchar addr)
{
uchar n,dat,dat1;
RST = 0;
_nop_();
SCLK = 0;         // 清零时钟总线
_nop_();
RST = 1;          //
_nop_();
for (n=0; n<8; n++)  // 8次循环
{
SCLK = 0;      // 清零时钟总线
_nop_();
DSIO = addr & 0x01;
addr >>= 1;      //·右循环1位
SCLK = 1;       // 置位时钟总线
_nop_();
}

for (n=0; n<8; n++)  // 8次循环
{
SCLK = 0;          // 清零时钟总线
_nop_();
dat1 = DSIO;
dat = (dat>>1) | (dat1<<7);
SCLK = 1;
_nop_();
}
RST = 0;
_nop_();
SCLK = 1;       // 置位时钟总线
_nop_();
DSIO = 0;
_nop_();
DSIO = 1;
_nop_();
return dat;
}
/***初始化Ds1302***/
void Ds1302Init()
{
uchar n;
Ds1302Write(0x8E,0X00);   // 关闭写保护功能
for (n=0; n<7; n++)          // 写入秒、分、时、日、星期、月、年
{
Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);
}
Ds1302Write(0x8E,0x80);   // 打开写保护功能
}
/***  ***/
void Ds1302ReadTime()
{
uchar n;
for (n=0; n<7; n++)    // 读取7个时钟信号
{
TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
}
}

解决方案

10

函数在哪里调用 addr就在哪里给了值

30

void Ds1302Write(uchar addr, uchar dat) //函数声明
Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);//函数调用
addr<===> WRITE_RTC_ADDR[n]
dat<===>TIME[n]
函数调用时候,会用实参表达式初始化形参变量

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Ds1302控制字在C语言中怎么生成的
喜欢 (0)
[1034331897@qq.com]
分享 (0)