• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

程序求助

唯爱小姑娘 2016-10-27 浏览量:788
求解惑各位前辈
2 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 本帖最后由 MOP 于 2016-10-28 14:36 编辑

    例2. 用T1模式2计数,外部计数信号由T1(P3.5)引脚输入,每出现一次负跳变计数器加1,要求每计满200次,使P1.0端取反。
    
    #include 
    SETB P1_0=P1^0;
    void main()
    { TMOD=0x60;   // 设置T1为模式2计数工作方式    
       TH1=0x38;    // 赋初值 
       TL1=0x38;     
       TR1=1;       //启动T1计数器
       while(!TF0); 
       TF0=0; 
       P1_0=~P1_0;
     }
    
    定義可在標頭檔找到,我找的是STC15Fxxxx.h
    sbit TF0  = TCON^5;        //定时器0溢出中断标志位
    但您可發現您用的是Timer1,怎是用Timer0的標誌,就是問題所在了,應該改為
    sbit TF1  = TCON^7;        //定时器1溢出中断标志位
    所以
    #include 
    SETB P1_0=P1^0;
    void main()
    { TMOD=0x60; // 设置T1为模式2计数工作方式
    TH1=0x38; // 赋初值
    TL1=0x38;
    TR1=1; //启动T1计数器
    while(!TF1);
    TF1=0;
    P1_0=~P1_0;
    }

    圖為TIMER1模式2,這樣就符合題目需求了

    • 发布于 2016-10-28
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:7
  • 本帖最后由 MOP 于 2016-10-28 22:29 编辑

    唯爱小姑娘 发表于 2016-10-28 19:09
    为啥要写while(!TF1)这句程序,还有他的作用是什么,前辈可以为我解惑吗 ...
    嗯,您是要問為什麼這樣寫吧?
    while(!TF1); //注意這裡是分號,空loop
    TF1=0;
    P1_0=~P1_0;
    說明如下

    因為
    當您計數器還未到200次時,TF1=0,這時候While loop成立,將會繼續執行空loop,不做任何事
    當您計數器已超過200次時,產生溢位,發出中斷訊號,TF1=1,這時候While loop不成立跳出往下執行,將TF1設為0,然後翻轉P10腳位
    但這只有一輪而已,,如果要自動非手動,每200次就翻轉一次,需要改為如下
    while(1)
    {
       if(TF1)
       {
         TF1=0;
         P1_0=~P1_0;
       }
    }
    以上希望對您有幫助:)





    • 发布于2016-10-28
    • 举报
    • 评论 0
    • 1
    • 0

  • MOP 发表于 2016-10-28 14:30
    定義可在標頭檔找到,我找的是STC15Fxxxx.h
    但您可發現您用的是Timer1,怎是用Timer0的標誌,就是問題所在了, ...

    谢谢你的解答,可是没有我要的答案,辛苦啦前辈。
    • 发布于2016-10-28
    • 举报
    • 评论 0
    • 0
    • 0

  • MOP 发表于 2016-10-28 14:30
    定義可在標頭檔找到,我找的是STC15Fxxxx.h
    但您可發現您用的是Timer1,怎是用Timer0的標誌,就是問題所在了, ...

    为啥要写while(!TF1)这句程序,还有他的作用是什么,前辈可以为我解惑吗
    • 发布于2016-10-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 会员你好,有了答案要及时选择最佳答案,别忘了哦
    • 发布于2016-11-22
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

程序求助