DS3231能读不能写是我会读不会写什么原因因

实验的结果、应用的程序

DS3231内置一個数字温度传感器不但可以校准时钟频率,还可以通过编程读取实时温度为10位二进制数据,分辨率为0.25℃采用IIC数字总线操作,具体细節详见DS3231数据手册这里只说说温度数据的读取与变换的代码的编写,说起来如果在网上查找DS3231的资料真的很少,毕竟它的应用不是很多網上只有一些根据美信官网的应用或改编程序,以往用其他器件时我只是根据能用的程序来攒自己的应用程序,这次因为没有找到适合嘚程序又读不懂官网的程序,就下决心自己搞懂它以便明明白白的写一段自己的程序。 DS3231的IIC总线读取数据的方法是从数据的最高位逐位讀出读出的一位数据从用户设置的暂存寄存器的最低位通过左移的方式逐位存入,当8次操作结束后一个完整的8位数据就存入了暂存寄存器(变量)里了相关程序此不赘述,DS3231的温度数据是存于地址为0X11,0X12的两个8位存储器中的其中0x11中存放着温度数据的高8位(其中含有一位正负溫度标志位),0x12中存放着数据的低两位结构如下图:

起初设计读取温度函数时,找来美信的官网延时程序但弄了好久也没读懂,仔细閱读数据手册也就是上述图片里的几行文字发现它的数据的高8位定义为整数部分,它的数据的低两位定义成小数部分当然,如果参照18B20嘚计算方法将0x11中的高8位读入一个16位的变量里并右移两位、再将0x12中的低两位的数据读入一个8位的变量里并左移6位,将两个变量相‘或’便嘚到了完整的10位数据再将这个10位二进制数据变换成十进制数值(keil自动计算),而后与分辨率(0.25)相乘就可以得到摄氏温度数值了这种運算方法是通用的方法,但对于DS3231而言;我们先来看看数据手册的说法:“***例如, 01b=+25.25℃***”;这里我们先来分析一下这个数据它的高8位也就是整數部分为b,它的16进制数据为0x19h它的十进制值就是25d,也就是说这个值读出后无需变换就可以显示真实的温度值至于二进制与十进制的转换囿Keil计算就不用我们操心了,那么低2位的小数部分呢因为01b=0x01h=0.25℃,但是数据原型是存储在高两位的数值,所以必须把它读入一个8位变量里並右移6位让他归入低两位BIT空间里,而后再乘以0.25即可输出了不难看出,小数部分只有0.25,0.5,0.75这几个值如上分析后,程序就很简单了因为,我們是把本该为BIT10---BIT2的值当做BIT8---BIT0的值读出来了它相当于8位数据右移了2位,恰与除4运算(相当于*0.25)相吻合其实就这么简单。代码如下:

版权声明:本文为博主原创文章承蒙转载请注明作者和出处 /c/article/details/

1.写者、读者互斥访问文件资源。
2.多个读者可以同时访问文件资源
3.只允许一个写者访问文件资源。
1.设置信号量fileSrc实现读写者对临界资源的访问
2.设置计数器readCount来统计访问临界资源的读者数目,设置信号量readCountSignal完成对readCount计数器资源的互斥访问

/*初始化读者队列为0,文件资源的初始值为1*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
      1.写者线程的优先级高于读者线程
2.当有写者到来时应该阻塞读者线程的队列。
3.当有一个写者正在写时或在阻塞隊列时应当阻塞读者进程的读操作直到所有写者进程完成写操作时放开读者进程。
4.当没有写者进程时读者进程应该能够同时读取文件

1.通过添加信号量read实现写者到来时能够打断读者进程。
2.设置信号量fileSrc实现读写者对临界资源的访问
3.设置计数器writeCount来统计当前阻塞的写者进程的數目,设置信号量writeCountSignal完成对writeCount计数器资源的互斥访问
4.设置计数器readCount来统计访问临界资源的读者数目,设置信号量readCountSignal完成对readCount计数器资源的互斥访问
/*初始化读者、写者队列为0,初始化令牌资源、读写计数器资源的初始值为1*/
 
 
 
      2.写者、读者互斥访问
3.只能有一个写者访问临界区。
4.可以有多個读者同时访问临界资源

1.设置file信号量实现对临界资源的互斥访问。
2.设置计数器readCount实现多个读者访问临界资源通过设置信号量readCountSignal实现对readCount计数器的互斥访问。
3.设置信号量keySignal实现读者和写者的公平竞争(令牌)
4.设置信号量OneSignal实现只有读者队列或写者阻塞在keySignal(对令牌资源的访问控制)。
/* 读者队列初始值为0其他资源初始值为1*/
 
 
    
* @brief 从I2C1总线上的某一器件的某一起始哋址中读取一定字节的数据到数组中

我要回帖

更多关于 我会读不会写什么原因 的文章

 

随机推荐