📄 enable.c
字号:
#include<dos.h>
int ReadTime(int);
int wdt_enable(char t);
void main(void)
{
wdt_enable(10);
}
int wdt_enable(char t)
{
unsigned char minute,minute_temp;
unsigned char hour,hour_temp;
unsigned short second,second_temp;
int temp1;
if(t==0) return 0;
if(t==1) t++;
outp(0xa1,(inp(0xa1))|1); //mask IRQ8
disable();
outp(0x70,0x0a);
outp(0x71,0x20);
Redo:
for(;;)
{
temp1=ReadTime(0);
if(temp1!=-1) break;
}
second_temp=temp1;
second_temp=(((second_temp&0xf0)>>4)*10)+(second_temp&0x0f);
second_temp=second_temp+t;
second=second_temp%60;
second=((second/10)<<4)+(second%10);
outp(0x70,1);
outp(0x71,second);
temp1=ReadTime(2);
if(temp1==-1) goto Redo;
minute_temp=temp1;
minute_temp=(((minute_temp&0xf0)>>4)*10)+(minute_temp&0x0f);
minute_temp=minute_temp+second_temp/60;
minute=minute_temp%60;
minute=((minute/10)<<4)+(minute%10);
outp(0x70,3);
outp(0x71,minute);
temp1=ReadTime(4);
if(temp1==-1) goto Redo;
hour_temp=temp1;
hour_temp=(((hour_temp&0xf0)>>4)*10)+(hour_temp&0x0f);
hour_temp=hour_temp+minute_temp/60;
hour=hour_temp%24;
hour=((hour/10)<<4)+(hour%10);
outp(0x70,5);
outp(0x71,hour);
outp(0x70,0x0c);//don't remove this line
inp(0x71); //don't remove this line
outp(0x70,0x0b);
second=inp(0x71);
second=second|0x20;
second=second&0x7f;
outp(0x70,0x0b);
outp(0x71,second);
enable();
return 1;
}
//type: 0---second
// 2---minute
// 4---hour
// other---undefined
int ReadTime(int type)
{
int timevalue;
int temp1;
outp(0x70,0xa);
delay(1);
temp1=inp(0x71);
if((temp1&0x80)!=0) return -1;
outp(0x70,(char)type);
delay(1);
timevalue=inp(0x71);
outp(0x70,0xa);
delay(1);
temp1=inp(0x71);
if((temp1&0x80)==0) return timevalue;
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -