欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 關(guān)于計(jì)數(shù)器程序的兩個(gè)問(wèn)題咨詢 [打印本頁(yè)]

作者: mokedeng    時(shí)間: 2013-9-3 21:02
標(biāo)題: 關(guān)于計(jì)數(shù)器程序的兩個(gè)問(wèn)題咨詢
#include<reg51.h> //頭文件
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

unsigned char temp[8];
unsigned char dispcount;
unsigned char T0count;
unsigned char timecount;
bit flag;
unsigned long x;


unsigned char TempBuffer[10];



sbit lcde=P2^7;          //使能端
sbit lcdrs=P2^6;   //復(fù)位端
sbit lcdrw=P2^5; //寫數(shù)據(jù)端

void IntToStr(unsigned int t, unsigned char *str, unsigned char n)
{
        unsigned char a[5]; char i, j;                                         
        a[0]=(t/10000)%10;         //取得整數(shù)值到數(shù)組                 
        a[1]=(t/1000)%10;                                             
        a[2]=(t/100)%10;                                             
        a[3]=(t/10)%10;                                               
        a[4]=(t/1)%10;                                                

        for(i=0; i<5; i++)         //轉(zhuǎn)成ASCII碼                     
                a=a+'0';                                            
        for(i=0; a=='0' && i<=3; i++);                             
        for(j=5-n; j<i; j++)       //填充空格                        
                { *str=' ';  str++; }                                    
        for(; i<5; i++)                                               
                { *str=a; str++; }  //加入有效的數(shù)字                  
        *str='\0';
}



/*******************************************************************/
/*                                                                                                                                  */
/* 延時(shí)子程序                                                                                                                  */
/*                                                                                                                                  */
/*******************************************************************/
void delay(uint z)
{
        uint a,y;
        for(a=z;a>0;a--)
                for(y=110;y>0;y--);
}


main()
{
        unsigned char i;
        init();

        while(1)
         {
             if(flag==1)
               {
                 flag=0;
                 x=T0count*65536+TH0*256+TL0;
                 IntToStr(x, &TempBuffer[0], 5);


                         while(TempBuffer != '\0')
                         {
                                  write_date(TempBuffer);
                                i++;
                                delay(300);
                         }
                         write_com(0x01);

                 timecount=0;
                 T0count=0;
                 TH0=0;
                 TL0=0;
                 TR0=1;
                         TR1=1;
                         i = 0;
               }
           }
               
}




這個(gè)是我在網(wǎng)上找到的一個(gè)計(jì)數(shù)器程序,里面我有兩個(gè)地方?jīng)]有看懂,我用紅色的標(biāo)注出來(lái)了的
for(i=0; i<5; i++)         //轉(zhuǎn)成ASCII碼                     
                a=a+'0';          他這里是寫出計(jì)數(shù)的位 ,后面加一個(gè) '0'是干什么的呢                                     
        for(i=0; a=='0' && i<=3; i++);                             
        for(j=5-n; j<i; j++)       //填充空格                        
                { *str=' ';  str++; }            這個(gè)語(yǔ)句我沒(méi)有看懂,         *str函數(shù)不怎么明白                    
        for(; i<5; i++)                                               
                { *str=a; str++; }  //加入有效的數(shù)字                  
        *str='\0';

第二個(gè)地方
x=T0count*65536+TH0*256+TL0;        這個(gè)X是表示計(jì)數(shù)值的大小,那怎么等式為什么要T0count*65536+TH0*256+TL0
                 IntToStr(x, &TempBuffer[0], 5);   &TempBuffer[0]是什么意思呢


                         while(TempBuffer != '\0')
                         {
                                  write_date(TempBuffer);

就這些地方不怎么明白,麻煩幫我解釋一下   不勝感激。。。


作者: ahshmj    時(shí)間: 2013-9-4 08:12
ASCII碼的"0"的值是0x30,1=0x31......,9=0x39,所以如果a=5,5+0x30=0x35就是5的ASCII碼了。注意程序中的"0"是0的ASCII碼,是0x30,也可以是48(10進(jìn)制)。
指針問(wèn)題,你真的要看看資料了。
你那里說(shuō)的T0count*65536+TH0*256+TL0,T0COUNT是TH0的進(jìn)位,也就是TH0溢出次數(shù),溢出一次是0xffff(10進(jìn)制 65536)。大概初裝值=0才會(huì)這樣。

&TempBuffer[0],是取地址運(yùn)算,提取TempBuffer[0]的地址。*str是指針,取值。
舉例子:*str=&TempBuffer[0],那么str就等于TempBuffer[]數(shù)組的首地址,也就是TempBuffer[0]的地址。而b=*str,就是和b=TempBuffer[0]等效。但是使用指針可以對(duì)指針進(jìn)行運(yùn)算、賦值(例如:str++),否則不是很方便。
作者: mokedeng    時(shí)間: 2013-9-4 10:05
ahshmj 發(fā)表于 2013-9-4 08:12
ASCII碼的"0"的值是0x30,1=0x31......,9=0x39,所以如果a=5,5+0x30=0x35就是5的ASCII碼了。注意程序中的" ...

首先非常的感謝你給我解答

//count interrupt
void t0(void) interrupt 1 using 0
{
        T0count++;
        TH0=0;
        TL0=0;
}

這個(gè)是計(jì)數(shù)器的中斷
那就是說(shuō)T0counter是來(lái)一個(gè)脈沖就計(jì)數(shù)一下
但是  T0count*65536+TH0*256+TL0  這個(gè)我真沒(méi)有看懂,其它你說(shuō)的都懂了
作者: ahshmj    時(shí)間: 2013-9-5 08:30
本帖最后由 ahshmj 于 2013-9-5 09:39 編輯

你的程序不全,但是就這一小段可以肯定是不對(duì)的,定時(shí)器溢出時(shí),TH0和TL0本來(lái)就已經(jīng)置0,如果再賦值就會(huì)造成計(jì)時(shí)不準(zhǔn)(你可以在keil里面調(diào)試時(shí)看看),因?yàn)檫@兩條指令和TIME0中斷跳轉(zhuǎn)也是要占用時(shí)間。我估計(jì)應(yīng)該是這樣的:          可能你的定時(shí)器工作模式 (TMOD=09),定時(shí)器的啟動(dòng)或停止受int0的控制。前面一個(gè)脈沖到時(shí),啟動(dòng)定時(shí)器,下一個(gè)脈沖到時(shí)停止定時(shí)器。(int0可以在產(chǎn)生中斷的同時(shí),控制定時(shí)器TIME0)
  
         T0count不是一個(gè)脈沖計(jì)一個(gè)數(shù),而是定時(shí)器溢出一次計(jì)一個(gè)數(shù)。
          如果脈沖間隔大于定時(shí)器0xff的計(jì)時(shí)時(shí),另設(shè)一個(gè)計(jì)數(shù)器,記錄定時(shí)器的溢出次數(shù)。
         
         當(dāng)int0產(chǎn)生中斷時(shí),停止計(jì)時(shí),這時(shí)候的計(jì)數(shù)值的高8位在 T0count,  中8位在TH0,低8位在TL0。TH0向T0count進(jìn)位是滿65536(0xffff+1)進(jìn)位1,所以T0count每一個(gè)數(shù)值就等于65536,而TL0向TH0進(jìn)位 是滿0xff+1(255+1溢出),所以TH0的權(quán)為0xff+1,就是TH0*256,TL0的權(quán)是1,而TL0的權(quán)為1,直接加。
             如果脈沖間隔小于定時(shí)器的最大值0XFF,也可以這樣:在一定的時(shí)間內(nèi)記錄INT0接收的外部脈沖數(shù),但計(jì)算公式不是你上面這樣的。  







作者: 13620819446    時(shí)間: 2013-10-14 00:30
支持支持、、




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1