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

QQ登錄

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

搜索

求解,為什么我單片機(jī)定時(shí)函數(shù)沒(méi)有用呢?

查看數(shù): 2304 | 評(píng)論數(shù): 9 | 收藏 0
關(guān)燈 | 提示:支持鍵盤(pán)翻頁(yè)<-左 右->
    組圖打開(kāi)中,請(qǐng)稍候......
發(fā)布時(shí)間: 2019-11-25 12:32

正文摘要:

我定時(shí)50MS,數(shù)碼管顯示+1. 但是仿真時(shí),延遲函數(shù)卻沒(méi)有用上,這是怎么回事呢?#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit WE=P2^0; sbit DU= ...

回復(fù)

ID:302973 發(fā)表于 2019-11-25 22:01
發(fā)現(xiàn)問(wèn)題了,display()沒(méi)有加變量 i,所以沒(méi)有效果。uchar i  也應(yīng)該改成 uint i。不然超過(guò)256就不加了 。。問(wèn)題終結(jié)。謝謝各位大佬。
ID:400014 發(fā)表于 2019-11-25 21:36
void timer0_init() interrupt 0
{
        TMOD=0x01;
        TL0=(65536-50000)%256;
        TH0=(65536-50000)/256;
        TR0=1;
              EA=1;     
        ET0=1;
}
ID:644988 發(fā)表于 2019-11-25 16:49
void timer0_init()
{
        TMOD=0x01;
        TL0=(65536-50000)%256;
        TH0=(65536-50000)/256;
        TR0=1;
              EA=1;     
        ET0=1;
}
ID:302973 發(fā)表于 2019-11-25 16:31
luozhao 發(fā)表于 2019-11-25 15:20
總中斷沒(méi)打開(kāi),初始化那里沒(méi)看到有

我EA=1; 后面寫(xiě)了,但是依然沒(méi)有用。  定時(shí)器不延遲,只有delay才有延遲效果。
ID:400014 發(fā)表于 2019-11-25 16:30
void timer0_init()
{
        TMOD=0x01;
        TL0=(65536-2000)%256;
        TH0=(65536-2000)/256;
        TF0=0;
        TR0=1;
}


這段函數(shù)少了兩個(gè),一個(gè)是函數(shù)名后面還要跟一個(gè) interrupt 0   ,還有一個(gè)是函數(shù)體里沒(méi)有EA=1 打開(kāi)總開(kāi)
ID:302973 發(fā)表于 2019-11-25 16:27
wulin 發(fā)表于 2019-11-25 15:36
動(dòng)態(tài)數(shù)碼管顯示不能像你這樣寫(xiě),定時(shí)時(shí)間太長(zhǎng)了,會(huì)出錯(cuò)。給你改了。

我這么寫(xiě)的原因是因?yàn)橄胍?個(gè)數(shù)碼管顯示個(gè)位,隨后顯示10位的時(shí)候才會(huì)打開(kāi)第二個(gè)數(shù)碼管。直到千位的時(shí)候才會(huì)全部打開(kāi)4個(gè)數(shù)碼管。 我也初學(xué)者,自己琢磨著搞
ID:213173 發(fā)表于 2019-11-25 15:36
動(dòng)態(tài)數(shù)碼管顯示不能像你這樣寫(xiě),定時(shí)時(shí)間太長(zhǎng)了,會(huì)出錯(cuò)。給你改了。
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit WE=P2^0;
  6. sbit DU=P2^1;
  7. sbit S1=P3^4;
  8. sbit S2=P3^5;
  9. uchar i,j;
  10. uint num,Q,W,E,R;
  11. uchar code duan[]={
  12.     0x3F,  //"0"
  13.     0x06,  //"1"
  14.     0x5B,  //"2"
  15.     0x4F,  //"3"
  16.     0x66,  //"4"
  17.     0x6D,  //"5"
  18.     0x7D,  //"6"
  19.     0x07,  //"7"
  20.     0x7F,  //"8"
  21.     0x6F,  //"9"
  22.     0x77,  //"A"
  23.     0x7C,  //"B"
  24.     0x39,  //"C"
  25.     0x5E,  //"D"
  26.     0x79,  //"E"
  27.     0x71,  //"F"
  28.     0x76,  //"H"
  29. };
  30. /*
  31. void fangdou()
  32. {
  33.         uint a;
  34.         for(a=0;a<2400;a++);
  35. }
  36. void delay(uint z)
  37. {
  38.         uint x,y;
  39.         for(x=z;x>0;x--)
  40.                 for(y=120;y>0;y--);
  41. }*/
  42. void display()
  43. {        
  44.         P0=0x00;//消隱
  45.         DU=1;
  46.         DU=0;
  47.         if(j==0)
  48.         {
  49.                 P0=0xfe;
  50.                 WE=1;
  51.                 WE=0;
  52.                 P0=duan[i/1000%10];
  53.                 DU=1;
  54.                 DU=0;
  55.         }
  56.         if(j==1)
  57.         {
  58.                 P0=0xfd;
  59.                 WE=1;
  60.                 WE=0;
  61.                 P0=duan[i/100%10];
  62.                 DU=1;
  63.                 DU=0;
  64.         }
  65.         if(j==2)
  66.         {
  67.                 P0=0xfb;
  68.                 WE=1;
  69.                 WE=0;
  70.                 P0=duan[i/10%10];
  71.                 DU=1;
  72.                 DU=0;
  73.         }
  74.         if(j==3)
  75.         {
  76.                 P0=0xf7;
  77.                 WE=1;
  78.                 WE=0;
  79.                 P0=duan[i%10];
  80.                 DU=1;
  81.                 DU=0;
  82.         }
  83.         j++;
  84.         if(j==4)
  85.                 j=0;
  86. }
  87. void timer0_init()
  88. {
  89.         TMOD=0x01;
  90.         TL0=(65536-2000)%256;
  91.         TH0=(65536-2000)/256;
  92.         TF0=0;
  93.         TR0=1;
  94. }
  95. void main()
  96. {
  97.         timer0_init();
  98.         while(1)
  99.         {
  100.                 if(TF0==1)
  101.                 {
  102.                         TF0=0;
  103.                         TL0=(65536-2000)%256;
  104.                         TH0=(65536-2000)/256;
  105.                         num++;
  106.                         if(num>=500)
  107.                         {
  108.                                 num=0;
  109.                                 i++;
  110.                                 if(i>9999)
  111.                                         i=0;        
  112.                         }
  113.                         display();
  114.                 }
  115.         }
  116. }
  117.       
復(fù)制代碼
ID:625113 發(fā)表于 2019-11-25 15:20
總中斷沒(méi)打開(kāi),初始化那里沒(méi)看到有
ID:25310 發(fā)表于 2019-11-25 14:29
EA 沒(méi)打開(kāi)吧!

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

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

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