永发信息网

c 记时程序 帮忙找错

答案:1  悬赏:0  手机版
解决时间 2021-04-27 18:31
  • 提问者网友:箛茗
  • 2021-04-27 15:14

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int  
 sbit sc1=P2^6;//锁存器1
 sbit sc2=P2^7;//锁存器2
 uchar code table[]={
 0x3f,0x06,0x5b,0x4f,
 0x66,0x6d,0x7d,0x07,
 0x7f,0x6f,0x77,0x7c,
 0x39,0x5e,0x79,0x71}; //共阴
    void dlayms(uint);
 void display (uchar,uchar,uchar,uchar,uchar,uchar);
 uchar num,hs,hg,ms,mg,ss,sg;
 void main()
 {
   TMOD = 0x11;
   TH0 =(65536-45872)/256;
   TL0 =(65536-45872)%256;
   EA=1;
   ET0=1;   //定时中断0 
   TR0=1;
   while(1)
    {
   display(hs,hg,ms,mg,ss,sg)
    }
     }
    void display(uchar hs,uchar hg,uchar ms,uchar mg,uchar ss,uchar sg,uchar num)//显示子函数
      { 
        sc1=1;
   P0=table[hs];  
   sc1=0;
   P0=0xff;                 
   sc2=1;
   P0=0xfd;
   sc2=0; 
    delayms(10);
    
   sc1=1;
   P0=table[hg];  
   sc1=0;
   P0=0xff;
   sc2=1;
   P0=0xfe;
   sc2=0;
   delayms(10);

   sc1=1;
   P0=table[ms]; 
   sc1=0;
   P0=0xff;
   sc2=1;
   P0=0xfb;
   sc2=0;
   delayms(10);

   sc1=1;
   P0=table[mg];
   sc1=0;
   P0=0xff;
   sc2=1;
   P0=0xf7;
   sc2=0;
   delayms(10);

   sc1=1;
   P0=table[ss]; 
   sc1=0;
   P0=0xff;
   sc2=1;
   P0=0xef;
   sc2=0;
   delayms(10);

   sc1=1;
   P0=table[sg]; 
   sc1=0;
   P0=0xff;
   sc2=1;
   P0=0x7f;
   sc2=0;
   delayms(10);
   }
   void delayms(uint xms); //延时
    {uint i,j;
      for(i=xms,i>0;i--)
       for(j=110;j>0;j--);
     }
    void T1_time()interrupt 1 //中断子函数
  {   TH0=(65536-45872)/256;
      TL0=(65536-45872)%256;
   num++;
    if(num==20);
     {num=0;
      sg++;
     }
    if(sg==10);
     {sg=0;
      ss++;
     }
    if(ss==60);
     {ss=0;
   mg++;
     }
    if(mg==10)
     {mg=0;
      ms++;
     }
    if(ms==60)
     {ms=0;
      hg++;
     }
    if(hg==10)
     {hg=0;
      hs++;
      }
    if(hs==24)
      {hs=0;
   }
   }
                  

最佳答案
  • 五星知识达人网友:蓝房子
  • 2021-04-27 15:59
1.中断基本概念 什么是中断?先打个比方。当一个经理正处理文件时,电话铃响了(中断请求),不得不在文件上做一个记号(返 回地址),暂停工作,去接电话(中断),并指示“按第二方案办”(调中断服务程序),然后,再静下心来(恢复中 断前状态),接着处理文件……。计算机科学家观察了类似实例,“外师物化,内得心源”,借用了这些思想、处理方 式和名称,研制了一系列中断服务程序及其调度系统。 中断是CPU处理外部突发事件的一个重要技术。它能使CPU在运行过程中对外部事件发出的中断请求及时地进行处理, 处理完成后又立即返回断点,继续进行CPU原来的工作。引起中断的原因或者说发出中断请求的来源叫做中断源。 根据 中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内部中断两类。 外部中断一般是指由计算机外设发出的中断请求,如:键盘中断、打印机中断、定时器中断等。外部中断是可以屏 蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备的中断请求。 内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算溢出、单步中断等)所引起 的中断。内部中断是不可屏蔽的中断。 软件中断其实并不是真正的中断,它们只是可被调用执行的一般程序。例如:ROMBIOS 中的各种外部设备管理中断 服务程序(键盘管理中断、显示器管理中断、打印机管理中断等),以及DOS的系统功能调用(INT 21H)等都是软件中 断。 CPU为了处理并发的中断请求,规定了中断的优先权/中断优先权由高到低的顺序是: (1)除法错、溢出中断、软件中断 (2)不可屏蔽中断 (3)可屏蔽中断 (4)单步中断。 2.中断与计算机病毒 计算机操作系统是开放的,用户可以修改扩充操作系统,在计算机上实现新的功能。修改操作系统的主要方式之一 是扩充中断功能。 计算机提供很多中断,合理合法地修改中断会给计算机增加非常有用的新功能。如INT 10H是屏幕显示中断, 原只 能显示西文,而在各种汉字系统中都可以通过修改1NT 10H使计算机能够显示中文。另一方面, 计算机病毒则篡改中断 为其达到传染、激发等目的服务,与病毒有关的重要中断有: INT 08H和INT 1CH定时中断,每秒调用18.2次,有些病毒利用它们的记时判断激发条件。 INT 09H键盘输入中断,病毒用于监视用户击键情况。 INT 10H屏幕输入输出中断,一些病毒用于在屏幕上显示字符图形表现自己。 INT 13H磁盘输入输出中断,引导型病毒用于传染病毒和格式化磁盘。 INT 21H DOS功能调用,包含了DOS的大部分功能,已发现的绝大多数文件型病毒修改INT 21H中断, 因此也成为防 病毒的重点监视部位。 INT 24H DOS的严重错误处理中断,文件型病毒常进行修改,以防止传染写保护磁盘时被发现。 中断子程序的人口地址存放在计算机内存的最低端,病毒窃取和修改中断的人口地址获得中断的控制权,在中断服 务过程中插入病毒的“私货”。 总之,中断可以被用户程序所修改,从而使得中断服务程序被用户指定的程序所替代。这样虽然大大地方便了用户, 但也给计算机病毒制造者以可乘之机。病毒正是通过修改中断以使该中断指向病毒自身来进行发作和传染的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯