加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > 单片机学习

Vxworks取日历时间程序

时间:2013-09-08  来源:123485.com  作者:9stone

       在vxworks里取的系统时间是从开机到现在的时间,如果想取到日历时间的话只能借助外界的硬件支持了。在X86系统里,可以通过读取71端口来读取日历时间,以下是一个C程序,可以在vxworks下用。

#include<stdio.h>

void ReadTime(int* pYear,int* pMonth,int* pDate,int* pDay,int* pHour,int* pMinute,int* pSecond);

void ReadTime(int* pYear,int* pMonth,int* pDate,int* pDay,int* pHour,int* pMinute,int* pSecond)
{
    int OldYear,OldMonth,OldDate,OldDay,OldHour,OldMinute,OldSecond;
    int YearTemp,MonthTemp,DateTemp,DayTemp,HourTemp,MinuteTemp,SecondTemp;
    int Century;

    OldYear="OldMonth"=OldDate=OldDay=OldHour=OldMinute=OldSecond=-1;
    sysOutByte(0x70,0x32);
    Century=(int)sysInByte(0x71);
    for(;;)
    {
        asm pushf;      //Save interrupt enable|disable status
        asm cli;        //Disable interrupt
        sysOutByte(0x70,0xa);
        if((0x80&sysInByte(0x71))!=0)
        {
            asm popf;   //Restore interrupt enable|disable status
            continue;
        }
        sysOutByte(0x70,9);
        YearTemp=(int)sysInByte(0x71);
        sysOutByte(0x70,8);
        MonthTemp=(int)sysInByte(0x71);
        sysOutByte(0x70,7);
        DateTemp=(int)sysInByte(0x71);
        sysOutByte(0x70,6);
        DayTemp=(int)sysInByte(0x71);
        sysOutByte(0x70,4);
        HourTemp=(int)sysInByte(0x71);
        sysOutByte(0x70,2);
        MinuteTemp=(int)sysInByte(0x71);
        sysOutByte(0x70,0);
        SecondTemp=(int)sysInByte(0x71);
        sysOutByte(0x70,0xa);
        if((0x80&sysInByte(0x71))!=0)
        {
            asm popf;   //Restore interrupt enable|disable status
            continue;
        }
        if((OldYear!=YearTemp)||(OldMonth!=MonthTemp)||(OldDate!=DateTemp)
            ||(OldDay!=DayTemp)||(OldHour!=HourTemp)||(OldMinute!=MinuteTemp)
            ||(OldSecond!=SecondTemp))
        {
            OldYear="YearTemp";
            OldMonth="MonthTemp";
            OldDate="DateTemp";
            OldDay="DayTemp";
            OldHour="HourTemp";
            OldMinute="MinuteTemp";
            OldSecond="SecondTemp";
            asm popf;
            continue;
        }
        asm popf;       //Restore interrupt enable|disable status
        break;
    }
    *pYear=(Century>>4)*1000+(Century&0xf)*100+(YearTemp>>4)*10+(YearTemp&0xf);
    *pMonth=(MonthTemp>>4)*10+(MonthTemp&0xf);
    *pDate=(DateTemp>>4)*10+(DateTemp&0xf);
    *pDay=DayTemp;
    *pHour=(HourTemp>>4)*10+(HourTemp&0xf);
    *pMinute=(MinuteTemp>>4)*10+(MinuteTemp&0xf);
    *pSecond=(SecondTemp>>4)*10+(SecondTemp&0xf);
}

void main(void)
{
    int t1,t2,t3,t4,t5,t6,t7;
    ReadTime(&t1,&t2,&t3,&t4,&t5,&t6,&t7);
    printf("%d %d %d %d %d %d %d/n",t1,t2,t3,t4,t5,t6,t7);
}


分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->单片机学习
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门