Deprecated: Creation of dynamic property db::$querynum is deprecated in /www/wwwroot/czbhjd.com/inc/func.php on line 1413

Deprecated: Creation of dynamic property db::$database is deprecated in /www/wwwroot/czbhjd.com/inc/func.php on line 1414

Deprecated: Creation of dynamic property db::$Stmt is deprecated in /www/wwwroot/czbhjd.com/inc/func.php on line 1453

Deprecated: Creation of dynamic property db::$Sql is deprecated in /www/wwwroot/czbhjd.com/inc/func.php on line 1454
串行口通讯 上位机发送字符x单片机回来上位机“I get x“_产品中心_乐鱼官网客户端_网客户端网址

服务热线

13103866733
网站导航
主营产品:
产品展示
当前位置: 首页 > 产品中心

串行口通讯 上位机发送字符x单片机回来上位机“I get x“

产品时间: 2025-01-30 18:20:49 |   作者: 乐鱼官网客户端

详细介绍

  

串行口通讯 上位机发送字符x单片机回来上位机“I get x“

  //若检测到flag为1, 阐明程序现已履行过串口中止服务程序, 即收到了数据.

  //检测到flag为1后,即串口中止发生,先将ES清0, 原因是接下来要发送数据, 若不封闭串口中止, 发送完数据后,

  //单片机同样会请求串口中止,再次进入中止服务程序,flag又为1,又再此发送数据,一向重复

  //因而咱们在发送数据前把串口中止封闭,等发送完数据再翻开串口中止,这样做才干够安全地发送数据

  //当向SBUF中写入一个数据后,运用while(!TI)等候发送结束, 由于发送结束后TI会由

  //设定定时器1为作业方法2: 8位初值主动重装的8位定时器(设定定时器1意图是其溢出率决议串口波特率)

  //定时器1装初值(波特率为9600),留意:TH1,TL1初值有必要相同

  这儿不需求敞开定时器1中止,由于定时器1作业在方法2,为8位主动重装方法,进入中止也无事可做

  //设定串口作业方法1(10位异步收发,波特率可变,且由定时器1的溢出率决议)

  //RI为接纳中止标志位, 在方法0时, 当串行接纳第8位数据结束时, 或在其他方法, 串行接纳中止位的

  //中心时, 由内部硬件使RI置1, 向CPU宣布中止请求, 也有必要在中止服务程序中, 用软件将其清0,撤销

  //此中止请求, 以便利下一次中止请求检测, 即这样才干够发生下一次中止.

  //这儿RI清0, 由于程序已然发生了串口中止, 肯定是收到或发送了数据, 在开始时没有发送任何数据

  //那必定是收到了数据, 此刻RI会被硬件置1, 所以进入串口中止服务程序后有必要由软件清0, 这样才干

  //EA = 1时翻开大局中止操控,在这样条件下,由各个中止操控位翻开或封闭相应的中止

  //EX1 = 1时翻开外部中止1中止, EX1 = 0时封闭外部中止1中止

  //EX0 = 1时翻开外部中止0中止, EX0 = 0时封闭外部中止0中止

  //这两个寄存器共有一个地址0x99, 但物理上是两个独立的寄存器,有指令操作决议拜访哪个寄存器

  //履行写指令时, 拜访串行发送寄存器, 履行读指令时, 拜访串行接纳寄存器

  //接纳器具有双缓冲结构, 即在从接纳寄存器中读出前一个已收到的字节之前, 便能承受第二个字节

  //假如第二个字节现已接纳结束,第一个字节还没有读出,则丢掉其间一个字节

  //SCON用以设定串行口的作业方法, 接纳/发送操控以及设置状况标志

  //SM0,SM1为作业方法挑选位, 串行口有4中作业方法, 由SM0,SM1设定

  //SM0=0,SM1=1为方法1,即10位异步收发,含8位数据,波特率可变,且由定时器1的溢出率操控

  //SM0=1,SM1=0为方法2,即11位异步收发,含9位数据,波特率固定

  //SM0=1,SM1=1为方法3,即11位异步收发,含9位数据,波特率可变,且由定时器1的溢出率操控

  //当接纳机的SM2=1时,可通过收到的RB8来操控是否激活RI,即RB8=0时不激活RI,收到的信息丢掉

  //RB8=1时收到的数据进入SBUF,并激活RI,进而在中止服务中将数据从SBUF读走

  //当SM0=0时,不管收到的RB8是0仍是1,均能够使收到的数据进入SBUF,并激活RI,即此刻RB8不具有操控RI激活功用

  //方法2或方法3中,时发送数据的第9位,能够用软件规则其效果,能够用作数据的奇偶校验位

  //方法2或方法3中,是接纳数据的第9位,可作为奇偶校验位或地址帧/数据帧的标志位

  //方法0时,当串行发送第8位数据结束时,或在其他方法,串行发送中止位的开始时,

  //由内部硬件使TI置1,向CPU宣布中止请求,在中止服务程序中,有必要用软件将其清0,撤销此中止请求

  //方法0时,当串行接纳第8位数据结束时,或在其他方法,串行接纳中止位的中心时,

  //由内部邮件使RI置1,向CPU宣布中止请求,也有必要在中止服务程序中,用软件将其清0,撤销此中止请求

  //GATE=0,定时器/计数器发动与中止仅受TCON寄存器中TRX(X=0,1)来操控

  //GATE=1,定时器/计数器发动与中止由TCON寄存器中TRX(X=0,1)和外部中止引脚(INT0或INT1)的电平一起操控

  //M1=1,M1=0为方法3,仅适用于T0,分红两个8位计数器,T1中止计数

  //当计数器1计满溢出时,由硬件使TF1置1,而且请求中止,进入中止服务程序后,由硬件主动清0

  //由软件清0封闭定时器1,当GATE=1,且INT1为高电平时,TR1置1发动定时器1

  //IT1=0时,为电平触发方法,每个机器周期的S5P2采样INT1引脚,

  //IT1=1时,INT1位跳变沿触发方法,当第一个机器周期采样到INT1为低电平时,则IE1置1

  //IE1=1时,表明外部中止1正在向CPU请求中止,当CPU呼应中止,转向中止服务程序,该位由硬件清0

  //IT1=1,跳变沿触发方法,引脚INT1上的电平从高到低的负跳变有用

  //若检测到flag为1, 阐明程序现已履行过串口中止服务程序, 即收到了数据.

  //检测到flag为1后,即串口中止发生,先将ES清0, 原因是接下来要发送数据, 若不封闭串口中止, 发送完数据后,

  //单片机同样会请求串口中止,再次进入中止服务程序,flag又为1,又再此发送数据,一向重复

  //因而咱们在发送数据前把串口中止封闭,等发送完数据再翻开串口中止,这样做才干够安全地发送数据

  //当向SBUF中写入一个数据后,运用while(!TI)等候发送结束, 由于发送结束后TI会由

  //设定定时器1为作业方法2: 8位初值主动重装的8位定时器(设定定时器1意图是其溢出率决议串口波特率)

  //定时器1装初值(波特率为9600),留意:TH1,TL1初值有必要相同

  //这儿不需求敞开定时器1中止,由于定时器1作业在方法2,为8位主动重装方法,进入中止也无事可做

  //设定串口作业方法1(10位异步收发,波特率可变,且由定时器1的溢出率决议)

  //RI为接纳中止标志位, 在方法0时, 当串行接纳第8位数据结束时, 或在其他方法, 串行接纳中止位的

  //中心时, 由内部硬件使RI置1, 向CPU宣布中止请求, 也有必要在中止服务程序中, 用软件将其清0,撤销

  //此中止请求, 以便利下一次中止请求检测, 即这样才干够发生下一次中止.

  //这儿RI清0, 由于程序已然发生了串口中止, 肯定是收到或发送了数据, 在开始时没有发送任何数据

  //那必定是收到了数据, 此刻RI会被硬件置1, 所以进入串口中止服务程序后有必要由软件清0, 这样才干

  1) 操作串行口之前,需求对单片机的一些与串口有关的特别功用寄存器进行初始化设置, 主要是设置发生波特率

  e. 串行口作业在中止方法时, 要进行中止设置(变成IE, IP寄存器)

  2) 51单片机能够终究靠特别功用寄存器SBUF对串行接纳或串行发送寄存器进行拜访, 两个寄存器共用一个地址

  99H,但在物理上是两个独立的寄存器, 由指令操作决议拜访哪一个寄存器. 履行写指令时, 拜访串行发送寄存器, 履行读指令时, 拜访串行接纳寄存器, 接纳器具有双缓冲结构, 即在从接纳寄存器中读出前一个已收到

  的字节之前, 便能接纳第二个字节, 假如第二个字节现已接纳结束, 第一个字节还没有读出, 则丢掉其间

  一个字节. 关于发送器, 由于数据由CPU操控和发送的, 所以不需求考虑.

  SBUF=a;代表单片机将串口发送寄存器中的数据一位位从串口发送出去.

  a. 主函数main中while中ES=0能够换成EA=0,ES=1能够换成EA=1(行将串口中止的暂时操控改为大局中止的操控)

  b. 初始化函数init中ET1=1不能翻开,即使主函数外有计数器1的子函数(函数为空)

  c. 初始化函数init中TR1=1需求翻开(包含TMOD=0x20),因需求定时器1溢出率决议串口波特率.

  5) 法2中TH1的地址位0x8D, 与TCON中的TF0位地址相同, 这儿对TH1赋值时不是会对TF0发生影响吗?

 


关注我们