打印

[自学实验][四]UART串口通讯基本知识

[复制链接]
538|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 liziride 于 2020-11-4 20:13 编辑

UART10通讯模式

一个起始位,8个数据位,一个结束位存入SBUF

SBUF同一个地址,但在内部有两个物理结构

一个用于发送,一个用于接收

发送接收都是按bit操作


#include<reg51.h>
unsigned char temp;
//波特率发生器只能用timer1
void UART_Init(unsigned int BAUD){
    TMOD = (TMOD & 0x0F) | 0x20;//定时器1,8位自动重装模式
    TH1 = 256 - (11059200/12/32/BAUD);//计算出初值,固定不变,重装用
    TL1 = TH1;//手动第一次赋值
    TR1 = 1;//定时器1开始计时
    ET1 = 0;//定时器1制作波特率发生器,不用产生中断
    SCON = 0x50;//方式一,10位UART可变波特率,常用此模式
    ES = 1; //串口使能中断
    PS = 0; //串口低级中断
    PCON = 0x00;//波特率不加倍,加倍则0x80;定时器2波特率不受影响
}
void Uart() interrupt 4{
    if(RI){
        RI = 0;
        temp = SBUF;
    }
}
void SendData(unsigned char dat){//写入SBUF之后函数挂起,只有中断之后,后续的调用才会进来
    SBUF = dat;
    while(TI == 0);
    TI = 0;
}
//接收完毕中断RI自动1,编程置0,发送完毕中断TI自动1,编程置0
//单片机通过对应的转换装置与电脑的通讯口,电脑上的软件通过对应的com口与单片机通讯
//也可以采取两个单片机之间互相测试,发送口 连 接收口,不能相同对接,即TXD接RXD
//可以尝试一下,一个单片机自己接自己.哈哈
void main(){
    UART_Init(9600);
    EA = 1;//总中断
    while(1);
}


使用特权

评论回复
评论
liziride 2020-11-7 19:30 回复TA
@dirtwillfly :谢谢鼓励,新手自学 
dirtwillfly 2020-11-7 18:17 回复TA
不错 

相关帖子

沙发
cainiao518| | 2020-11-11 14:09 | 只看该作者
谢谢分享,学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

38

帖子

0

粉丝