• 串口通讯笔记理解 重点


     1 /*2018年8月9日凌晨1点 于福安公寓 
     2 功能:通过串口调试工具模拟电脑给单片机发送数据,能够接受到数据
     3 切记:串口通讯时,晶振一定要匹配为11.0592MHZ ,如果为12MHZ时,
     4 就会出现接收到的数据和所发送的数据不同
     5 注:当开发板上为12MHZ时,初值就必须要重新计算  当出现乱码的时候,可能是波特率出现问题
     6                                        
     7 该程序匹配的为:12MHZ、SMOD =1,加倍、波特率为4800,由此的求得初值
     8 */
     9 #include<reg52.h>
    10 unsigned char flag,a;
    11 void main()
    12 {
    13     TMOD=0x20;//定时器1的工作方式2   M1和M0的组合来确定工作方式
    14     TH1 =0xf3; //波特率为4800、定时器1的工作方式2、加倍SMOD=1 
    15     TL1 =0xf3;    //重装初值
    16     TR1 =1;         //启动定时器1
    17     PCON =0x80;     //设置了SMOD =1,因为默认的是SMOD =0 ,所以必须通过PCON寄存器设定
    18     SM0 =0;        //在SCON寄存器中
    19     SM1 =1;
    20     REN =1;
    21     EA=1;
    22     ES =1;
    23     
    24 
    25     while(1)
    26     {
    27 //        if(RI==1)//if后面不能加;如果加封号,就会为空,就会出现逻辑错误,但是编译器检查不出来  
    28 //        {
    29 //            RI=0;
    30 //            P2=SBUF;
    31 //        }
    32          if(flag==1)
    33              {
    34                  flag =0;
    35                  ES =0;    //关闭串口中断,否则会进入一个死循环中,因为接收或者发送完成之后都会进入到中断中去
    36                 SBUF =a;  //发送数据
    37                 while(!TI);     //在此等候如果发送完成之后,进行下面的语句
    38                  TI=0;    //发送完成后,软件令TI=0;
    39                 ES =1;     //发送完成后,再打开串口中断
    40 //                {
    41 //                    ES=0;
    42 //                    flag=0;
    43 
    44 //                    SBUF='1';//28;       //并且此处的SBUF是发送缓冲器
    45 //                    while(!TI);    
    46 //                    TI=0;
    47 
    48 //                    SBUF='2';//28;    
    49 //                    while(!TI);    
    50 //                    TI=0;
    51 
    52 //                    SBUF='4';//28;    
    53 //                    while(!TI);    
    54 //                    TI=0;
    55 
    56 //                    ES=1;
    57 //                    }                
    58              }
    59         }
    60 }
    61 
    62 void ser() interrupt 4
    63 {
    64     RI =0;
    65      P2 =SBUF;
    66     a =SBUF;
    67     flag =1;
    68 }
    View Code
  • 相关阅读:
    python数据精度问题
    python之数学函数应用
    grep使用常用操作十五条
    python3之35个关键字详解
    Golang基础教程
    python之数据类型转换
    python随机值生成的常用方法
    losf命令详解
    python推导式与海象运算符
    即时通讯安全篇(十):IM聊天系统安全手段之通信连接层加密技术
  • 原文地址:https://www.cnblogs.com/wises/p/9539530.html
Copyright © 2020-2023  润新知