久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8824|回復: 12
打印 上一主題 下一主題
收起左側

新手請教各位,為什么定時器時間不對?

[復制鏈接]
跳轉到指定樓層
樓主
ID:217075 發表于 2017-7-4 13:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit gewe=P1^3;        //個位選通               
sbit shwe=P1^2;
sbit bawe=P1^1;
sbit qiwe=P1^0;
sbit led1=P2^0;         //二極管
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
                                        0x92,0x82,0xf8,0x80,0x90};
void delayms(uint);
void display1(uchar,uchar);
void dispiay2(uchar,uchar);
uchar num1,num2,qian,bai,shi,ge;
uint num;

void display1(uchar qian,uchar bai)
{
        qiwe=0;                          //千位選通打開
        P0=table[qian];          //千位段選
        delayms(5);                  //延時
        qiwe=1;                          //千位選通關閉

        bawe=0;
        P0=table[bai];
        delayms(5);
        bawe=1;
}

void display2(uchar shi,uchar ge)
{
        shwe=0;
        P0=table[shi];
        delayms(5);
        shwe=1;

        gewe=0;
        P0=table[ge];
        delayms(5);
        gewe=1;       
}
void main()
{
        TMOD=0x11;                          //設置定時器0和1為工作方式1
        TH0=(65536-45872)/256;//裝初值
        TL0=(65536-45872)%256;
        TH1=(65536-45872)/256;
        TL1=(65536-45872)%256;
        EA=1;                                   //開總中斷
        ET0=1 ;                                   //開定時器0中斷
        TR0=1;                                   // 啟動定時器0
        ET1=1;                                  
        TR1=1;                                  
        while(1)
        {
                display2(shi,ge);
                display1(qian,bai);
        }
}

void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)                //延時函數約延時xms
                for(j=110;j>0;j--);
}

void TO_time() interrupt 1
{
        TH0=(65536-45872)/256;        //重裝初值
        TL0=(65536-45872)%256;
        num1++;
        if(num1==4)                                //到了4次=200ms
        {
                num1=0;                                //把num1清零再計20次
                led1=~led1;
        }               
}

void T1_time() interrupt 3
{
        TH1=(65536-45872)/256;
        TL1=(65536-45872)%256;
        num2++;
        if(num2=20)                           //如果到了20次約為1秒
        {       
                num2=0;                           //把num2清零再計20次
                num++;
                if(num==3600)                //數碼管計到3600后歸零
                        num=0;
                qian=num/1000;
                bai=num%1000/100        ; //把一個四位數送數碼管
                shi=num%1000%100/10;       
                ge=num%1000%100%10;               
        }       
}
       
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:217075 發表于 2017-7-4 13:47 | 只看該作者
搞了2天了,我不會了
回復

使用道具 舉報

板凳
ID:164602 發表于 2017-7-4 16:59 | 只看該作者
你的程序,我在我的板子上試過了。
從計時來說,可能不是十分準,但效果還是在的。
計時一小時,我等不了,我通過賦值3580,過20下,是真的清了零,再計時的。LED燈也在閃。
沒有問題啊。
你只發出來程序,不知道你的目標是什么,是否達到。
從標題來說,你說的時間不對,是指準確的時間嗎?那個是不容易調到百分之百的,因為定時器中斷發生后,執行了一些語句,那是要占時間的,當然不準了。
回復

使用道具 舉報

地板
ID:97438 發表于 2017-7-4 17:07 | 只看該作者
  if(num2=20)????這里錯了
回復

使用道具 舉報

5#
ID:213173 發表于 2017-7-4 17:28 | 只看該作者
   if(num2=20)  //如果到了20次約為1秒....少一個=。 if(num2==20)
只要用一個定時器就可以完成,不必開T1。
void TO_time() interrupt 1
{
        TH0=(65536-45872)/256;        //重裝初值
        TL0=(65536-45872)%256;
        num1++;
        num2++;
        if(num1>=4)                                //到了4次=200ms
        {
                num1=0;                                //把num1清零再計20次
                led1=~led1;
        }               
        if(num2>=20)                           //如果到了20次約為1秒
        {        
                num2=0;                           //把num2清零再計20次
                num++;
                if(num>=3600)                //數碼管計到3600后歸零
                num=0;
                qian=num/1000;
                bai=num%1000/100; //把一個四位數送數碼管
                shi=num%1000%100/10;        
                ge=num%1000%100%10;               
        }        
}
兩個顯示程序也可以合并在一起
回復

使用道具 舉報

6#
ID:213173 發表于 2017-7-4 17:52 | 只看該作者
hsujinshan 發表于 2017-7-4 13:47
搞了2天了,我不會了

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit gewe=P1^3;        //個位選通               
sbit shwe=P1^2;
sbit bawe=P1^1;
sbit qiwe=P1^0;
sbit led1=P2^0;         //二極管
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
                   0x92,0x82,0xf8,0x80,0x90};
void delayms(uint);
void display1(uchar,uchar,uchar,uchar);
//void dispiay2(uchar,uchar);
uchar num1,num2,qian,bai,shi,ge;
uint num;

void display1(uchar qian,uchar bai,uchar shi,uchar ge)
{
        qiwe=0;                   //千位選通打開
        P0=table[qian];          //千位段選
        delayms(2);               //延時
        qiwe=1;                   //千位選通關閉
       
        bawe=0;
        P0=table[bai];
        delayms(2);
        bawe=1;

        shwe=0;
        P0=table[shi];
        delayms(2);
        shwe=1;
       
        gewe=0;
        P0=table[ge];
        delayms(2);
        gewe=1;        
}

void main()
{
        TMOD=0x01;                          //設置定時器0和1為工作方式1
        TH0=(65536-45872)/256;//裝初值
        TL0=(65536-45872)%256;
//        TH1=(65536-45872)/256;
//        TL1=(65536-45872)%256;
        EA=1;                                   //開總中斷
        ET0=1 ;                                   //開定時器0中斷
        TR0=1;                                   // 啟動定時器0
//        ET1=1;                                   
//        TR1=1;                                   
        while(1)
        {
                qian=table[num/1000];
                bai=table[num%1000/100]; //把一個四位數送數碼管
                shi=table[num%1000%100/10];        
                ge=table[num%1000%100%10];               
//                display2(shi,ge);
                display1(qian,bai,shi,ge);
        }
}

void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)                //延時函數約延時xms
                for(j=110;j>0;j--);
}

void TO_time() interrupt 1
{
        TH0=(65536-45872)/256;        //重裝初值
        TL0=(65536-45872)%256;
        num1++;
        num2++;
        if(num1>=4)                                //到了4次=200ms
        {
                num1=0;                                //把num1清零再計20次
                led1=~led1;
        }               
        if(num2>=20)                           //如果到了20次約為1秒
        {        
                num2=0;                           //把num2清零再計20次
                num++;
                if(num>=3600)                //數碼管計到3600后歸零
                        num=0;
        }        
}
/*
void T1_time() interrupt 3
{
        TH1=(65536-45872)/256;
        TL1=(65536-45872)%256;
        num2++;
        if(num2=20)                           //如果到了20次約為1秒
        {        
                num2=0;                           //把num2清零再計20次
                num++;
                if(num==3600)                //數碼管計到3600后歸零
                num=0;
                qian=num/1000;
                bai=num%1000/100        ; //把一個四位數送數碼管
                shi=num%1000%100/10;        
                ge=num%1000%100%10;               
        }        
}*/
回復

使用道具 舉報

7#
ID:7485 發表于 2017-7-4 20:55 | 只看該作者
(65536-45872)?是多少的晶振?
回復

使用道具 舉報

8#
ID:217075 發表于 2017-7-5 10:41 | 只看該作者
12M晶振
回復

使用道具 舉報

9#
ID:111634 發表于 2017-7-5 11:17 | 只看該作者
工作方式1需重裝定時常數,就會產生誤差。工作方式2不需重裝定時常數,不會產生誤差。
回復

使用道具 舉報

10#
ID:124330 發表于 2017-7-5 11:46 | 只看該作者
程序沒什么問題,就是定時器1中斷的里面的判斷==你寫成了賦值=
回復

使用道具 舉報

11#
ID:124330 發表于 2017-7-5 11:48 | 只看該作者
如果是12M晶振賦初值50000更精確一點
回復

使用道具 舉報

12#
ID:105206 發表于 2017-7-5 14:16 | 只看該作者
完全可以用1 個定時器就可以搞定的。
回復

使用道具 舉報

13#
ID:184970 發表于 2017-7-5 16:54 | 只看該作者
你現在算的這個是按11.0592M的晶振算的,12M的話直接-50000就可以了,相對會更準一些
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 婷婷丁香综合网 | 羞羞视频网站在线观看 | 久久成人av电影 | 国内精品伊人久久久久网站 | 91看片网 | 日韩插插| 在线日韩欧美 | 四虎影视免费观看 | 日韩电影一区 | 日本欧美国产 | 亚州精品天堂中文字幕 | 在线视频 欧美日韩 | 午夜激情小视频 | www.久久| 丁香五月网久久综合 | 女人毛片a毛片久久人人 | 青娱乐av | 久久精品网 | 久久精品超碰 | 亚洲精品一区二区三区免 | 91精品一区二区三区久久久久久 | 免费在线观看成人 | 99国产精品视频免费观看一公开 | 欧美成人高清视频 | 国产一区二区三区精品久久久 | 国产精品久久久久久久午夜 | 国产成人精品综合 | 欧美日韩国产精品一区二区 | 干干干操操操 | 国产九九九九 | 欧美国产日韩一区二区三区 | 亚洲一区二区综合 | www国产成人免费观看视频,深夜成人网 | 亚洲人人 | 久热久热| 一区二区三区四区在线视频 | 亚洲综合久久久 | 色婷婷精品久久二区二区蜜臂av | 一区在线播放 | 国产高清视频一区二区 | 国产成人精品视频在线观看 |