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

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

QQ登錄

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

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

STC12 串口通訊問(wèn)題 程序非常簡(jiǎn)單 困擾好幾天了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:64911 發(fā)表于 2014-8-10 06:34 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
現(xiàn)象:
1:我用stc-isp軟件給單片機(jī)下載程序后重啟開(kāi)發(fā)板,
2:再次點(diǎn)stc-isp軟件上的下載/編程按鈕,這次我不重啟開(kāi)發(fā)板,為了模擬通訊,一直循環(huán)給開(kāi)發(fā)板發(fā)數(shù)據(jù)。
3:沒(méi)過(guò)多久,led1或者led2會(huì)點(diǎn)亮。
我的理解:
1:理論上TEnd=0或者1,但是這里TEnd還會(huì)等于256或者-255。不會(huì)再等于其他任何數(shù)據(jù)。
2:如果是定時(shí)器太短,導(dǎo)致主程序跑不動(dòng)延時(shí)了,TEnd完全會(huì)不定期等于其他數(shù)據(jù),但是沒(méi)有,他只會(huì)等于256或者-255這兩個(gè)特殊數(shù)據(jù)。
3:我懷疑是數(shù)據(jù)溢出 因?yàn)檫@兩個(gè)數(shù)據(jù)跟8bit,byte有關(guān)系。
#include<reg52.h>
#define uchar8 unsigned char //8
#define uint16 unsigned int //16
#define ulong32 unsigned long //32

sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;

ulong32 TStar=0;//記錄時(shí)間
ulong32 TEnd=0;
ulong32 sys1ms=0;//1ms累加,可以一直累加到49.7天

void main()
{        
        //1ms@12.000MHz
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TMOD |= 0x01;                //設(shè)置定時(shí)器模式
        TL0 = 0x18;                //設(shè)置定時(shí)初值
        TH0 = 0xFC;                //設(shè)置定時(shí)初值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)
        //4800bps@12.000MHz
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        TMOD &= 0x0F;                //清除定時(shí)器1模式位
        TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
        TL1 = 0xF3;                //設(shè)定定時(shí)初值
        TH1 = 0xF3;                //設(shè)定定時(shí)器重裝值
        ET1 = 0;                //禁止定時(shí)器1中斷
        TR1 = 1;                //啟動(dòng)定時(shí)器1

        EA=1;//開(kāi)啟總中斷
        ES=1;//開(kāi)串口中斷
        ET0=1;//開(kāi)定時(shí)器0中斷
        while(1)
        {
                ulong32 temp;
                TStar=sys1ms;//掃描周期記錄初始值

                //todo_something1();
                //todo_something2 ();

                temp=sys1ms-TStar;
                if(TEnd<=temp)TEnd=temp;//掃描周期計(jì)時(shí)
               
                if(TEnd!=256 && TEnd!=-255)led0=0;
                if(TEnd==256)led1=0;
                if(TEnd==-255)led2=0;
        }
}

void Timer0_Interrupt() interrupt 1//定時(shí)器0 1ms 中斷程序
{        
        TL0 = 0x18;                //設(shè)置定時(shí)初值
        TH0 = 0xFC;                //設(shè)置定時(shí)初值
        sys1ms++;                //1ms累加,可以一直累加到49.7天
}

void Comm_Interrupt() interrupt 4//串行中斷程序
{
        if(TI)
        {
                TI = 0;
        }
        if(RI)
        {        
                 char value;
         value=SBUF;
         RI=0;
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:19715 發(fā)表于 2014-8-10 10:57 | 只看該作者
void Comm_Interrupt() interrupt 4//串行中斷程序
{
        if(TI)
        {
                TI = 0;
        }
         if(RI)
        {        
                char value;
                value=SBUF;
                RI=0;
        }
}

回復(fù)

使用道具 舉報(bào)

板凳
ID:64911 發(fā)表于 2014-8-10 11:47 | 只看該作者
明白 發(fā)表于 2014-8-10 10:57
void Comm_Interrupt() interrupt 4//串行中斷程序
{
        if(TI)

你好 我把串行中斷程序改成你這樣后   癥狀1確實(shí)沒(méi)有了,
但是癥狀2就出來(lái)了,我是這樣做的:
1:我用stc-isp給單片機(jī)下載修改后的程序,
2:重啟開(kāi)發(fā)板,然后點(diǎn)stc-isp下載/編程按鈕,我不重啟開(kāi)發(fā)板,相當(dāng)于模擬通訊。
3:大概在2分鐘之內(nèi),led2還是會(huì)點(diǎn)亮。。
回復(fù)

使用道具 舉報(bào)

地板
ID:19715 發(fā)表于 2014-8-10 12:37 | 只看該作者
程序運(yùn)行,TEnd完全有可能去到256,
主要是因?yàn)槎〞r(shí)器0的中斷周期太短,主程序跑不動(dòng)

評(píng)分

參與人數(shù) 1威望 +20 收起 理由
admin + 20 贊一個(gè)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

5#
ID:64911 發(fā)表于 2014-8-10 13:10 | 只看該作者
本帖最后由 xiehuipeng 于 2014-8-10 13:57 編輯
明白 發(fā)表于 2014-8-10 12:37
程序運(yùn)行,TEnd完全有可能去到256,
主要是因?yàn)槎〞r(shí)器0的中斷周期太短,主程序跑不動(dòng)

那個(gè)Tend還會(huì)=-255.
我覺(jué)得這應(yīng)該是溢出的問(wèn)題 Tend只會(huì)出現(xiàn)這兩個(gè)特殊的數(shù)字256或者-255  因?yàn)檫@兩個(gè)數(shù)據(jù)跟8bit,byte有關(guān)系。
如果是按你說(shuō)的,那應(yīng)該會(huì)不定期出現(xiàn)其他數(shù)值。我最開(kāi)始的程序就是通訊讀到Tend只會(huì)等于256或者-255 。
再次說(shuō)明一下:只會(huì)等于256和-255,不可能出現(xiàn)其他值。大哥可以試一下。。



回復(fù)

使用道具 舉報(bào)

6#
ID:19715 發(fā)表于 2014-8-10 22:20 | 只看該作者
xiehuipeng 發(fā)表于 2014-8-10 13:10
那個(gè)Tend還會(huì)=-255.
我覺(jué)得這應(yīng)該是溢出的問(wèn)題 Tend只會(huì)出現(xiàn)這兩個(gè)特殊的數(shù)字256或者-255  因?yàn)檫@兩個(gè)數(shù) ...

確實(shí)不解???應(yīng)該問(wèn)問(wèn)老姚
回復(fù)

使用道具 舉報(bào)

7#
ID:19715 發(fā)表于 2014-8-10 22:56 | 只看該作者
問(wèn)題找到了,是因?yàn)槌绦蜃鰷p法太過(guò)頻繁導(dǎo)致
回復(fù)

使用道具 舉報(bào)

8#
ID:19715 發(fā)表于 2014-8-10 23:14 | 只看該作者
操作太過(guò)于頻繁導(dǎo)致
有可能【TStar=sys1ms;】之后的數(shù)值TStar=0x*****1ff,sys1ms=0x******100,
意思就是說(shuō)在移動(dòng)最低字節(jié)的時(shí)候,TStar和ys1ms都是TStar=0x******ff,在沒(méi)有來(lái)得及次低字節(jié)的時(shí)候,
定時(shí)器中斷來(lái)了,中斷響應(yīng)處理之后sys1ms肯定變成0x******100,又回到移動(dòng)次低字節(jié),
這個(gè)時(shí)候次低字節(jié)不再是原來(lái)值,而是多1了,
所以出現(xiàn),執(zhí)行【TStar=sys1ms】之后,TStar=0x*****1ff,而sys1ms=0x******100,
temp=(sys1ms-TStar);的結(jié)果就是:
(0x******100)-(0x*****1ff)=FFFFFF01=-255
回復(fù)

使用道具 舉報(bào)

9#
ID:19715 發(fā)表于 2014-8-10 23:23 | 只看該作者
數(shù)值中的‘* ’可以是任意十六進(jìn)制數(shù),所以出現(xiàn)這種可能性就更多
回復(fù)

使用道具 舉報(bào)

10#
ID:19715 發(fā)表于 2014-8-10 23:36 | 只看該作者
既然問(wèn)題找到了,就可以解決了,
加上(sys1ms加1)標(biāo)志位:incOK
void main()
{        
        //1ms@12.000MHz
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TMOD |= 0x01;                //設(shè)置定時(shí)器模式
        TL0 = 0x18;                //設(shè)置定時(shí)初值
        TH0 = 0xFC;                //設(shè)置定時(shí)初值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)

        //4800bps@12.000MHz
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        TMOD &= 0x0F;                //清除定時(shí)器1模式位
        TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
        TL1 = 0xF3;                //設(shè)定定時(shí)初值
        TH1 = 0xF3;                //設(shè)定定時(shí)器重裝值
        ET1 = 0;                //禁止定時(shí)器1中斷
        TR1 = 1;                //啟動(dòng)定時(shí)器1

        EA=1;//開(kāi)啟總中斷
        ES=1;//開(kāi)串口中斷
        ET0=1;//開(kāi)定時(shí)器0中斷
                incOK=0;   //sys1ms加1標(biāo)志位就可以incOK
        while(1)
        {
                ulong32 temp;
           if(incOK)        //是加上1,才做減法                {
                        TStar=sys1ms;//掃描周期記錄初始值
                   temp=(sys1ms-TStar);
                incOK=0;
                }
                if(TEnd<=temp)TEnd=temp;//掃描周期計(jì)時(shí)               
           if((TEnd!=256) && (TEnd!=-255))led0=0;
                if(TEnd==256)led1=0;
                if(TEnd==-255)led2=0;
        }
}
回復(fù)

使用道具 舉報(bào)

11#
ID:19715 發(fā)表于 2014-8-10 23:38 | 只看該作者
#include<reg52.h>
#define uchar8 unsigned char //8
#define uint16 unsigned int //16
#define ulong32 unsigned long //32
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
bit  incOK;
ulong32 TStar=0;//記錄時(shí)間
ulong32 TEnd=0;
ulong32 sys1ms=0;//1ms累加,可以一直累加到49.7天
void Timer0_Interrupt() interrupt 1//定時(shí)器0 1ms 中斷程序
{        
        TL0 = 0x18;                //設(shè)置定時(shí)初值
        TH0 = 0xFC;                //設(shè)置定時(shí)初值
        sys1ms++;                //1ms累加,可以一直累加到49.7天
                incOK=1;
}
void Comm_Interrupt() interrupt 4//串行中斷程序
{
        if(TI)
        {
                TI = 0;
        }
        else if(RI)
        {        
              unsigned  char value;
                value=SBUF;
                        RI=0;
        }
}
void main()
{         //1ms@12.000MHz
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TMOD |= 0x01;                //設(shè)置定時(shí)器模式
        TL0 = 0x18;                //設(shè)置定時(shí)初值
        TH0 = 0xFC;                //設(shè)置定時(shí)初值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)
        //4800bps@12.000MHz
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        TMOD &= 0x0F;                //清除定時(shí)器1模式位
        TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
        TL1 = 0xF3;                //設(shè)定定時(shí)初值
        TH1 = 0xF3;                //設(shè)定定時(shí)器重裝值
        ET1 = 0;                //禁止定時(shí)器1中斷
        TR1 = 1;                //啟動(dòng)定時(shí)器1

        EA=1;//開(kāi)啟總中斷
        ES=1;//開(kāi)串口中斷
        ET0=1;//開(kāi)定時(shí)器0中斷
                incOK=0;   //sys1ms加1標(biāo)志位就可以incOK
        while(1)
        {
                ulong32 temp;
                                if(incOK)  //是加上1,才做減法
                                        {
                        TStar=sys1ms;//掃描周期記錄初始值
                        temp=(sys1ms-TStar);
                                        incOK=0;
                                        }
                if(TEnd<=temp)TEnd=temp;//掃描周期計(jì)時(shí)               
                if((TEnd!=256) && (TEnd!=-255))led0=0;
                if(TEnd==256)led1=0;
                if(TEnd==-255)led2=0;
        }
}
回復(fù)

使用道具 舉報(bào)

12#
ID:19715 發(fā)表于 2014-8-10 23:46 | 只看該作者
32位的二進(jìn)制做計(jì)算,消耗時(shí)間多一點(diǎn)。
這樣可以確保在計(jì)算過(guò)程,不來(lái)中斷
回復(fù)

使用道具 舉報(bào)

13#
ID:19715 發(fā)表于 2014-8-10 23:53 | 只看該作者
同樣道理:原來(lái)癥狀2也可能出現(xiàn)于
TEnd==-65535,不過(guò)機(jī)辨少很多
回復(fù)

使用道具 舉報(bào)

14#
ID:19715 發(fā)表于 2014-8-11 10:35 | 只看該作者
也可以停止定時(shí)器TR0 =0;      
處理好數(shù)據(jù)之后,
才重新啟動(dòng)定時(shí)器, TR0 =1;
用定時(shí)初始值為0,        TL0 =TH0 = 0;
加上16位中斷溢出(比如uchar型:sys65ms),
構(gòu)成18位二進(jìn)制定時(shí)器
這樣定時(shí)時(shí)間可以去到16秒(晶振12mhz)

#include<reg52.h>
#define uchar8 unsigned char //8
#define uint16 unsigned int //16
#define ulong32 unsigned long //32
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
ulong32 TEnd=0;        //記錄時(shí)間
uchar8 sys65ms=0;//65ms累加,可以一直累加到16秒
void Timer0_Interrupt() interrupt 1//定時(shí)器0 1ms 中斷程序
{        
        sys65ms++;                //1ms累加,可以一直累加到49.7天
}
void Comm_Interrupt() interrupt 4//串行中斷程序
{
        if(TI)
        {
                TI = 0;
        }
        else if(RI)
        {        
              unsigned  char value;
                value=SBUF;
                        RI=0;
        }
}
void main()
{         //1ms@12.000MHz
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TMOD |= 0x01;                //設(shè)置定時(shí)器模式
        TL0 = 0;                //從0開(kāi)始跑時(shí)
        TH0 = 0;                //從0開(kāi)始跑時(shí)
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)
        //4800bps@12.000MHz
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        TMOD &= 0x0F;                //清除定時(shí)器1模式位
        TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
        TL1 = 0xF3;                //設(shè)定定時(shí)初值
        TH1 = 0xF3;                //設(shè)定定時(shí)器重裝值
        ET1 = 0;                //禁止定時(shí)器1中斷
        TR1 = 1;                //啟動(dòng)定時(shí)器1

           EA=1;//開(kāi)啟總中斷
        ES=1;//開(kāi)串口中斷
        ET0=1;//開(kāi)定時(shí)器0中斷
        while(1)
        {       ulong32 temp;
               TR0=0;
                       temp=sys65ms;//掃描周期記錄
               temp<<=8;        //掃描周期記錄
               temp+=TH0;        //掃描周期記錄
               temp<<=8;        //掃描周期記錄
               temp+=TL0;   //掃描周期記錄
                               
                sys65ms = 0;     //重新計(jì)時(shí)
                TL0 = 0;         //重新計(jì)時(shí)      
                        TH0 = 0;         //重新計(jì)時(shí)   
                TR0=1;                               
                if(TEnd<=temp)TEnd=temp;//掃描周期計(jì)時(shí)              
           if((TEnd!=256) && (TEnd!=-255))led0=0;
                if(TEnd==256)led1=0;
                if(TEnd==-255)led2=0;
        }
}
回復(fù)

使用道具 舉報(bào)

15#
ID:64911 發(fā)表于 2014-8-11 12:18 | 只看該作者
本帖最后由 xiehuipeng 于 2014-8-11 12:34 編輯
明白 發(fā)表于 2014-8-11 10:35
也可以停止定時(shí)器TR0 =0;      
處理好數(shù)據(jù)之后,
才重新啟動(dòng)定時(shí)器, TR0 =1;

非常感謝你 解決我大問(wèn)題了 應(yīng)該就是這個(gè)原因。。
是這樣的 我原本程序比這個(gè)復(fù)雜很多 因?yàn)橛幸陨线@個(gè)問(wèn)題 才把程序精簡(jiǎn)到最小化 便于大家看懂。
如果按照你這種解決方法 那我整個(gè)程序的計(jì)時(shí)架構(gòu)就整個(gè)變掉了
里面很多地方都要32bit計(jì)時(shí) 精度要1ms  大概要10幾或者20個(gè)獨(dú)立的計(jì)時(shí)器 每個(gè)計(jì)時(shí)器 是靠2個(gè)變量 初值和終值 互不干涉 獨(dú)立計(jì)時(shí)
計(jì)時(shí)規(guī)則就是:取當(dāng)前syst1ms為初值,計(jì)時(shí)到終值就是當(dāng)前syst1ms -初值

原本程序的主函數(shù)是這樣的
void main()
{        
        Timer0Init();//0-0定時(shí)器0初始化
        UartInit();//0-1串口初始化
        EA=1;//開(kāi)啟總中斷
        ES=1;//開(kāi)串口中斷
        ET0=1;//開(kāi)定時(shí)器0中斷
        while(1)
        {
                ulong32 temp;
                x_sysScan.TStar=x_sys1ms;//最大掃描周期 記錄初始值

                GetInput();//1-輸入采集
                Check();//2-主程序檢查
                SetOutput();//3-輸出刷新
                CommJudge();//4-通訊邏輯判斷

                temp=x_sys1ms-x_sysScan.TStar;
                if(x_sysScan.TEnd<=temp)x_sysScan.TEnd=temp;//最大掃描周期計(jì)算
        }
}


回復(fù)

使用道具 舉報(bào)

16#
ID:19715 發(fā)表于 2014-8-11 13:26 | 只看該作者
15個(gè)獨(dú)立的32bit計(jì)時(shí)器,
入棧出棧需要20條指令,
每一個(gè)32bit計(jì)時(shí)器,自加自判大概25條指令
這樣中斷要執(zhí)行的指令數(shù)差不多:400條
假如平均每一條指令需要時(shí)間2us,
中斷周期1毫秒,能夠執(zhí)行500條指令,
自身就用去400條,
剩下的100條指令時(shí)間,還要被串口所中斷,
。。
。。
主程序“跑得動(dòng)”嗎

回復(fù)

使用道具 舉報(bào)

17#
ID:64911 發(fā)表于 2014-8-11 13:41 | 只看該作者
本帖最后由 xiehuipeng 于 2014-8-11 13:42 編輯
明白 發(fā)表于 2014-8-11 13:26
15個(gè)獨(dú)立的32bit計(jì)時(shí)器,
入棧出棧需要20條指令,
每一個(gè)32bit計(jì)時(shí)器,自加自判大概25條指令

不是這樣的
定時(shí)器0中斷程序只有這3條指令 因?yàn)閟ys1ms可以一直累加運(yùn)行49.7天,一般機(jī)器運(yùn)行一天就關(guān)機(jī)重啟了
在主程序里 這20個(gè)32bit的計(jì)時(shí)器的初值 和終值計(jì)算都是用這同一個(gè)sys1ms來(lái)計(jì)算的
比如 ulong32 sys_time_初值[20],sys_time_終值[20];
void mian()
{
if(條件1==1)sys_time_初值[0]=sys1ms;
if(條件2==1)sys_time_初值[1]=sys1ms;
if(條件3==1)sys_time_初值[2]=sys1ms;
if(條件1==0)sys_time_終值[0]=sys1ms-sys_time_初值[0];
if(條件2==0)sys_time_終值[1]=sys1ms-sys_time_初值[1];
if(條件3==0)sys_time_終值[2]=sys1ms-sys_time_初值[2];
}
void Timer0_Interrupt() interrupt 1//0-0定時(shí)器0 1ms 中斷程序
{        
        TL0 = 0x18;                //設(shè)置定時(shí)初值
        TH0 = 0xFC;                //設(shè)置定時(shí)初值
        sys1ms++;                //1ms累加,可以一直累加到49.7天
}這就是我程序的核心思想。。
回復(fù)

使用道具 舉報(bào)

18#
ID:19715 發(fā)表于 2014-8-11 13:48 | 只看該作者
這樣可以用TR0停止和啟動(dòng)定時(shí)器,
回復(fù)

使用道具 舉報(bào)

19#
ID:19715 發(fā)表于 2014-8-11 13:49 | 只看該作者
void Timer0_Interrupt() interrupt 1//0-0定時(shí)器0 1ms 中斷程序
{        
        TL0 = 0x18;                //設(shè)置定時(shí)初值
        TH0 = 0xFC;                //設(shè)置定時(shí)初值
        sys1ms++;                //1ms累加,可以一直累加到49.7天
}
是3句c語(yǔ)言,不是3條指令
回復(fù)

使用道具 舉報(bào)

20#
ID:64911 發(fā)表于 2014-8-11 13:50 | 只看該作者
明白 發(fā)表于 2014-8-11 13:49
void Timer0_Interrupt() interrupt 1//0-0定時(shí)器0 1ms 中斷程序
{        
        TL0 = 0x18;         ...

嗯嗯 呵呵 寫(xiě)錯(cuò)了
回復(fù)

使用道具 舉報(bào)

21#
ID:64911 發(fā)表于 2014-8-11 13:59 | 只看該作者
明白 發(fā)表于 2014-8-11 13:48
這樣可以用TR0停止和啟動(dòng)定時(shí)器,

本來(lái)1ms定時(shí)器會(huì)間隔1ms累加 我如果在主程序里頻繁地停止和啟動(dòng)定時(shí)器 那應(yīng)該就不準(zhǔn)了吧 至少主程序執(zhí)行消耗的時(shí)間就不計(jì)算了吧。
回復(fù)

使用道具 舉報(bào)

22#
ID:19715 發(fā)表于 2014-8-11 14:00 | 只看該作者
程序方式:
void main()
{        各個(gè)初始化
        while(1)
        {               TR0=0;
                       //記錄時(shí)間:time1
                //記錄時(shí)間:time2
                //記錄時(shí)間:time3
              開(kāi)始重新計(jì)時(shí)                                 
                 //重新計(jì)時(shí)time1
                 //重新計(jì)時(shí) time2   
                  //重新計(jì)時(shí) time3   
                TR0=1;   
                  其他事情1                           
                 其他事情2   
        }
}
回復(fù)

使用道具 舉報(bào)

23#
ID:19715 發(fā)表于 2014-8-11 14:07 | 只看該作者
1ms,分辨率最大就只有1ms,
我前面介紹的18位二進(jìn)制定時(shí)器,分辨率可以去到1us
相差多少倍,
程序很多地方是依靠自己的糾結(jié),自己去衡量,然后自己做出處理,
想高精度,看一下匯編,
回復(fù)

使用道具 舉報(bào)

24#
ID:64911 發(fā)表于 2014-8-11 14:31 | 只看該作者
明白 發(fā)表于 2014-8-11 14:07
1ms,分辨率最大就只有1ms,
我前面介紹的18位二進(jìn)制定時(shí)器,分辨率可以去到1us
相差多少倍,

謝謝大哥 我看懂你這個(gè)計(jì)時(shí)方式了 非常巧妙 學(xué)習(xí)了。。
回復(fù)

使用道具 舉報(bào)

25#
ID:19715 發(fā)表于 2014-8-11 15:15 | 只看該作者
xiehuipeng 發(fā)表于 2014-8-11 14:31
謝謝大哥 我看懂你這個(gè)計(jì)時(shí)方式了 非常巧妙 學(xué)習(xí)了。。

這種計(jì)時(shí)方式,不用重裝定時(shí)器初值,其實(shí)也是一種“純天然”重裝定時(shí)器初值
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品视频 | 91av亚洲| 一区二区在线免费观看 | 一区二区三区亚洲 | 久久人人爽人人爽 | 欧美精三区欧美精三区 | 国产成人黄色 | 亚洲国产伊人 | 日本免费一区二区三区四区 | 一级黄色网页 | 玖操| 亚洲麻豆 | 五月天激情电影 | 欧美在线视频一区二区 | 一区二区三区在线免费观看 | 成人深夜福利在线观看 | 免费观看色 | 国产美女永久免费无遮挡 | 国产精品视频一区二区三 | 欧美综合一区 | 欧一区| 91麻豆精品国产91久久久资源速度 | 91电影院| 狠狠操狠狠搞 | 成人亚洲精品 | 中文字幕乱码亚洲精品一区 | 亚洲视频免费在线观看 | 国产精品一区二区久久久久 | 免费久久精品视频 | 亚洲成人日韩 | 免费成人av | 婷婷精品| 一区二区精品 | 国产精品一区在线观看 | 色久五月 | 国产精品欧美一区二区 | 国产精产国品一二三产区视频 | 欧美一区二区 | 久久99精品久久久久久国产越南 | 久久欧美高清二区三区 | 在线观看亚洲 |