时钟中断事件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*************************************************************
/*编程时间:2015.4.22
/*程序目的:模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序
/*************************************************************/
#include
#include
#include
int main()
{
double p;
int a,m,r,n,e,o,u,i;
struct tm *local;
char *st,s[27];
time_t t;
t=time(NULL);
local = localtime(&t);
st=asctime(local);
//记录初试时间
for(i=0;i<27;i++)
{
s[i]=*st;
st++;
}
printf("当前系统时间为:\n");
for(i=4;i<27;i++)
{
printf("%c",s[i]);
}
printf("这里!\n");
//设置为时钟闹铃为8,每个时钟间隔为2秒
int count=0,count1=0,k=8,w;
while(k!=0)
{
do
{
printf("已执行完一条指令\n");
count++;
printf("请输入一个数字(1表示中断,0表示无中断):\n");
scanf("%d",&w);//读取键盘输入
}
while(w==0); //如果w一直为0,则程序一直在此循环执行
if(w==1)
printf("现场保存完毕\n");
count1++;
k--; //对k--,当出现8次中断时
if(k!=0)
printf("处理器完成调度\n");
}
p=count1*2;
a=(int)count1*2;
if((p-a)>=0.5)
p=a+1;
else p=a;
//count1出现偏差时的处理
m=(int)p;
printf("现在已过时间为:%d\n",m);
r=s[17]-48;
n=s[18]-48;
e=r*10+n;
p=p+e;//下面部分代码为ASCII码的转换
if(p<60)
{
s[17]=((int)p/10)+48;
s[18]=((int)p%10)+48;
for(int i=4;i<27;i++)
printf("%c",s[i]);
}
else
{
s[14]=s[14]-48;
s[15]=s[15]-48;
o=s[14]*10+s[15];
o=o+(int)p/60;
}
if(o<60)
{
s[14]=(o/10)+48;
s[15]=(o%10)+48;
s[17]=((int)p%60)/10+48;
s[18]=((int)p%60)%10+48;
for(int i=4;i<27;i++)
{
printf("%c",s[i]);
}
}
else
{
s[11]=s[11]-48;
s[12]=s[12]-48;
u=s[11]*10+s[12];
u=u+o/60;
if(u<24)
{
s[11]=u/10+48;
s[12]=u%10+48;
s[14]=(o%60)/10+48;
s[15]=(o%60)%10+48;
s[17]=((int)p%60)/10+48;
s[18]=((int)p%60)%10+48;
for(int i=4;i<27;i++)
{
printf("%c",s[i]);
}
}
}
return 0;
}