单片机入门必学的一些课程
原文:https://blog.csdn.net/weever7/article/details/121463398
数字信号是八位二进制数,可以使用信号线传输,一种方案是使用一条数据线按照次序一位一位的传送,每传送完8位(一个字节),这就是串行通信。还有一种方法是使用八条数据线同时传送8个位的数据,一次传送一个字节,这就是并行通信。
顾名思义,同步通信就是对发送方和接收方的时钟实行直接控制,使双方的数据传输达到完全同步。数据以位的形式连续发送,且传送的字符之间不留间隙,即保持位同步和字符同步。双方的同步可以通过外同步和自同步俩种方式实现。
和同步通信不同,异步通信的发送方和接收方使用各自的时钟控制数据的发射接收。异步通信是一种很常见的通讯方式,其发送端可以在任意时候发送字符,但与同步通信不同的是异步通信是以帧的形式发送数据的(异步通信中一个帧数据有十位:分别是一个起始位、八个数据位、一个停止位)
同步通信好比打电话,同时的;而异步通信好比发短信,啥时候看见不确定。
前面讲了一大堆铺垫,相信大家都有一个疑问:单片机是怎么发送数据呢?它又是如何接收数据呢?
如果要细讲这其中的传输原理,那会是复杂难懂的,好在单片机的内部硬件自带发送和接收数据的功能,它是通过SBUF寄存器实现的。
SBUF寄存器有俩个,一个是发送寄存器,另一个是接收寄存器(名字都一样),但在逻辑上SBUF只有一个(地址都为99H),物理结构上,这是俩个完全独立的寄存器。如果CPU写SBUF,数据就会被送入发送寄存器准备发送;如果CPU读SBUF,则读入的数据一定来自接收寄存器。
简单来讲:a=SBUF,代表单片机从计算机接收到了数据(接收到的数据自动存在接收寄存器SBUF中)并且从接收寄存器SBUF读取数据并赋给a。SBUF=a,代表单片机要给计算机发送a数据,只需将a赋给发送寄存器SBUF就行,发送寄存器SBUF会自动给计算机发送SBUF中的数据。
#include"reg52.h" #define uint unsigned int #define uchar unsigned char uchar num; void uart_init() //初始化函数 { TMOD=0x20;//设置定时器1的工作方式2---8位自动装填 TH1=0xfd;//设置初始值:使比特率为9600bps TL1=0xfd; PCON=0x00;//SMOD=0,不加倍 TR1=1;//打开定时器中断开关 REN=1;//打开允许串行接收位 SM0=0;//设置串行口通讯方式为方式1 SM1=1; EA=1; //打开总中断 ES=1; //打开串口通讯中断 } void uart() interrupt 4 //中断函数 { if(RI) //检测是否接收完成 { num=SBUF; //从计算机接收数据,赋给num RI=0; //数据接收完毕后将RI软件置0 SBUF=num+1;//向计算机发送数据num while(!TI); //TI=0时陷入死循环,直至数据发送完毕 TI=0; //数据发送完毕后软件将TI置0 } } void main()//主函数就这么简单 { uart_init(); while(1); }============================找指导老师布置任务吧==============================