|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe |
請教關于DS1302的問題 |
| 作者:hubo450 欄目:單片機 |
小弟根據網上找到的程序,結合讀DS1302的datasheet,寫了程序,但是設置日期和時間后,讀出來都是ff或者fe等,怎么改也沒有成功。有兩個問題請教高手: 1、使用示波器量了DS1302的晶振腳,沒有振蕩波形,我搞不清楚是否一加電,32768HZ的晶體就開始振蕩? 2、我讀到的資料中是DS1302應該在上升沿觸發(fā),把數據總線上的數據寫進去,讀也是這樣,我的程序如下: ;//////////////////////////////////////////// ; DS1302的控制程序 ;///////////////////////////////////////////// ; DS1302的引腳定義 ;//////////////////////////////////////////// rtc_rst equ P2.7 rtc_clk equ P2.0 rtc_io equ P2.1 ;//////////////////////////////////////////// ; DS1302用到的寄存器定義 ;/////////////////////////////////////////// address equ 60h tmdata equ 61h year equ 62h month equ 63h day equ 64h hour equ 65h min equ 66h sec equ 67h year1 equ 68h month1 equ 69h day1 equ 6ah hour1 equ 6bh min1 equ 6ch sec1 equ 6dh org 0000H ljmp main org 0100h main: mov year, #06h mov month,#03h mov day, #13h mov hour, #00h mov min, #10h mov sec, #00h lcall ds_op nop lcall ds_setday nop nop lcall ds_settm nop lcall ds_rdday nop nop lcall ds_rdtm nop ;/////////////////////////////////////////////// ; DS1302讀日期 ;/////////////////////////////////////////////// ds_rdday: lcall ds_op mov address,#8bh lcall ds_rddata mov day1,r7;讀日期 mov address,#89h lcall ds_rddata mov month1,r7;讀月份 mov address,#8dh lcall ds_rddata mov year1,r7;讀年份 ret ;/////////////////////////////////////////////// ; DS1302讀時間 ;/////////////////////////////////////////////// ds_rdtm: lcall ds_op mov address,#81h lcall ds_rddata mov sec1,r7 ;讀秒 mov address,#83h lcall ds_rddata mov min1,r7 ;讀分 mov address,#85h lcall ds_rddata mov hour1,r7 ;讀小時 ret ;/////////////////////////////////////////////// ; DS1302設置日期 ;////////////////////////////////////////////// ds_setday: lcall ds_op mov address,#8ah mov tmdata,day lcall ds_wrdata ;寫日期 mov address,#88h mov tmdata,month lcall ds_wrdata;寫月份 mov address,#8ch mov tmdata,year lcall ds_wrdata;寫年 ret ;/////////////////////////////////////////////// ; DS1302設置時間 ;////////////////////////////////////////////// ds_settm: lcall ds_op;打開寫保護 mov address,#80h mov tmdata,sec lcall ds_wrdata;寫秒 mov address,#82h mov tmdata,min lcall ds_wrdata;寫分 mov address,#84h mov tmdata,hour &nbs |
| 2樓: | >>參與討論 |
| 作者: leituoxin 于 2006/4/14 9:18:00 發(fā)布:
你的程序我沒看 你的程序我沒看,如果是沒有振蕩的話,你可能振蕩的控制字沒有寫,DS1302有停振的控制字 |
|
| 3樓: | >>參與討論 |
| 作者: sixpower 于 2006/4/14 11:46:00 發(fā)布:
我能通過的程序 void rd_DS1302(void) { byte i; byte t2; byte ddd; IO=1; RST=0; CLK=0; t2=10; while(t2){t2--;} RST=1; t2=10; for(i=0;i<8;i++) { CLK=0; ddd=ds_add; ddd=ddd & 0x01; if(ddd==0x00) IO=0; else IO=1; t2=10; while(t2){t2--;} CLK=1; ds_add=ds_add>>1; t2=10; while(t2){t2--;} } IO=1; ds_data=0; for(i=0;i<8;i++) { CLK=0; t2=5; while(t2){t2--;} ds_data=ds_data>>1; if(IO==1) ds_data=ds_data | 0x80; CLK=1; t2=5; while(t2){t2--;} ; } RST=0; } void wr_DS1302(void) { byte i; byte t2; byte ddd; IO=1; RST=0; CLK=0; t2=3; while(t2){t2--;} RST=1; t2=10; for(i=0;i<8;i++) { CLK=0; ddd=ds_add; ddd=ddd & 0x01; if(ddd==0x00) IO=0; else IO=1; t2=3; while(t2){t2--;} CLK=1; ds_add=ds_add>>1; t2=3; while(t2){t2--;} } for(i=0;i<8;i++) { CLK=0; ddd=ds_data; ddd=ddd & 0x01; if(ddd==0x00) IO=0; else IO=1; t2=3; while(t2){t2--;} CLK=1; ds_data=ds_data>>1; t2=10; while(t2){t2--;} } RST=0; } ds_add=0x81; // DS1302讀數據 rd_DS1302(); ds_add=0x80; //DS1302寫數據 ds_data=mem_data; wr_DS1302(); |
|
| 4樓: | >>參與討論 |
| 作者: hubo450 于 2006/4/14 18:28:00 發(fā)布:
振蕩的命令字是把秒寄存器清0嗎? |
|
| 5樓: | >>參與討論 |
| 作者: leituoxin 于 2006/4/17 14:52:00 發(fā)布:
振蕩的命令字是把秒寄存器清0嗎? 是的。 |
|
| 6樓: | >>參與討論 |
| 作者: winhiwang 于 2006/4/17 18:25:00 發(fā)布:
上電后32768是不振的,要軟件啟動,我之前發(fā)過帖子可查找一下 |
|
| 7樓: | >>參與討論 |
| 作者: sdyxm21 于 2006/4/22 23:43:00 發(fā)布:
[ o |
|
|
|
| 免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |