亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
我懸賞一百黑幣,請求幫我解答這個疑惑,關于ds1302的程序的一點問題
[打印本頁]
作者:
134849694164151
時間:
2018-5-25 22:01
標題:
我懸賞一百黑幣,請求幫我解答這個疑惑,關于ds1302的程序的一點問題
麻煩幫我看看,最后我用串口打印出來的數值始終不對,最后打印出來的是00 08 F8 08 00 F8跟我設置好的時間不一樣呀
#include "reg51.h"
sbit RST= P3^5;
sbit SCLK= P3^6;
sbit DPIO= P3^4;
unsigned char code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
unsigned char code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
unsigned char time[7];
void delay()
{
unsigned char i;
unsigned char j;
for(i=0;i<6;i++)
for(j=0;j<6;j++);
}
void sendbyte(unsigned char addr ,unsigned char dat)
{
unsigned char i;
RST =0;
delay();
SCLK =0;
delay() ;
RST =1;
delay();
for(i=0;i<8;i++)
{
DPIO=addr&0x01;
addr>>=1;
SCLK =1;
delay();
SCLK =0;
delay();
}
for(i=0;i<8;i++)
{
DPIO=dat&0x01;
dat>>=1;
delay();
SCLK =1;
delay();
delay();
SCLK =0;
delay();
}
RST=0;
delay();
SCLK =0;
delay();
}
unsigned char read(unsigned char addr)
{
unsigned char i;
unsigned char dat;
unsigned char tmp;
RST =0;
delay();
SCLK =0;
RST =1;
delay();
for(i=0;i<8;i++)
{
DPIO=addr&0x01;
addr>>=1;
SCLK =1;
delay();
SCLK =0;
delay();
}
for(i=0;i<8;i++)
{
DPIO=tmp;
dat|=tmp<<7;
SCLK =1;
delay();
SCLK =0;
delay();
}
RST=0;
delay();
SCLK =0;
delay();
DPIO = 0;
delay();
return dat;
}
void read_reg()
{
unsigned char i;
for(i=0;i<8;i++)
{
time[i]=read( READ_RTC_ADDR[i]);
}
}
void write()
{
unsigned char i;
sendbyte(0x8e,0x00);
time[0]=0x30;
time[1]=0x35;
time[2]=0x20;
time[3]=0x25;
time[4]=0x05;
time[5]=0x05;
time[6]=0x18;
for(i=0;i<7;i++)
{
sendbyte(WRITE_RTC_ADDR[i],time[i]);
delay();
}
sendbyte(0x8E, 0x80);
}
void uart_init(void)
{
// 波特率9600
SCON = 0x50; // 串口工作在模式1(8位串口)、允許接收
PCON = 0x00; // 波特率不加倍
// 通信波特率相關的設置
TMOD = 0x20; // 設置T1為模式2
TH1 = 253;
TL1 = 253; // 8位自動重裝,意思就是TH1用完了之后下一個周期TL1會
// 自動重裝到TH1去
TR1 = 1; // 開啟T1讓它開始工作
}
// 通過串口發送1個字節出去
void uart_send_byte(unsigned char c)
{
// 第1步,發送一個字節
SBUF = c;
// 第2步,先確認串口發送部分沒有在忙
while (!TI);
// 第3步,軟件復位TI標志位
TI = 0;
}
void main()
{
unsigned char k;
uart_init();
write();
while(1)
{
read_reg();
for(k=0;k<7;k++)
{
uart_send_byte(time[k]);
}
delay();
}
}
作者:
angmall
時間:
2018-5-26 10:11
DS1302 須要BCD處理
#include "reg51.h"
#define ds1302_sec_add 0x80 //秒數據地址
#define ds1302_min_add 0x82 //分數據地址
#define ds1302_hr_add 0x84 //時數據地址
#define ds1302_date_add 0x86 //日數據地址
#define ds1302_month_add 0x88 //月數據地址
#define ds1302_day_add 0x8a //星期數據地址
#define ds1302_year_add 0x8c //年數據地址
#define ds1302_control_add 0x8e //控制數據地址
#define ds1302_charger_add 0x90
#define ds1302_clkburst_add 0xbe
sbit RST= P3^5;
sbit SCLK= P3^6;
sbit DPIO= P3^4;
unsigned char code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
unsigned char code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
unsigned char time[7];
void delay()
{
unsigned char i;
unsigned char j;
for(i=0;i<6;i++)
for(j=0;j<6;j++);
}
void sendbyte(unsigned char addr ,unsigned char dat)
{
unsigned char i;
RST =0;
delay();
SCLK =0;
delay() ;
RST =1;
delay();
for(i=0;i<8;i++)
{
DPIO=addr&0x01;
addr>>=1;
SCLK =1;
delay();
SCLK =0;
delay();
}
for(i=0;i<8;i++)
{
DPIO=dat&0x01;
dat>>=1;
delay();
SCLK =1;
delay();
delay();
SCLK =0;
delay();
}
RST=0;
delay();
SCLK =0;
delay();
}
unsigned char read(unsigned char addr)
{
unsigned char i;
unsigned char dat;
unsigned char tmp;
RST =0;
delay();
SCLK =0;
RST =1;
delay();
for(i=0;i<8;i++)
{
DPIO=addr&0x01;
addr>>=1;
SCLK =1;
delay();
SCLK =0;
delay();
}
for(i=0;i<8;i++)
{
DPIO=tmp;
dat|=tmp<<7;
SCLK =1;
delay();
SCLK =0;
delay();
}
RST=0;
delay();
SCLK =0;
delay();
DPIO = 0;
delay();
return dat;
}
void read_reg()
{
unsigned char i, tmp;
unsigned char time_buf[8] ;
for(i=0;i<8;i++)
{
time_buf[i]=read( READ_RTC_ADDR[i]);
}
for(i=0;i<8;i++)
{ //BCD處理
tmp=time_buf[i]/16;
time[i]=time_buf[i]%16;
time[i]=time[i]+tmp*10;
}
}
void write()
{
unsigned char i, tmp;
unsigned char time_buf[8] ;
sendbyte(0x8e,0x00);
time[0]=0x30;
time[1]=0x35;
time[2]=0x20;
time[3]=0x25;
time[4]=0x05;
time[5]=0x05;
time[6]=0x18;
for(i=0;i<7;i++)
{ //DS1302 須要BCD處理
tmp=time[i]/10;
time_buf[i]=time[i]%10;
time_buf[i]=time_buf[i]+tmp*16;
}
for(i=0;i<7;i++)
{
sendbyte(WRITE_RTC_ADDR[i],time_buf[i]);
delay();
}
sendbyte(0x8E, 0x80);
}
void uart_init(void)
{
// 波特率9600
SCON = 0x50; // 串口工作在模式1(8位串口)、允許接收
PCON = 0x00; // 波特率不加倍
// 通信波特率相關的設置
TMOD = 0x20; // 設置T1為模式2
TH1 = 253;
TL1 = 253; // 8位自動重裝,意思就是TH1用完了之后下一個周期TL1會
// 自動重裝到TH1去
TR1 = 1; // 開啟T1讓它開始工作
}
// 通過串口發送1個字節出去
void uart_send_byte(unsigned char c)
{
// 第1步,發送一個字節
SBUF = c;
// 第2步,先確認串口發送部分沒有在忙
while (!TI);
// 第3步,軟件復位TI標志位
TI = 0;
}
void main()
{
unsigned char k;
uart_init();
write();
while(1)
{
read_reg();
for(k=0;k<7;k++)
{
uart_send_byte(time[k]);
}
delay();
}
}
復制代碼
作者:
134849694164151
時間:
2018-5-26 21:14
angmall 發表于 2018-5-26 10:11
DS1302 須要BCD處理
打印出來和原來一樣呀,什么情況?
作者:
angmall
時間:
2018-5-26 22:21
請檢查你的DS1302時鐘模塊和單片機怎樣接線
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1