Chinaunix首页 | 论坛 | 博客
  • 博客访问: 377436
  • 博文数量: 47
  • 博客积分: 967
  • 博客等级: 准尉
  • 技术积分: 1290
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-25 16:14
文章分类

全部博文(47)

文章存档

2019年(1)

2014年(1)

2013年(9)

2012年(36)

分类: LINUX

2012-07-23 10:51:02

1. 简单介绍CMOS
       在计算机领域,CMOS常指保存计算机基本启动信息(如日期、时间、启动设置等)的芯片。有时人们会把CMOS和BIOS混称,其实CMOS是主板上的一块可读写的RAM芯片,是用来保存BIOS的硬件配置和用户对某些参数的设定。
2.CMOS的端口
 我们要读取CMOS的时间必须要将数据存到70h,再从71h里面读取。
端口号权限 
 长度作用 
 70h不可读可写 
 8bit 用它来设置cmos中的数据地址
 71h 可读可写 8bit 用它来设置70h端口地址中的值
3.数据对照表
地址
 数据备注 
 00H
 Time - Seconds
 硬件时间的秒
 01H
 Alarm - Seconds
 
 02H
 Time - Minutes
 硬件时间的分
 03H
 Alarm - Minutes
 
 04H Time - Hours
 硬件时间的时
 05H
 Alarm - Hours
 
 06H
 Date - Day of the week
 
 07H
 Date - Day
 
 08H
 Date - Month
 
 09H
 Date - Year 29h
 
 0AH
 Status Register A
 
 0BH Status Register B
 
 0CH Status Register C
 
 0DH Status Register D
 
 0EH Diagnostic Status
 
 0FH Shutdown Status
 
 10H A:
 
 11H Reserved
 
 12H 0
 
 13H Reserved
 
 14H Equipment Installed
 
 15H Base Memory (high byte)
 
 16H Base memory (low byte)
 
 17H Extended Memory (high byte)
 
 18H Extended Memory (low byte)
 
 19H 0 (C:) Hard Disk Type
 
 1AH 1 (D:) Hard Disk Type
 
 1BH Reserved
 
 1CH Supervisor Password
 
 1DH Supervisor Password
 
 1EH ~ 2DH
 Reserved
 
 2EH CMOS Checksum (high byte)
 
 2FH CMOS Checksum (low byte)
 
 30H Extended Memory (high byte)
 
 31H Extended Memory (low byte)
 
 32H Date - Century
 
 33H Power On Status
 
 34H~3FH Reserved
 
 40H~5FH Extended CMOS
 
 60H User Password
 
 61H User Password
 
 62H~7FH Extended CMOS
 
  
4.用嵌入式汇编实现读取CMOS的时间


  1. #include "stdio.h"
  2. unsigned char cmos_read(int n)
  3. {
  4. unsigned char b;
  5. iopl(3);      //读取端口
  6. asm volatile (
  7. "out %%al,$0x70;"
  8. "in $0x71,%%al;"
  9. :"=a"(b)   //输出
  10. :"a"(n)    //输入
  11. );
  12. iopl(0);
  13. return b;
  14. }
  15. int main()
  16. {
  17. unsigned char m,s,h;
  18. s=cmos_read(0);//秒
  19. m=cmos_read(2);//分
  20. h=cmos_read(4);//时
  21. printf("hours=%x,minutes=%x,seconds=%x\n",h,m,s);
  22. return 0;
  23. }
运行结果:
  1. lwp@lwp-linux:~/kernel$ sudo ./cmos_1
  2. hours=11,minutes=34,seconds=7
  3. lwp@lwp-linux:~/kernel$ date
  4. 2012年 07月 23日 星期一 11:34:13 CST
  5. lwp@lwp-linux:~/kernel$

阅读(4006) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~