找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 957|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

記時(shí)不是1s,檔位控制單片機(jī)程序問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
第一個(gè)問(wèn)題:已經(jīng)編了記時(shí)50ms和20次循環(huán),可是間隔不是1s。第二個(gè)問(wèn)題:因?yàn)槲贿x所以要用P2.2和P2.3,由于編寫了P2=0xf7和P2=0xfb其他的P2口無(wú)法控制。


這是程序:

#include<reg51.h>
sbit s=P1^3;
sbit b=P3^3;
sfr P2M0=0xf3;
sfr P2M1=0xff;
sbit a=P2^4;
sbit e=P2^5;
sbit d=P2^6;
unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code c[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char int_time;
unsigned char second;

void delay()
{
        unsigned char i;
        for(i=0;i<200;i++)
        ;
}

void DisplaySecond(unsigned char k)
{
        
        P2=0xf7;
        P0=Tab[k%10];
        delay();
        P2=0xfb;
        P0=Tab[k/10];
        delay();
        P0=0xff;
        
}

void main()
        {
                P3=0x00;
                TMOD=0x90;
                                        TL1=(65536-50000)/256;
                                        TH1=(65536-50000)%256;
                                        EA=1;
                                        ET1=1;
                                        TR1=1;
                                        EX1=1;
                                        IT1=1;
                                        int_time=0;
                                        second=0;
                                        TR1=0;
               
        if(a==0)
{
        P1=c[0];
}
if(e==0)
{
        P1=c[1];
}
if(d==0)
{
        P1=c[2];
}
                                         while(1)
                                                {

                                                  DisplaySecond(second);

                                       
                                         }

        }        

void time1()interrupt 3 using 1
{

        int_time++;
        if(int_time==20)
        {
                int_time=0;
                if(second<30)
                second++;               
        }
if(second==30)
{
        b=0;
}        
if(b==0)
{
        second=0;
}
TL1=(65536-50000)/256;
        TH1=(65536-50000)%256;
TR1=1;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:517466 發(fā)表于 2019-5-30 20:04 | 只看該作者
我用AT89C2051,晶振11.0592MHz的嗎,按照經(jīng)典計(jì)算值設(shè)置0x3CB0,也不能得到準(zhǔn)確的50ms,需要自己仔細(xì)調(diào)節(jié)TL中的值,才比較接近50ms。事實(shí)上由于我們使用的晶振不是高精度的,都會(huì)有偏離。
回復(fù)

使用道具 舉報(bào)

板凳
ID:514203 發(fā)表于 2019-5-31 09:21 | 只看該作者
suncat0504 發(fā)表于 2019-5-30 20:04
我用AT89C2051,晶振11.0592MHz的嗎,按照經(jīng)典計(jì)算值設(shè)置0x3CB0,也不能得到準(zhǔn)確的50ms,需要自己仔細(xì)調(diào)節(jié)T ...

明白了 謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表