找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

DS1302程序不正常,求指导

[复制链接]
admin 发表于 2012-9-2 07:08:50 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
无论我读read数组的哪一个字节给P1,P1控制的8个发光二极管都不亮。为什么呢?我觉得对ds1302的手册很熟悉了,过了好几天了,写的程序却怎么也不正常,一个小芯片都能急煞人,不知道自己以后的路有多艰难,这严重打击了我自学单片机的信心。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dsclk=P0^0; //ds1302
时钟端
sbit dsrst=P0^1; //ds1302
复位端
sbit dsio=P0^2; //ds1302
数据端
uchar read[7]; //
存放读出的年、周、月、日、时、分、秒
uchar readadd[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81}; //
读时钟芯片时的地址
void delayus()
{ ; ;}
void delay(uint x)
{
uint y;
while(x--)
{
while(y--);
}
}
void dswritebyte(uchar w) //
ds1302一个字节
{
uchar i;
for(i=0;i<8;i++)
{
dsclk=0;
dsio=(bit)w&0x01;
w=w>>1;
dsclk=1;
}
}
uchar dsreadbyte() //
ds1302一个字节
{
uchar i,buff;
for(i=0;i<8;i++)
{
buff>>=1;
dsclk=0;
if(dsio)
buff=buff|0x80;
dsclk=1;
}
return buff;
}
void dswrite(uchar add,uchar dat) //
ds1302指定地址一个字节
{
dsrst=0;
dsclk=0;
dsrst=1;
delayus();
dswritebyte(add);
dswritebyte(dat);
dsrst=0;
dsclk=1;
dsio=1;
}
uchar dsread(uchar add) //
ds1302一个字节
{
uchar read;
dsrst=0;
dsclk=0;
dsrst=1;
delayus();
dswritebyte(add);
read=dsreadbyte();
dsrst=0;
dsclk=1;
dsio=1;
return read;
}
void set_rtc() //ds1302
初始化
{
dswrite(0x8e,0x00);
dswrite(0x8c,0x12);
dswrite(0x8a,0x06);
dswrite(0x88,0x03);
dswrite(0x86,0x18);
dswrite(0x84,0x18);
dswrite(0x82,0x30);
dswrite(0x80,0x20);
dswrite(0x8e,0x80);
}
void read_rtc() //
ds1302
{
uchar i;
for(i=0;i<8;i++)
{
read=dsread(readadd);
}
}
void main()
{
set_rtc();
read_rtc();
P1=read[0]; //P1
控制八个发光二极管
while(1);
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 05:32 , Processed in 0.057245 second(s), 13 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表