找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5731|回复: 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. *********************************************************************/
复制代码





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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端口内置的上拉电阻使能.
回复

使用道具 举报

5#
ID:310519 发表于 2019-2-17 18:32 | 只看该作者
你这是用的STC的单片机吧?

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

应该这样:
P5M0=0xff;P5M1=0x00;
回复

使用道具 举报

6#
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();
回复

使用道具 举报

7#
ID:325735 发表于 2019-2-17 23:40 | 只看该作者
wulin 发表于 2019-2-17 17:40
P5M0=0x00;P5M1=0xff; 你这是设置为高阻,推挽是P5M1=0x00;P5M0=0xff; 。

谢谢您  我是刚开始研究,什么都不懂呢
我试试
回复

使用道具 举报

8#
ID:325735 发表于 2019-2-17 23:40 | 只看该作者
谢谢大家!我会逐一进行试验。我是小白,刚开始学习
回复

使用道具 举报

9#
ID:325735 发表于 2019-2-17 23:53 | 只看该作者
wulin 发表于 2019-2-17 17:40
P5M0=0x00;P5M1=0xff; 你这是设置为高阻,推挽是P5M1=0x00;P5M0=0xff; 。

是我马虎了,修改过来就好了
回复

使用道具 举报

10#
ID:325735 发表于 2019-2-17 23:54 | 只看该作者
Y_G_G 发表于 2019-2-17 18:13
你把端口设定成推挽之后,单片机就读不到这个IO的端口状态了,所以就不受控制了.
如果你想要有输出又能读取 ...

谢谢您回复
回复

使用道具 举报

11#
ID:325735 发表于 2019-2-17 23:54 | 只看该作者
diy1997 发表于 2019-2-17 18:32
你这是用的STC的单片机吧?

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

谢谢指导 正解
回复

使用道具 举报

12#
ID:158375 发表于 2019-2-18 08:18 | 只看该作者
看资料不仔细,看资料很重要,注意细节。
回复

使用道具 举报

13#
ID:325735 发表于 2019-2-18 14:53 | 只看该作者
笨笨兔 发表于 2019-2-18 08:18
看资料不仔细,看资料很重要,注意细节。

谢谢,刚开始接触编程。没看仔细
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表