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

QQ登錄

只需一步,快速開始

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

如何解決單片機(jī)t0和t1不能同時(shí)用的問題?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:841401 發(fā)表于 2023-5-23 23:42 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)定時(shí)器0做pwm輸出,定時(shí)器1做超聲波測(cè)距計(jì)時(shí)。但是不能同時(shí)使用,哪位可以幫忙解決下這個(gè)問題

  1. #include "reg52.h"
  2. #include "intrins.h"

  3. sbit tr=P1^4;
  4. sbit echo=P1^3;
  5. sbit led=P1^5;
  6. sbit servo=P2^7;

  7. int num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段選
  8. int num2[]={0x01,0x02,0x04,0x08};
  9. int compare, count = 0;

  10. void Delay10us()                //@11.0592MHz
  11. {
  12.         unsigned char i;

  13.         _nop_();
  14.         i = 25;
  15.         while (--i);
  16. }

  17. void display(int a)
  18. {
  19.         unsigned char i;
  20.         for(i=0;i<4;i++)
  21.         {
  22.                 P2=num2[i];
  23.                 switch(i)
  24.                 {
  25.                         case 0:
  26.                                 P0=num[a/1000];
  27.                         break;
  28.                         case 1:
  29.                                 P0=num[a/100%10];
  30.                         break;
  31.                         case 2:
  32.                                 P0=num[a/10%10];
  33.                         break;
  34.                         case 3:
  35.                                 P0=num[a%10];
  36.                         break;
  37.                 }
  38.     Delay10us();
  39.                 P0=0xff;
  40.                 Delay10us();
  41.         }
  42. }

  43. void timer0_init(void)
  44. {
  45.         TMOD=0X11;//定時(shí)器模式選擇
  46.         EA=1;//總中斷
  47.         ET1=1;//定時(shí)器1中斷
  48.         TH1=0;
  49.         TL1=0;
  50.         TL0 = 0x9c;                //設(shè)置定時(shí)初值
  51.         TH0 = 0xff;                //設(shè)置定時(shí)初值
  52.         TR0=1;//定時(shí)器開關(guān)
  53.         TR1=0;
  54. }

  55.         void setangle(int anglenum)
  56. {
  57.         compare = anglenum + 7;
  58. }


  59. void main(void)
  60. {
  61.         int ss,a=0;
  62.         int i;
  63.         timer0_init();
  64.         loop:tr=1;
  65.         Delay10us();
  66.         Delay10us();
  67.         tr=0;
  68.         while(!echo)
  69.         {
  70.                 i++;
  71.                 if(i>20)
  72.                 {
  73.                         goto loop;
  74.                 }
  75.         }
  76.         TR1=1;
  77.         while(echo);
  78.         TR1=0;
  79.         ss=(TH1*256+TL1-20)*0.174;
  80.         TH1=0;
  81.         TL1=0;
  82.         display(ss);
  83.         for(i=0;i<6;i++)
  84.         {
  85.                 Delay10us();
  86.         }
  87.         if(ss <= 500)
  88.         {
  89.                 led = 1;
  90.         }else{
  91.                 led = 0;
  92.         }
  93.         setangle(0);
  94. }

  95. void timer0() interrupt 1
  96. {
  97.         count ++;
  98.         if(count <= compare)
  99.         {
  100.                 servo = 1;
  101.         }else{
  102.                 servo = 0;
  103.         }
  104.         if(count == 200)
  105.         {
  106.                 count = 0;
  107.         }        
  108.         TL0 = 0x9c;                //設(shè)置定時(shí)初值
  109.         TH0 = 0xff;                //設(shè)置定時(shí)初值
  110. }
復(fù)制代碼

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

使用道具 舉報(bào)

沙發(fā)
ID:59202 發(fā)表于 2023-5-24 09:22 | 只看該作者
這程序?qū)懙模。。ain函數(shù)里主要程序要在一個(gè)死循環(huán)里,要不能執(zhí)行下去也一下就停止了啊,還有
goto loop中的loop在哪啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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