微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 串行口通信 上位机发送字符x,单片机返回上位机“I get x“

串行口通信 上位机发送字符x,单片机返回上位机“I get x“

时间:11-22 来源:互联网 点击:

在从接收寄存器中读出前一个已收到的字节之前, 便能接受第二个字节

//如果第二个字节已经接收完毕,第一个字节还没有读出,则丢失其中一个字节

//对于发送器,数据由CPU控制和发送,所以不需要考虑

sfr SBUF = 0x99;

//SCON为串行口控制寄存器

//SCON可位寻址, 即可以访问它的具体某一位

//SCON用以设定串行口的工作方式, 接收/发送控制以及设置状态标志

//单片机复位时SCON全部被清0

sfr SCON = 0x98;

//SM0,SM1为工作方式选择位, 串行口有4中工作方式, 由SM0,SM1设定

//SM0=0,SM1=0为方式0,即同步移位寄存器方式,用于扩展I/O口

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

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

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

sbit SM0 = SCON^7;

sbit SM1 = SCON^6;

//SM2为多机通信控制位,主要用于方式2和方式3

//当接收机的SM2=1时,可以利用收到的RB8来控制是否激活RI,即RB8=0时不激活RI,收到的信息丢弃

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

//当SM0=0时,不论收到的RB8是0还是1,均可以使收到的数据进入SBUF,并激活RI,即此时RB8不具有控制RI激活功能

//通过控制SM2,可以实现多机通信.

//在方式0时,SM2必须是0

//在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1

sbit SM2 = SCON^5;

//REN为允许串行接收位

//REN=1时允许串行口接收数据

//REN=0时禁止串行口接收数据

sbit REN = SCON^4;

//TB8为方式2,3中发送数据的第9位

//方式2或方式3中,时发送数据的第9位,可以用软件规定其作用,可以用作数据的奇偶校验位

//或在多机通信中,作为地址帧/数据帧的标志位

//方式0和方式1时,该位未用

sbit TB8 = SCON^3;

//RB8为方式2,3中接收数据的第9位

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

//方式1时,若SM2=0,则RB8是接收到的停止位

sbit RB8 = SCON^2;

//TI为发送中断标志位

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

//由内部硬件使TI置1,向CPU发出中断申请,在中断服务程序中,必须用软件将其清0,取消此中断申请

sbit TI = SCON^1;

//RI为接收中断标志位

//方式0时,当串行接收第8位数据结束时,或在其他方式,串行接收停止位的中间时,

//由内部邮件使RI置1,向CPU发出中断申请,也必须在中断服务程序中,用软件将其清0,取消此中断申请

sbit RI = SCON^0;

//TMOD为定时器/计数器工作方式寄存器

//字节地址位0x89,不能位寻址

//单片机复位时TMOD全部被清0

//TMOD的高4位用于设置定时器1,低4位用于设置定时器0,

//其中高低4位均由GATE,C/T,M1,M0构成

//GATE为门控制位

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

//GATE=1,定时器/计数器启动与停止由TCON寄存器中TRX(X=0,1)和外部中断引脚(INT0或INT1)的电平共同控制

//C/T为定时器模式和计数器模式选择位

//C/T=1为计数器模式,C/T=0为定时器模式

//M1M0为工作方式选择位

//M1=0,M0=0为方式0,为13位定时器/计数器

//M1=0,M0=1为方式1,为16位定时器/计数器

//M1=1,M0=0为方式2,8位出值自动重装的8位定时器/计数器

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

sfr TMOD = 0x89;

//TCON为定时器/计数器控制寄存器

//TCON字节地址为88H,可位寻址

//TCON寄存器用来控制定时器的启,停,标志定时器溢出和中断

//单片机复位时TCON全部被清0

//TCON包含的TF1,TR1,TF0,TR0用于定时器/计数器

//TCON包含的IE1,IT1,IE0,IT0用于外部中断

sfr TCON = 0x88;

//TF1为定时器1溢出标志位

//当计数器1计满溢出时,由硬件使TF1置1,并且申请中断,进入中断服务程序后,由硬件自动清0

//如果使用定时器的中断,那么该位完全不用人为去操作

//如果使用软件查询的方式,查询该位为1后,就需要用软件清0

sbit TF1 = TCON^7;

//TR1为定时器1运行控制位

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

//当GATE=0时,TR1置1启动定时器1

sbit TR1 = TCON^6;

//TF0为定时器0溢出标志,功能及操作方法同TF1

sbit TF0 = TCON^5;

//TR0为定时器0运行控制位,其功能及操作方式同TR1

sbit TR0 = TCON^4;

//IE1为外部中断1请求标志

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

//若INT1脚为低电平,则置1,否则IE1清0

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

//IE1=1时,表示外部中断1正在向

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top