直接从CMOS读取系统时间

following code come from Linux Kernel 0.01

#define CMOS_READ(addr) ({ /
outb_p(0x80|addr,0x70); /
inb_p(0x71); /
})

#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10)

static void time_init(void)
{
    struct tm time;

    do {
        time.tm_sec = CMOS_READ(0);
        time.tm_min = CMOS_READ(2);
        time.tm_hour = CMOS_READ(4);
        time.tm_mday = CMOS_READ(7);
        time.tm_mon = CMOS_READ(8)-1;
        time.tm_year = CMOS_READ(9);
    } while (time.tm_sec != CMOS_READ(0));
    BCD_TO_BIN(time.tm_sec);
    BCD_TO_BIN(time.tm_min);
    BCD_TO_BIN(time.tm_hour);
    BCD_TO_BIN(time.tm_mday);
    BCD_TO_BIN(time.tm_mon);
    BCD_TO_BIN(time.tm_year);
    startup_time = kernel_mktime(&time);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
任务要求 1.4路模拟量输入,输入电压范围0~5V,分辨率8位,转换时间100us,具有显示(数 码管)测量结果(用10进制显示直流电压值或交流电压峰值)的功能; 2.1路模拟量输出,用来分别重现4路被采信号的波形(供示波器观测) 摘 要 本数据采集系统是基于单片机AT89C51来完成的,4路的模拟电压通过通用的8位A/D转 换器ADC0809转换成数字信号后,由单片机进行数据处理,并将处理后的数据送LED显示 器显示。再经过常用的8位D/A转换器DAC0832将数字数据转换成模拟量,供示波器观测。 一、系统的方案选择和论证 根据题目基本要求,可将其划为如下几个部分: 4路模拟信号A/D转换 单片机数据处理 LED显示测量结果 D/A转换模拟量输出 系统框图如图1所示: 图 1 单片机数据采集系统框图 1、4路模拟信号A/D转换 由于被测电压范围为0~5V,分辨率为8位,转换时间为100us,所以A/D转换部分,本 系统选择常用的8路8位逐次逼近式A/D转换器ADC0809。 ADC0809芯片有28条引脚,采用双列直插式封装。下面说明各引脚功能。 IN0~IN7:8路模拟量输入端。 2-1~2-8:8位数字量输出端。 ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。 ALE:地址锁存允许信号,输入,高电平有效。 START: A/D转换启动信号,输入,高电平有效。 EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为 低电平)。 OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电 平,才能打开输出三态门,输出数字量。 CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。 REF(+)、REF(-):基准电压。 Vcc:电源,单一+5V。 GND:地。 ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。 此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下 降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高 电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输 入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。 2、单片机数据处理 选择美国ATMEL公司的CMOS8位单片机AT89C51,其工作电压为2.7~6V,具有低电压低功 耗性能和高性价比,兼容标准MCS- 51指令系统,4Kbytes的PEROM和128bytes的RAM,片内置通用的8位中央处理器(CPU)和 Flash存储单元。 AT89C51是一种带有4 KB闪烁可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器,可为很多嵌入式控制系统提供灵活且价廉的方案。所以,本设计采用ATM EL公司的AT89C51作为程序的主控芯片。 AT89C51数据总线是由P0口提供的,P0口本身能以多种方式提供数据总线和地址总线。 当ALE输出信号为高电平时,P0将输出的数据锁入总线驱动器中作为地址的低8位,然后 和P2送出来的高8位地址一起组成一个完整的16位地址,以寻址到外部的64KB的地址空间 。AT89C51的地址总线比较简单(只有3个:RD、WR、PSEN),其中RD是用来读取外部数据 内存的控制线,WR是用来写数据到外部数据内存的控制线,PSEN是用来存取外部程序内 存的读取控制线。 3、LED显示测量结果 这里选择的是广州周立功单片机发展有限公司自行设计的数码管显示驱动及键盘扫描管 理芯片ZLG7289B,它可直接驱动 8 位共阴式数码管(或 64 只独立 LED) ,同时还可以扫描管理多达64 只按键。ZLG7289B 内部含有显示译码器,可直接接受 BCD 码或 16 进制码,并同时具有 2 种译码方式。此外,还具有多种控制指令,如消隐 闪烁 左移 右移 段寻址等。ZL G7289B采用 SPI 串行总线与微控制器接口,仅占用少数几根 I/O口线。利用片选信号,多片 ZLG7289B 还可以并接在一起使用,能够方便地实现多于 8 位的显示或多于 64只按键的应用。 4、D/A转换模拟量输出 在本设计中D/A转换的作用是使得采集处理过的数据通过D/A转换电路后送示波器进行观 察。这里选择了DAC0832这一D/A转换器。它是一个8位D/A转换芯片,唯一电源供电,从 +5V~+15V均可正常工作,其引脚功能说明如下: DI0~DI7:数据输入线,TLL电平。 ILE:数据锁存允许控制信号输入线,高电平有效。 CS:片选信号输入线,低电平有效。 WR1:为输入寄存器的写选通信号。 XFER:数据传送控制信号输入线

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值