首页天道酬勤,

,

张世龙 05-13 02:03 68次浏览

然后,用代码详细分解串行端口的配置。

* * * * * * * * * * * * * * * * * * * * * * * * * * * * *//声明数据类型以定义类型化char u8;/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。 //设定计时器1的初始值TL1=0X3F; PCON=0X80; //波特率倍增位TR1=1; //打开计时器SCON=0x50; 设置scon特殊功能寄存器ES=1; //打开串行端口中断ea=1; //打开串行端口进行总中断}/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /计时器1初始化while(1; (() () () ) ) ) ) ) (() ) ) ) ) ) ) ) 652输出:为* * * * * * * * * * * * * * * * * * * * () 定义用于存储接收到的数据的变量(从pc发送到单片机);receiveData=SBUF; //所接收的数据默认保存在SBUF中,但在这里将SBUF的数据移动到RI=0; //单片机接收到pc的数据后(或接收到停止位时),内部硬件将ri设置为1,发生串行端口中断。 这里用软件清除()这里本来是中断程序内部,这里的ri本来是1。 清除0用于以下ri使用)。 SBUF=receiveData; //在此,发送刚接收的数据,并将数据再次放入sbuf (发送缓存寄存器)。 (ps )不是所有的程序都是这样。 该程序的目的是通过发送数据并立即接收数据来验证串行通信的效果。 在实际工作中,可能会对数据进行各种计算,或者根本没有响应。 (while )! 钛; //判断发送是否完成,发送完成时,ti在硬件上设置为1,如果该while循环结束仍在发送,则ti为0,在该while循环之后为1 (真),循环继续,发送完成TI=0; //程序到达这里,一定是在发送完成后,ti已经是1。 此时,软件必须被清除,以便下次继续使用。 }这可以简单地看作是初始化串行端口的代码的一部分。

实际上,配置并选择各个参数,设定串行端口如何使用。

在代码中,如果这些寄存器的特定位处于不同的状态(0或1 ),则其串行端口具有不同的功能,寄存器显示不同的值。 可以通过为几个重要的寄存器分配不同的值来配置串行端口。

1; 决定T1的动作方法(对TMOD寄存器进行编程); 代码:

TMOD|=0X20; 作为//计时器1模式,动作模式2这里的0x20可被认为是一系列二进制代码0010 0000,其具体构成内容如下。

1、动作模式寄存器TMOD

动作模式寄存器TMOD用于设定定时/计数器的动作模式,低位4位用于T0,高位4位用于T1。 其形式如下。

GATE是门控位,GATE=0时,用于控制计时器的启动是否受到外部中断源信号的影响。 在软件中将TCON的TR0或TR1设为1时,可以启动计时器/计数器动作; GATA=1时,如果不通过软件将TR0或TR1设为1,且外部中断端子INT0/1也设为高电平,则计时器/计数器动作不会开始。 也就是说,此时的计时器的启动条件中附加了INT0/1端子为高电平的条件。 C/T :定时/计数模式选择位。 C/T=0是时序模式; C/T=1为计数模式。 M1M0

:工作方式设置位。定时/计数器有四种工作方式。

 就这里来说:

tmod寄存器的的第7位gate设置为0,代表只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;

 tmod寄存器的的第6位C/T 设置为0,代表选择为定时模式;

 tmod寄存器的的第5、4位设置为10,代表选择为方式2;即8位自动重装载寄存器。

低四位用于T0,高四位用于T1,这里就是用高4位来设置了t1计时器,t0计时器没有使用,这里全部赋0;

于是把tmod寄存器赋值为0010 0000

 2、计算t1的初值

这里可以用小工具计算出来,然后直接把值赋给它,也可以直接把计算公式代码写出来计算一次值

 这里的代码是:

TH1=0X3F;TL1=0X3F;

 t1初值就是用来定义波特率的

初值的计算可以看下面的资料:

 

3、设置pcon的值

  tmod寄存器的的第7位smod设置为1,所以这个值为0x80

4、启动t1(计数器1)

tr1=1

 5、设置scon

这里的内容就比较多了,见下

 

 0x50=0101 0000

即:

sm0=0

sm1=1

sm2=0

ren=1

tb8=0

tb8=0

ti=0

ri=0

 6、打开串口中断和总中断

 es=1

ea=1

 

补充:

SBUF是指串行口中的两个缓冲寄存器,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的,但地址是重叠的。它们都是字节寻址的寄存器,字节地址均为99H。

SBUF,全称:serial data buffer,中文名为串行数据缓冲器。这个重叠的地址靠读/写指令区分:串行发送数据时,CPU向SBUF写入数据,此时99H表示串行口的发送缓冲寄存器;串行接收数据时,CPU从SBUF读出数据,此时99H表示串行口的接收缓冲寄存器。

这个讲得比较好:

STC89C52_51单片机_串口配置_UART串口通信_hello_StarLee的博客-CSDN博客_stc89c51串口通信

, 傅里叶变换卷积性质的证明,图像傅里叶变换原理