我在電子市場買了個DS12C887定時芯片,有18個引腳,和書上提供的24腳不同,但查到相關資料有DS1287是18腳的
此芯片到底是哪個?有哪位大哥告訴我嗎?
急
請問DS1287&DS12C887
全部回復(9)
正序查看
倒序查看
@hello_lzh
我做過這個片子的電路,程序也有,要得話聯系我啊
你好啊,你可不可以把你的電路與程序發給我.
請你幫我看看我下面這個電路有沒有問題.
500) {this.resized=true; this.width=500; this.alt='這是一張縮略圖,點擊可放大。\n按住CTRL,滾動鼠標滾輪可自由縮放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/28/1113465210.gif');}" onmousewheel="return imgzoom(this);">
我用如下程序去讀寫RTC芯片,芯片好象沒工作,測SQW端沒有方波輸出.
我的程序如下:
#include
#include
#define DSA PBYTE[0x0a]/*寄存器A*/
#define DSB PBYTE[0x0b]/*寄存器B*/
#define DSC PBYTE[0x0c]/*寄存器C*/
#define DSD PBYTE[0x0d]/*寄存器D*/
/*0,1,2,3,4,5,6,7,8,9,10*/
unsigned char code table[]={0x05,0xDD,0x46,0x54,0x9C,0x34,0x24,0x5D,0x04,0x14,0xff};
unsigned int new,old,temp,push;
unsigned int bdata rel;
unsigned char disbuffer[8]; /*顯示緩沖區*/
unsigned char pdata *addr=0x00;/*RTC地址*/
void delayms(void)
{
unsigned char i;
for(i=200;i>0;i--){}
}
void display() /*顯示與掃描按鍵函數*/
{
unsigned char *p=disbuffer;
unsigned char i;
unsigned char digit; /*位碼*/
bit press=0; /*是否有按鍵標志*/
/*掃描是否有按鍵*/
P3=P3|0x07; /*讀入P3口低3位前先向該3位寫1*/
P1=0xff; /*數碼管不顯示*/
P2=0x00; /*送全掃描字*/
if(P3&0x07==0x07) /*判斷是否有按鍵*/
press=1; /*有按鍵,則有按鍵標志置1*/
for(i=0,digit=0xfe;i<8;i++)/*顯示,并掃描按鍵*/
{
delayms();
P1=table[*p++]; /*送段碼*/
P2=digit; /*送位信號*/
digit=(digit<<1)|0x01;/*移位信號*/
if(press==1&&i<3)
{
new=(new<<4)|((~P3)&0x07);/*將掃描結果放入new低4位,并將前一行的掃描結果右移到new高4位*/
}
}
press=0;
if((temp=new^old)>0)
{
push=temp&new; /*新按下鍵值*/
rel=temp&old; /*釋放鍵值*/
old=new;
}
}
main()
{
unsigned char i,n;
T1=0; /*關指示燈*/
for(n=0;n<250;n++) /*延時*/
{
delayms();
}
for(n=0;n<250;n++) /*延時*/
{
delayms();
}
for(n=0;n<250;n++) /*延時*/
{
delayms();
}
DSA=0x25; /* 啟動RTC,SQW方波輸出頻率2.048KHz*/
ACC=DSC; /* 讀寄存器C,清中斷請求標志 */
DSB=0x0E; /* 方波輸出使能,時標格式二進制,24小時模式*/
/*向RTC中的RAM寫數據*/
*(addr+15)=20;
*(addr+16)=61;
*(addr+17)=34;
*(addr+18)=27;
for(n=0;n<250;n++) /*延時*/
{
delayms();
}
while(1)
{
/*取RTC中RAM的數據并送顯示緩沖區*/
disbuffer[0]=i=*(addr+15)/10;
disbuffer[1]=*(addr+15)-i*10;
disbuffer[2]=i=*(addr+16)/10;
disbuffer[3]=*(addr+16)-i*10;
disbuffer[4]=i=*(addr+17)/10;
disbuffer[5]=*(addr+17)-i*10;
disbuffer[6]=i=*(addr+18)/10;
disbuffer[7]=*(addr+18)-i*10;
display(); /*顯示*/
}
}
請你幫我看看我下面這個電路有沒有問題.

我用如下程序去讀寫RTC芯片,芯片好象沒工作,測SQW端沒有方波輸出.
我的程序如下:
#include
#include
#define DSA PBYTE[0x0a]/*寄存器A*/
#define DSB PBYTE[0x0b]/*寄存器B*/
#define DSC PBYTE[0x0c]/*寄存器C*/
#define DSD PBYTE[0x0d]/*寄存器D*/
/*0,1,2,3,4,5,6,7,8,9,10*/
unsigned char code table[]={0x05,0xDD,0x46,0x54,0x9C,0x34,0x24,0x5D,0x04,0x14,0xff};
unsigned int new,old,temp,push;
unsigned int bdata rel;
unsigned char disbuffer[8]; /*顯示緩沖區*/
unsigned char pdata *addr=0x00;/*RTC地址*/
void delayms(void)
{
unsigned char i;
for(i=200;i>0;i--){}
}
void display() /*顯示與掃描按鍵函數*/
{
unsigned char *p=disbuffer;
unsigned char i;
unsigned char digit; /*位碼*/
bit press=0; /*是否有按鍵標志*/
/*掃描是否有按鍵*/
P3=P3|0x07; /*讀入P3口低3位前先向該3位寫1*/
P1=0xff; /*數碼管不顯示*/
P2=0x00; /*送全掃描字*/
if(P3&0x07==0x07) /*判斷是否有按鍵*/
press=1; /*有按鍵,則有按鍵標志置1*/
for(i=0,digit=0xfe;i<8;i++)/*顯示,并掃描按鍵*/
{
delayms();
P1=table[*p++]; /*送段碼*/
P2=digit; /*送位信號*/
digit=(digit<<1)|0x01;/*移位信號*/
if(press==1&&i<3)
{
new=(new<<4)|((~P3)&0x07);/*將掃描結果放入new低4位,并將前一行的掃描結果右移到new高4位*/
}
}
press=0;
if((temp=new^old)>0)
{
push=temp&new; /*新按下鍵值*/
rel=temp&old; /*釋放鍵值*/
old=new;
}
}
main()
{
unsigned char i,n;
T1=0; /*關指示燈*/
for(n=0;n<250;n++) /*延時*/
{
delayms();
}
for(n=0;n<250;n++) /*延時*/
{
delayms();
}
for(n=0;n<250;n++) /*延時*/
{
delayms();
}
DSA=0x25; /* 啟動RTC,SQW方波輸出頻率2.048KHz*/
ACC=DSC; /* 讀寄存器C,清中斷請求標志 */
DSB=0x0E; /* 方波輸出使能,時標格式二進制,24小時模式*/
/*向RTC中的RAM寫數據*/
*(addr+15)=20;
*(addr+16)=61;
*(addr+17)=34;
*(addr+18)=27;
for(n=0;n<250;n++) /*延時*/
{
delayms();
}
while(1)
{
/*取RTC中RAM的數據并送顯示緩沖區*/
disbuffer[0]=i=*(addr+15)/10;
disbuffer[1]=*(addr+15)-i*10;
disbuffer[2]=i=*(addr+16)/10;
disbuffer[3]=*(addr+16)-i*10;
disbuffer[4]=i=*(addr+17)/10;
disbuffer[5]=*(addr+17)-i*10;
disbuffer[6]=i=*(addr+18)/10;
disbuffer[7]=*(addr+18)-i*10;
display(); /*顯示*/
}
}
0
回復