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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6927|回復: 12
收起左側

單片機io推免不受控制問題 P5M0=0x00;P5M1=0xff;

[復制鏈接]
ID:325735 發表于 2019-2-17 12:14 | 顯示全部樓層 |閱讀模式
這么寫完不知道哪里不對  P5M0=0x00;P5M1=0xff; 加上后io就不受控制了  刪掉這2個就可以  但不是推免輸出 高電位推不動

單片機源程序如下:
  1. #include "reg52.h"
  2. #include <intrins.H>
  3. #define uchar unsigned char //宏定義字符型變量
  4. #define uint  unsigned int        //宏定義整型變量
  5. /********************************************************************
  6.                             波特率設定
  7. *********************************************************************/
  8. //#define BAUD 0XF400  //1200bps@ 11.0592MHZ
  9. //#define BAUD 0XFA00  //2400bps@ 11.0592MHZ
  10. //#define BAUD 0XFD00  //4800bps@ 11.0592MHZ
  11. #define BAUD 0XFE80  //9600bps@ 11.0592MHZ
  12. //#define BAUD 0XFF40  //19200bps@ 11.0592MHZ
  13. //#define BAUD 0XFFA0  //38400bps@ 11.0592MHZ

  14. uchar dat; //用于存儲單片機接收發送緩沖寄存器SBUF里面的內容
  15. /********************************************************************
  16.                             I/O定義
  17. *********************************************************************/
  18. sfr P5M1 = 0xC9;
  19. sfr P5M0 = 0xCA;

  20. sbit key1=P3^2;         //定義單片機P3口的第3位 (即P3.2)//為輸入
  21. sbit key2=P3^3;

  22. sbit LED1=P5^4;         //定義單片機P3口的第3位 (即P3.3)//為輸出
  23. sbit LED2=P5^5;         //定義單片機P3口的第3位 (即P3.3)//為輸出


  24. sbit RXB=P3^0;
  25. sbit TXB=P3^1;





  26. /********************************************************************
  27.                             定義特殊寄存器
  28. *********************************************************************/
  29. sfr AUXR  =  0x8E;   //輔助寄存器

  30. /********************************************************************
  31.                            定義數據類型
  32. *********************************************************************/
  33. uchar  TBUF,RBUF; //發送的數據
  34. uchar TDAT,RDAT;
  35. uchar TCNT,RCNT;
  36. uchar TBIT,RBIT;
  37. uint TING,RING;
  38. uint TEND,REND;

  39. void UART_INIT(); //聲明函數

  40. uchar t,r;                  //定義數據類型
  41. uchar but[16];          //數據存儲數組
  42. /********************************************************************
  43.                             延時函數
  44. *********************************************************************/
  45. void delay(uchar t)
  46. {
  47.   uchar i,j;
  48.    for(i=0;i<t;i++)
  49.    {
  50.             for(j=110;j>0;j--);
  51.          { ;
  52.          }
  53.    }
  54. }

  55. /********************************************************************
  56.                             主函數
  57. *********************************************************************/
  58. void main()
  59. {

  60.       
  61. P5M0=0x00;//這里設置推免輸出
  62. P5M1=0xff;
  63.       
  64. TMOD=0X00;           //定時器T0設定
  65. AUXR=0X80;           //輔助寄存器
  66. TL0=BAUD;           //十六位寄存器
  67. TH0=BAUD>>8;   //十六位寄存器
  68. TR0=1;                   //開定時器
  69. ET0=1;
  70. PT0=1;
  71. EA=1;                   //開總中斷
  72. UART_INIT();   //串口初始化
  73. while(1)           //無線循環
  74. {
  75. //      if(key1==0){delay(20);if(key1==0){TBUF = 0xFC; LED1=0;        TING=1;        while( !key1);LED1=1;}delay(20);} //如果key1按鍵按下,P3.3口輸出低電平,指示燈亮。。
  76.       
  77.         if(key1==0){delay(20);if(key1==0){TBUF = 0xFA;         TING=1;        while( !key1); ;}delay(20);}
  78.         if(key2==0){delay(20);if(key2==0){TBUF = 0xFB;         TING=1;        while( !key2); ;}delay(20);}        
  79.                        
  80. if(REND)
  81.   {
  82.    REND=0;
  83.    r++;
  84.    //but[r++&0x0f]=RBUF;
  85.    dat=RBUF;
  86.    }
  87.   if(TEND)
  88.    {
  89.    if(t!=r)
  90.      {
  91.          TEND=0;
  92. //         TBUF=dat;
  93. switch(dat) //接收數據判斷
  94. {

  95. case 'G': LED1=1;delay(200         );TBUF = dat;dat=0xee;break;           //  開,并返回數據值
  96. case 'K': LED1=0;delay(10);TBUF = dat;dat=0xee;break;           //  關,并返回數據值
  97. case 'A': LED2=1;delay(200         );TBUF = dat;dat=0xee;break;           //  開,并返回數據值
  98. case 'B': LED2=0;delay(10);TBUF = dat;dat=0xee;break;           //  關,并返回數據值
  99.       
  100.         //case 'Y': if(LED1==1){TBUF = 'W';}if(LED1==0){TBUF = 'X';}delay(10);dat=0xee;break;           //  讀輸出口狀態,并返回數據值
  101. //case 'Z': LED1=!LED1;delay(10);TBUF = dat;dat=0xee;break;  //  輸出口取反
  102. default:break;                                           //  跳出
  103. }
  104.          t++;
  105.          //TBUF=but[t++&0x0f];
  106.          TING=1;
  107.          }
  108.    }
  109. }

  110. }

  111. /********************************************************************
  112.                             定時器T0
  113. *********************************************************************/
  114. void tm0()interrupt 1 using 1
  115. {
  116. if(RING)
  117.   {
  118.    if(--RCNT==0)
  119.     {
  120.          RCNT=3;
  121.          if(--RBIT==0)
  122.         {
  123.                  RBUF=RDAT;
  124.                  RING=0;
  125.          REND=1;
  126.                 }
  127.                 else
  128.                 {
  129.                  RDAT>>=1;
  130.                  if(RXB)RDAT|=0X80;
  131.                 }

  132.     }
  133.   }
  134.     else if(!RXB)
  135.         {
  136.          RING=1;
  137.          RCNT=4;
  138.          RBIT=9;
  139.         }
  140.     if(--TCNT==0)
  141.         {
  142.         TCNT=3;
  143.         if(TING)
  144.         {
  145.           if(TBIT==0)
  146.           {
  147.           TXB=0;
  148.           TDAT=TBUF;
  149.           TBIT=9;
  150.           }
  151.           else
  152.           {
  153.           TDAT>>=1;
  154.           if(--TBIT==0)
  155.           {
  156.            TXB=1;
  157.            TING=0;
  158.            TEND=1;
  159.           }
  160.           else
  161.           {
  162.           TXB=CY;
  163.           }
  164.           }
  165.         }
  166.         }
  167. }
  168. /********************************************************************
  169.               功能:串口初始化,波特率9600,方式1
  170. *********************************************************************/
  171. void UART_INIT()
  172. {
  173. TING=0;
  174. RING=0;

  175. TEND=1;
  176. REND=0;

  177. TCNT=0;
  178. RCNT=0;
  179. }

  180. /********************************************************************
  181.                             結束
  182. *********************************************************************/
復制代碼





回復

使用道具 舉報

ID:325735 發表于 2019-2-17 12:16 | 顯示全部樓層
求助下 推免設置的不對嗎
回復

使用道具 舉報

ID:213173 發表于 2019-2-17 17:40 | 顯示全部樓層
kaixin8318 發表于 2019-2-17 12:16
求助下 推免設置的不對嗎

P5M0=0x00;P5M1=0xff; 你這是設置為高阻,推挽是P5M1=0x00;P5M0=0xff; 。
回復

使用道具 舉報

ID:401564 發表于 2019-2-17 18:13 | 顯示全部樓層
你把端口設定成推挽之后,單片機就讀不到這個IO的端口狀態了,所以就不受控制了.
如果你想要有輸出又能讀取狀態,那就不人設定IO的輸出模式,如果輸出要有一定的電流,那就把P5端口內置的上拉電阻使能.
回復

使用道具 舉報

ID:310519 發表于 2019-2-17 18:32 | 顯示全部樓層
你這是用的STC的單片機吧?

P5M0=0x00;P5M1=0xff; 這是高阻啊。

應該這樣:
P5M0=0xff;P5M1=0x00;
回復

使用道具 舉報

ID:203000 發表于 2019-2-17 22:05 | 顯示全部樓層
推挽設置不對,要單獨寫一段函數:
void port_mode()            // 端口模式
{
        P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
        P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0xFF;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
在void main()加port_mode();
void main()
{
        port_mode();
回復

使用道具 舉報

ID:325735 發表于 2019-2-17 23:40 | 顯示全部樓層
wulin 發表于 2019-2-17 17:40
P5M0=0x00;P5M1=0xff; 你這是設置為高阻,推挽是P5M1=0x00;P5M0=0xff; 。

謝謝您  我是剛開始研究,什么都不懂呢
我試試
回復

使用道具 舉報

ID:325735 發表于 2019-2-17 23:40 | 顯示全部樓層
謝謝大家!我會逐一進行試驗。我是小白,剛開始學習
回復

使用道具 舉報

ID:325735 發表于 2019-2-17 23:53 | 顯示全部樓層
wulin 發表于 2019-2-17 17:40
P5M0=0x00;P5M1=0xff; 你這是設置為高阻,推挽是P5M1=0x00;P5M0=0xff; 。

是我馬虎了,修改過來就好了
回復

使用道具 舉報

ID:325735 發表于 2019-2-17 23:54 | 顯示全部樓層
Y_G_G 發表于 2019-2-17 18:13
你把端口設定成推挽之后,單片機就讀不到這個IO的端口狀態了,所以就不受控制了.
如果你想要有輸出又能讀取 ...

謝謝您回復
回復

使用道具 舉報

ID:325735 發表于 2019-2-17 23:54 | 顯示全部樓層
diy1997 發表于 2019-2-17 18:32
你這是用的STC的單片機吧?

P5M0=0x00;P5M1=0xff; 這是高阻啊。

謝謝指導 正解
回復

使用道具 舉報

ID:158375 發表于 2019-2-18 08:18 | 顯示全部樓層
看資料不仔細,看資料很重要,注意細節。
回復

使用道具 舉報

ID:325735 發表于 2019-2-18 14:53 | 顯示全部樓層
笨笨兔 發表于 2019-2-18 08:18
看資料不仔細,看資料很重要,注意細節。

謝謝,剛開始接觸編程。沒看仔細
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级在线观看 | 欧美一区二区三区大片 | 北条麻妃视频在线观看 | 95国产精品 | 特级a欧美做爰片毛片 | 国产日韩欧美一区二区 | 最新超碰 | av电影一区二区 | 国产亚洲欧美另类一区二区三区 | 一区二区视频在线 | 久草青青 | 91精品久久久久久久久中文字幕 | 国产午夜精品理论片a大结局 | 久国久产久精永久网页 | 国产视频1区| 超碰伊人 | 在线观看av中文字幕 | www亚洲成人 | 欧美高清一区 | www日本在线| 久久精品福利视频 | 中文字幕日韩一区二区 | 91国内精精品久久久久久婷婷 | 国产成人99久久亚洲综合精品 | 精品日韩欧美一区二区 | 亚洲国产一区视频 | 国产不卡在线 | 久久成人国产精品 | 国产精品视频一区二区三区四区国 | 中文字幕在线看 | 视频1区| 成人激情免费视频 | 日韩一区二区三区视频在线观看 | 日本福利在线观看 | 91精品国产综合久久久密闭 | 久久精品一区二区三区四区 | 日韩成人免费中文字幕 | 成人一区二区三区在线观看 | 日韩中文字幕 | 国产成人一区二区三区 | 黄色一级特级片 |