#include <REG51.H> #define uchar unsigned char uchar min,sec,cnt2,cnt1,m; uchar out_val=0x0f; /****************************/ void initial(void) { TMOD=0x02; TH0=0x38; TL0=0x38; IE=0x00; TR0=1; P1=out_val; } /****************************/ void main(void) { initial(); for(;;) { while(!TF0); TF0=0; if(++cnt1>=200){cnt1=0;cnt2++;} if(cnt2>=25){cnt2=0;sec++;} if(sec>=60){sec=0;min++;} if(min>=2){min=0;P1=~out_val;} } } 以上程序是我在一本书上摘抄的,书上说该程序用定时器第二种工作方式自动加载,连续计时,上面那个FOR循环是无线循环,所以指示灯亮120秒,再灭120秒,无线循环下去,但我仿真后发现只做了一个循环就保持不变了,即灯先灭,然后变亮,然后保持常亮了,小弟新人,不解,希望哪位高手指教 |