登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

DS1302在Protes下的仿真

作者:zzz正 栏目:单片机
DS1302在Protes下的仿真
/************************************************/
/*Project:控制课程设计                                                       */
/*File NAME:ds1302.C                                                           */
/*Language:Keil C51                                                             */
/*MCU:AT89C51                                                                */
/*Author:zzz                                                                        */
/*Date of Begin:2005.11.11                                                  */
/*Date of Acomplish:2005.11.15                                         */
/*Version:1.0                                                                        */
/***********************************************/
//这个程序是初始化1302后,再把当前的时间读出来,时间设定可通过数组set_time设定
//发现的技巧:1.初始化时要先把控制寄存器的最高位(wp)置0,才能允许读写1302,初始化后再置1,禁止读写,防止干扰
//            2.初始化退出前一定要把秒寄存器的最高位(ch)标志位置0,否则时钟不走
//            3.还有充电器也要注意设置(问题解决是.是掉电时脉冲干扰问题.用个100微法的电容滤波一下就好了)
         

#include<reg51.h>
#include<absacc.h>

#define uCHAR unsigned CHAR
#define uint  unsigned int

sbit  sda=P1^0;
sbit  sclk=P1^1;
sbit  reset=P1^2;

uCHAR code LED[11]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f};
uCHAR code set_time[8]={0x80,0x13,0x18,0x1,0x01,0x01,0x06};        
//2005年11月26日15:00:00,当前时间格式为: 秒 分 时 日 月 星期 年
uCHAR code select_led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uCHAR data time_buf[8];

#define A_8255     XBYTE[0x7CFF]
#define B_8255     XBYTE[0x7DFF]
#define C_8255     XBYTE[0x7EFF]
#define COM_8255   XBYTE[0x7FFF]

void init_mcu(void);
void DISPLAY(void);
void init_1302(void);
void read_time(void);
uCHAR RD_1302(uCHAR commond);
void WR_1302(uCHAR commond,uCHAR data1);

void main()
{  
   
  init_mcu();
  init_1302();
  while(1)
   {     
     read_time();
       DISPLAY();  
   }
}

/**********子程序开始****************/
/***********mcu初始化函数************/
void init_mcu(void)
{
    P1=0x00;
  COM_8255=0x89;
}

/********显示子程序,参数为扫描路数*******/
void DISPLAY(void)
{
    uCHAR i,temp1,temp2,temp3=0x00;
    uCHAR data time_current[7];
    
    for(i=4;i<7;i++)
    {
        temp1=time_buf[i];
        temp2=temp1&0x0f;
        time_current[temp3]=temp2;
        temp3++;
        temp1=temp1>>4;
        time_current[temp3]=temp1;
        temp3++;        
    }
    
    for(i=0;i<6;i++)
    {
      B_8255=select_led[i];
      temp1=time_current[i];
      temp1=LED[temp1];
      A_8255=temp1;
        
        temp2=250;
        temp3=250;
        while(--temp2);
        while(--temp3);        
     }                    
      
}

/*****1302初始化程序,设定时间为:*/
void init_1302(void)
{
    uCHAR temp1,temp2=0x80;
    WR_1302(0x8e,0x00);        //允许读写WP=0
    for(temp1=0;temp1<7;temp1++)
    {
        WR_1302(temp2,set_time[temp1]);
        temp2+=2;
  }
    WR_1302(0x90,0xa5);        //充电器设置,禁止充电
    WR_1302(0x80,0x00);
    WR_1302(0x8e,0x80);        //禁止写WP=1,write protect
    
}

/*********************读当前时间*************/
//当前时间格式为: 秒 分 时 日 月 星期 年
void read_time(void)
{
    uCHAR temp1,temp2,adder
2楼: >>参与讨论
zzz正
郁闷
上传图片没搞好,第一次搞这个

3楼: >>参与讨论
eldiy
收藏!
收藏了!

4楼: >>参与讨论
XZHENGGEN
不错,好贴,收藏一下!
 
5楼: >>参与讨论
zzz正
谢谢各位
 
6楼: >>参与讨论
zzz正
驻各位新年快乐
由于我所在的学校不是很好,才刚开始自学C51,不足之处请大家多多指教
同时我还在自学ucOSII,在别人的基础上调试好了移植程序,以后会陆续上传,希望大家多多支持我哦!!!!

7楼: >>参与讨论
zzz正
怎么没人顶啊
怎么没人顶啊怎么没人顶啊怎么没人顶啊

8楼: >>参与讨论
armko
好贴
我现在做的项目都用DS1302仿真,只是不知道如何用DS1302仿真掉电DS1302ram的保存。

9楼: >>参与讨论
huang4911
各器件的仿真参数怎么设置啊?
 
10楼: >>参与讨论
flydesk
这个什么软件???
这个什么软件???大家能告诉我吗??

11楼: >>参与讨论
zhaoyanwen
我也是刚学的我学的汇编语言的 厉害
 
12楼: >>参与讨论
flydesk
这个什么软件???
这个什么软件???

用什么仿真的???大家能告诉我吗??



13楼: >>参与讨论
dadodo
楼主都说了是protes啦
 
14楼: >>参与讨论
lpf336
好帖,顶
楼主的PROTEUS是哪个版本?

15楼: >>参与讨论
wanggaowei
顶 好贴
 
16楼: >>参与讨论
Bingoes
问一个问题
Proteus是个什么东西?
能仿真器件么?这么厉害?怎么用的?
哪位大侠能简单介绍一下么?

17楼: >>参与讨论
zzz正
谢谢大家的支持,希望大家新年快乐
我认为这个软件可以仿真DS1302掉电时DS1302ram的保存,这个软件可以查看1302中的RAM,你可以通过一个开关连接P1口,你的程序中通过判断开关的开闭来模拟掉电这种情况,由于我现在在东莞找工作,没有哪个软件,不然我可以仿真给你看。
同时我的软件版本是6.7的,用了几次,以前用的是6.1的。由于刚下载几天就要考试了,所以没有看的太多,只仿真了几个程序,是温度传感器DS1620,以后有时间在上传,希望大家多多支持我哦。不过我看过6.1版本的帮助文件,不懂的可以去那里看看,也可以去看看里面的例子哦。同时我推荐大家可以在里面仿真以下有关I2C、SPI、一总线的器件。我就仿真了I2C、SPI的EEPROM存储芯片,还有一总线芯片等等哦,自己找找吧,也可以去一些好的论坛看看别人是怎么搞的哦。再次的谢谢大家的支持!!!!

18楼: >>参与讨论
zhangdage
下面的地址有下载
http://blog.21ic.com/more.asp?NAME=zhangdage&id=8645

19楼: >>参与讨论
zzz正
大家好
不知大家找到工作没有?
我在东莞这边找工作找的好愚昧,大都不要应届生。
现在终于在上海广达电脑城找到工作了,大家有在广达LCD TV部门工作的吗?
给我点意见哦,在这里希望大家都找到一份理想的工作哦!!!


20楼: >>参与讨论
baipengwei
??、、、
这好像是一个叫蒋正平的网友做的吧。。。。

21楼: >>参与讨论
zzz正
绝对是我做的
 
22楼: >>参与讨论
zzz正
绝对是我做的
可能网上有很多写DS1302的程序,但是这个是我做的
其实程序并不难写,主要是我的可以仿真功能,我这里只是给大家一个启发,可以的话也用一下这个软件,可以验证我们写的程序.
还有大家千万不要来广达电脑公司,象我就被骗进来了,欲哭无泪啊.
来到这里不能搞开发.

参与讨论
昵称:
讨论内容:
 
 
相关帖子
请问51单片机的P0口用作数据和地址总线时要加上拉电阻吗??
请问有没有将声音大小转换成电信号的感应器?
请问单片机模拟电源和数字电源之间串电感起什么作用?
C51 编译后的文件如何使代码和数据分离?
技术问题SOS?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号