找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机串行通信问题

查看数: 2275 | 评论数: 9 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-11-29 19:36

正文摘要:

我想实现按键传送,可是出现了问题 发送 #include<reg52.h> char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbit q=P3^6; int num=0; scon=0x50; int ge;       &n ...

回复

ID:245521 发表于 2017-11-29 23:03

老铁你看我下面发的图,没有打算用串行中断呢
ID:245521 发表于 2017-11-29 23:02
999333 发表于 2017-11-29 21:58
兄弟用到串口怎么没有串口的程序

我没打算用串口中断啊
ID:245521 发表于 2017-11-29 22:26
yzwzfyz 发表于 2017-11-29 21:04
如果RI=1时,则表示收到了一个字节。所以必须在RI=1后才可以取数字。
同样,当发送了一个字节后TI被置1。 ...

还是不太理解,我是在RI、TI都发生改变才有动作
ID:222948 发表于 2017-11-29 22:19
Doc1.docx (34.39 KB, 下载次数: 6)
ID:222948 发表于 2017-11-29 22:15
  1. //注意我的是p3^7,你的是p3^6
  2. //发送
  3. #include<reg52.h>
  4. char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  5. sbit q=P3^7;
  6. int num=0;
  7. //scon=0x50;
  8. int ge;
  9.                 void delay(){
  10.                 int i,j=0;
  11.                 for(i=500;i<0;i--)
  12.                         for(;j<100;j++);
  13.                                         }
  14. void main(){
  15.         SCON = 0x50;   // ′®¿ú1¤×÷·½ê½1
  16.         TMOD = 0x20;   // T11¤×÷·½ê½2
  17.         PCON = 0x00;   //SMOD=0
  18.         TH1  = 0xfd;    //×°èë3õÖ죬2¨ìØÂê9600
  19.         TL1  = 0xfd;
  20.         TI   = 0;            //±ê־λ3õê¼»ˉ
  21.         RI   = 0;
  22.         TR1  = 1;           //Æô¶ˉ¶¨ê±Æ÷T1
  23.         EA=1;           //CPU¿aÖD¶Ï
  24.     ES=1;   
  25. while(1){
  26.         if(q==0)
  27.         delay();
  28.         if(q==0)
  29.         {
  30.         num++;
  31.             if(num>9)num=0;
  32.                 SBUF=num;
  33.                 while(TI==0);
  34.                 TI=0;
  35.                 while(RI==0);
  36.                 RI=0;
  37.                 if(SBUF==num){
  38.                 ge=num%10;
  39.                 P1=tab[ge];
  40.                 delay();
  41.                 }
  42.                 while(q==0);
  43.                 }        
  44.         }
  45. }

  46. void Serial() interrupt 4        //????
  47. {
  48.         if(RI==1)                    //??????
  49.         {
  50.                  RI = 0;       
  51.                 P1= tab[SBUF];  //????????       
  52.         }
  53. }

  54. //接收
  55. #include<reg52.h>
  56. char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  57. int num=0;
  58. //scon=0x50;
  59. char receive;
  60. int ge;
  61.                 void delay(){
  62.                 int i,j=0;
  63.                 for(i=500;i<0;i--)
  64.                         for(;j<100;j++);
  65.                                         }
  66. void main(){
  67.         P1= tab[0];     // ????
  68.         SCON = 0x50;         // ??????1,????
  69.         TMOD = 0x20;        // T1????2
  70.         PCON = 0x00;        //SMOD=0
  71.         TH1  = 0xfd;         //????,???9600
  72.         TL1  = 0xfd;
  73.         TI   = 0;       //?????
  74.         RI   = 0;
  75.         TR1  = 1;       //?????T1
  76.         EA=1;           //CPU???
  77.     ES=1;
  78. while(1)
  79.         {
  80.                 while(RI==0){
  81.                 RI=0;
  82.                 receive=SBUF;
  83.                 SBUF=receive;
  84.                 while(TI==0);
  85.                 TI=0;
  86.                 P1=tab[receive%10];
  87.                 }
  88.                 delay();
  89.                 }        
  90.         }

  91.                                 void Serial() interrupt 4        //????
  92. {
  93.         if(RI==1)                    //??????
  94.         {
  95.                  RI = 0;       
  96.                 P1= tab[SBUF];  //????????       
  97.         }
  98. }
复制代码

ID:222948 发表于 2017-11-29 21:58
兄弟用到串口怎么没有串口的程序
ID:123289 发表于 2017-11-29 21:04
如果RI=1时,则表示收到了一个字节。所以必须在RI=1后才可以取数字。
同样,当发送了一个字节后TI被置1。所以必须在TI=1之后才能续发下一个字节。
ID:245521 发表于 2017-11-29 20:01
是延时不够长的问题吗?

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

Powered by 单片机教程网

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