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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

這段單片機程序具體什么意思?為什么先要給TMR0兩個計數

[復制鏈接]
跳轉到指定樓層
樓主
for(i =y;i>0;i--)
     {
     TMR0 = 0xD9; //延時10ms
     CountOld  = TMR0;
     CountNew = TMR0;
     while (CountNew  >= CountOld)   
     {
         CountOld = CountNew;
         CountNew = TMR0;
     }
     }
為什么先要給TMR0兩個計數

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:624769 發表于 2021-12-4 23:44 | 只看該作者
代碼不全,沒辦法給你解釋清楚。
只能告訴你,有另外一個中斷程序,會改寫 TMR0

     while (CountNew  >= CountOld)   
     {
         CountOld = CountNew;
         CountNew = TMR0;
     }
當 TMR0 在另外一個中斷的作用下,減小的時候,會跳出 這個 while, 反之,會死在這個循環里 至于具體如何跳出這個外面這個for, 要看y的定義了。
回復

使用道具 舉報

板凳
ID:216579 發表于 2021-12-6 08:49 | 只看該作者
int mydelay_ms(int y)  //延時 y*10 ms
{
    uchar i;
   

     for(i =y;i>0;i--)
     {
     TMR0 = 0xD9; //延時10ms
     CountOld  = TMR0;
     CountNew = TMR0;
     while (CountNew  >= CountOld)   
     {
         CountOld = CountNew;
         CountNew = TMR0;
     }
     }
}
回復

使用道具 舉報

地板
ID:216579 發表于 2021-12-6 08:49 | 只看該作者
int mydelay_ms(int y)  //延時 y*10 ms
{
    uchar i;
   

     for(i =y;i>0;i--)
     {
     TMR0 = 0xD9; //延時10ms
     CountOld  = TMR0;
     CountNew = TMR0;
     while (CountNew  >= CountOld)   
     {
         CountOld = CountNew;
         CountNew = TMR0;
     }
     }
}
回復

使用道具 舉報

5#
ID:155507 發表于 2021-12-6 10:55 | 只看該作者
PIC16f877a 具有三個獨立的定時器,可用作定時器、計數器或用于 PWM 生成。

Timer 0
TMR0 模塊是一個 8 位定時器/計數器,具有以下特性:

  • 8位定時器/計數器
  • 可讀可寫
  • 8 位軟件可編程預分頻器
  • 內部或外部時鐘選擇
  • 從 FFh 溢出到 00h 時中斷
  • 外部時鐘的邊沿選擇




這段單片機程序具體的意思是用定時器實現準確的延時程序




回復

使用道具 舉報

6#
ID:216579 發表于 2021-12-6 11:02 | 只看該作者
angmall 發表于 2021-12-6 10:55
PIC16f877a 具有三個獨立的定時器,可用作定時器、計數器或用于 PWM 生成。

Timer 0

單片機用的PIC10F200, 沒有中斷
回復

使用道具 舉報

7#
ID:624769 發表于 2021-12-6 16:51 | 只看該作者
guhuawei19 發表于 2021-12-6 11:02
單片機用的PIC10F200, 沒有中斷

不管有沒有中斷, TMR0 是定時器吧? 理論上 TMR0 向上計數吧? 當TMR0 溢出之后,

while (CountNew  >= CountOld)   
     {
         CountOld = CountNew;
         CountNew = TMR0;
     }
這段代碼里面的, CountNew 就 小于 CountOld 了吧? 這個時候 就會跳出這個 while, for 里面的 i 就會減1, 減到0 延時結束,子函數返回。不過,沒明白為啥搞這么復雜……, 感覺這么寫就可以了吧……

int mydelay_ms(int y)  //延時 y*10 ms
{
    while(y--)
     {
     TMR0 = 0xD9; //延時10ms
     while(TMR0>=0xD9);
     }
}

回復

使用道具 舉報

8#
ID:401564 發表于 2021-12-6 22:53 | 只看該作者
guhuawei19 發表于 2021-12-6 08:49
int mydelay_ms(int y)  //延時 y*10 ms
{
    uchar i;

XC8編譯器自帶延時函數  __delay_ms()
PICC編譯器好像功能更多,延時函數肯定是有的
已經有現成的,就不需要去折騰那么多
為什么要兩個計數,有可能就是單純的增加指令來消耗時間而已
CountOld CountNew 是全局變量嗎?說不定在其它地方還有用得著的
回復

使用道具 舉報

9#
ID:216579 發表于 2021-12-11 12:59 | 只看該作者
Y_G_G 發表于 2021-12-6 22:53
XC8編譯器自帶延時函數  __delay_ms()
PICC編譯器好像功能更多,延時函數肯定是有的
已經有現成的,就不 ...

全局變量
回復

使用道具 舉報

10#
ID:990881 發表于 2021-12-11 14:54 | 只看該作者
一個是保存的0XD9一個保存實時的TMR0值,當溢出時退出while循環即延時10ms
回復

使用道具 舉報

11#
ID:962286 發表于 2021-12-29 10:50 | 只看該作者
188610329 發表于 2021-12-6 16:51
不管有沒有中斷, TMR0 是定時器吧? 理論上 TMR0 向上計數吧? 當TMR0 溢出之后,

while (CountNew  > ...

你的理解是對的,不過這種阻塞延時直接用編譯器的延時宏即可,用定時器反而麻煩且浪費資源。以PIC10F200為例:
  1. #define _XTAL_FREQ                4000000

  2. void DelayXmS(unsigned int _Delay)
  3. {
  4.         unsigned int i;

  5.         for(i = 0; i < _Delay; i++)
  6.         {
  7.                 __delay_ms(1);
  8.                 CLRWDT();
  9.         }
  10. }
復制代碼
__delay_ms(x) 是一個延時宏,并非函數,x只能是立即數,所以得封裝一下。

當然對于大部分應用,很多阻塞延時是可以用狀態機輪詢來實現的,這樣CPU資源不會被阻塞占用,整個系統的實時性會很好控制。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品自产拍 | 在线免费毛片 | 在线天堂免费中文字幕视频 | 亚洲高清在线观看 | 老司机深夜福利网站 | 成人精品一区亚洲午夜久久久 | 久久久久无码国产精品一区 | 午夜精品久久久久久久 | 亚洲免费在线观看 | 亚洲av毛片 | 在线国产一区二区 | 国产精品欧美一区二区三区不卡 | www4虎 | 成人日韩 | 国产精品久久亚洲7777 | 羞羞视频网页 | 亚洲精品在线91 | 中文字幕在线观看日韩 | 欧美xxxx做受欧美 | 色婷婷久久久亚洲一区二区三区 | 日韩在线播放一区 | 男女羞羞视频大全 | 成人福利在线观看 | 蜜桃视频在线观看免费视频网站www | 亚洲精品在线视频 | www.欧美 | 国产一区二区三区免费 | 伊人春色在线观看 | 欧美成人自拍视频 | 精品国产一区二区三区性色av | 国产精品视频久久久 | 国产精品一区二区三区久久久 | 日韩精品在线观看网站 | 欧美亚州| 国产精品美女久久久久久久网站 | 中文字幕在线视频精品 | 亚洲成人免费视频在线观看 | av在线一区二区三区 | 欧美中文字幕 | 国产精品视频一二三区 | 日本黄色影片在线观看 |