久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1736|回復: 1
收起左側(cè)

單片機DS3231程序 12M時鐘,每次讀出來的數(shù)據(jù)都不對

[復制鏈接]
ID:594395 發(fā)表于 2019-10-22 14:39 | 顯示全部樓層 |閱讀模式
12M時鐘,不過每次讀出來的數(shù)據(jù)都不對 ,希望有人指導下小弟

#define _MAIN_C
#include "all.h"
#include "Lcd1602.h"
#include "DS3232.h"
#include "main.h"

bit flag1s = 0;
unsigned char T0RH = 0;
unsigned char T0RL = 0;

void main()
{
        InitLcd1602();
        ConfigTimer0(1);
        
        while(!flag1s);
        flag1s = 0;
        DS3232_Write_Reg(0x00,0x00);
        while(1)
        {
                if(flag1s)
                {
                        flag1s = 0;
                        Refresh_Time_Show();
                }
        }
}
void ConfigTimer0(unsigned int ms)
{
        unsigned long temp = 0;
        
        temp = 11059200 / 12;
        temp = (temp * ms) / 1000;
        temp = 65536 - temp;
        T0RH = (unsigned char)(temp >> 8);
        T0RL = temp;
        TMOD = (TMOD & 0xF0) | 0x01;
        ET0 = 1;
        TR0 = 1;
        EA = 1;
}
void Refresh_Time_Show()
{
        uint8 time;
        uint8 str[5];
        
        time = DS3231_Read_Reg(0x00);
        str[0] = (time >> 4) + '0';
        str[1] = (time & 0x0F) + '0';
        str[2] = '\0';
        LcdShowStr(0,0,str);        
}
void Timer0Interrupt() interrupt 1
{
        static unsigned int timer1s = 0;
        
        TH0 = T0RH;
        TL0 = T0RL;
        
        timer1s++;
        if(timer1s >= 1000)
        {
                timer1s = 0;
                flag1s = 1;
        }        
}
//---------------------------------------------------------------------------------------------------------------------------------------------------
#define _LCD1602_C
#include "all.h"
#include "Lcd1602.h"
               
void LcdReady()
{
        unsigned char sta;
        
        LCD1602_DB = 0xFF;
        LCD1602_RS = 0;
        LCD1602_RW = 1;
        do
        {
                LCD1602_E = 1;
                sta = LCD1602_DB;
                LCD1602_E = 0;
        } while(sta & 0x80);
}
/* 寫命令 */
void LcdWriteCmd(unsigned char cmd)
{
        LcdReady();
        LCD1602_RS = 0;
        LCD1602_RW = 0;
        LCD1602_DB = cmd;
        LCD1602_E = 1;
        LCD1602_E = 0;
}
/* 寫數(shù)據(jù) */
void LcdWriteData(unsigned char dat)
{
        LcdReady();
        LCD1602_RS = 1;
        LCD1602_RW = 0;
        LCD1602_DB = dat;
        LCD1602_E = 1;
        LCD1602_E = 0;
}
/* 設置RAM起始地址,光標位置 */
void LcdSetAddr(unsigned char x,unsigned char y)
{
        unsigned char addr;
        
        if(y == 0)
                addr = 0x00 + x;
        else
                addr = 0x40 + x;
        LcdWriteCmd(addr | 0x80);
}
/* 在液晶顯示字符串,(x,y)起始坐標,str字符串指針 */
void LcdShowStr(unsigned char x,unsigned y,unsigned char * str)
{
        LcdSetAddr(x,y);
        while(*str != '\0')
        {
                LcdWriteData(*str++);
        }
}

/* 初始化液晶 */
void InitLcd1602()
{
        LcdWriteCmd(0x38); // 16*2顯示,5*7點陣,8位數(shù)據(jù)接口
        LcdWriteCmd(0x0C); // 顯示器開,光標關閉
        LcdWriteCmd(0x06); // 文字不動,地址自動加1
        LcdWriteCmd(0x01); // 清屏
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#define _IIC_C
#include "all.h"
#include "IIC.h"
void IIC_Delay()
{
        _nop_();_nop_();_nop_();_nop_();_nop_();
}
void IIC_Start()
{
        IIC_SCL = 1;
        IIC_SDA = 1;
        IIC_Delay();
        IIC_SDA = 0;
        IIC_Delay();
        IIC_SCL = 0;
}
void IIC_Stop()
{
        IIC_SCL = 0;
        IIC_SDA = 0;
        IIC_Delay();
        IIC_SCL = 1;
        IIC_Delay();
        IIC_SDA = 1;
        IIC_Delay();
}
void IIC_Write_Byte(uint8 dat)
{
        uint8 mask;
        
        for(mask = 0x80;mask != 0;mask >>= 1)
        {
                if((mask & dat) != 0)
                        IIC_SDA = 1;
                else
                        IIC_SDA = 0;
                IIC_Delay();
                IIC_SCL = 1;
                IIC_Delay();
                IIC_SCL = 0;
        }
        IIC_SDA = 1;
        IIC_Delay();
}
bit IIC_Read_Ack()
{
        bit ack = 1;
        uint8 i = 0;
        
        IIC_SCL = 1;
        IIC_Delay();
        while((ack) && (i < 4))
        {
                ack = IIC_SDA;
                i++;
        }
        IIC_SCL = 0;
        
        return ack;
}
uint8 IIC_Read_Byte()
{
        uint8 mask;
        uint8 dat;
        
        IIC_SDA = 1;
        for(mask != 0x80;mask != 0;mask >>= 1)
        {
                IIC_Delay();
                IIC_SCL = 1;
                if(IIC_SDA != 0)
                        dat |= mask;
                else
                        dat &= ~mask;
                IIC_Delay();
                IIC_SCL = 0;
        }
        
        return dat;
}
/* 單片機發(fā)送應答信號 ACK = 0; NACK = 1 */
void IIC_Write_Ack(bit ack)
{
        IIC_SDA = ack;
        IIC_Delay();
        IIC_SCL = 1;
        IIC_Delay();
        IIC_SCL = 0;
        IIC_Delay();
        IIC_SDA = 1; // 釋放IIC_SDA
        IIC_Delay();
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------
#define _DS3232_C
#include "all.h"
#include "IIC.h"
#include "DS3232.h"

void DS3232_Write_Reg(uint8 addr,uint8 dat)
{
        IIC_Start();
        IIC_Write_Byte(0x68 << 1);
        IIC_Read_Ack();
        IIC_Write_Byte(addr);
        IIC_Read_Ack();
        IIC_Write_Byte(dat);
        IIC_Read_Ack();
        IIC_Stop();
}
uint8 DS3231_Read_Reg(uint8 addr)
{
        uint8 dat;
        
        IIC_Start();
        IIC_Write_Byte(0x68 << 1);
        IIC_Read_Ack();
        IIC_Write_Byte(addr);
        IIC_Read_Ack();
        
        IIC_Start();
        IIC_Write_Byte((0x68 << 1) | 0x01);
        IIC_Read_Ack();
        dat = IIC_Read_Byte();
        IIC_Write_Ack(1);
        IIC_Stop();
        
        return dat;
}



回復

使用道具 舉報

ID:235200 發(fā)表于 2019-10-23 00:10 | 顯示全部樓層
檢查程序是否滿足DS3231的時序
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲a在线观看 | 精品在线一区二区三区 | 日本啊v在线 | www一级片 | 99精品在线免费观看 | 久久美国| 国产欧美精品一区二区色综合 | 亚洲精品字幕 | 亚洲黄色一级 | 一级毛片免费看 | 黄色大片免费观看 | 日批日韩在线观看 | 亚洲综合国产精品 | 亚洲精品v| 亚洲欧美国产精品久久 | 精品一区二区av | 亚洲一区亚洲二区 | 1区2区视频 | 久久机热| 亚洲精品国产一区 | 国产精品久久亚洲 | 精品久久久久久久 | 亚洲一区二区av | 欧美精品久久久 | 天天干天天操天天看 | 欧美日韩国产在线观看 | 国产h视频 | 国产乱码精品一区二区三区忘忧草 | 中文字幕免费视频 | aaaaaaa片毛片免费观看 | 国产精品一区二区在线观看 | 精品国产一区二区三区观看不卡 | 亚洲一区二区三区在线免费观看 | 色视频网站在线观看 | 农村妇女毛片精品久久久 | 成人性生交大片免费看r链接 | 欧美一二三区 | 91精品国产91久久久久久吃药 | 毛片一区二区三区 | www.操.com | 久久久噜噜噜久久中文字幕色伊伊 |