登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] stc12c5a60s2单片机的UART串口通信(实现简单数据传送和控制数码管)

[复制链接]
发表于 2019-1-29 23:04:49 | 显示全部楼层 |阅读模式
学习笔记
学习科目: stc12c5a60s2单片机的UART串口通信以及编程
学习安排: 上午看有关UART串口通信的课程以及查阅数据手册,下午进行程序的编写以及调试
开始时间: 2019-01-29
结束时间: 2019-01-29
直接上代码吧,这个程序不需要原理图即可完成,主要是有关寄存器的配置。配置好寄存器就可以让单片机工作了,注:一定要认真阅读数据手册。这一段程序实现的功能是通过烧录软件的串口助手发送数据,比如 发送1,会接收2。
#include<stc12c5a60s2.h>

void ConfigUART(unsigned int baud);//配置波特率的子函数

void main()
{
        EA = 1;//使能总中断
        ConfigUART(9600);//配置波特率为9600
        while(1);
}       
void ConfigUART(unsigned int baud)
{
        SCON = 0x50;//配置串口为模式1
        TMOD &= 0x0F;//清零T1的控制位
        TMOD |= 0x20;//配置T1为模式2
        TH1 = 256 - (33177600/12/32)/baud;//计算T1重载值
        TL1 = TH1;//初值等于重载值
        TR1 = 1;//启动T1
        ES = 1;
}       

void InterruptUART() interrupt 4
{
    if(RI)//接收到字节
    {
      RI=0;//手动清零接受中断标志位
     SBUF =SBUF+1;//接受的数据+1后发送出去
    }
    if(TI)//字节发送完毕
    {
       TI=0;//手动清零发送中断标志位
    }
}


好懒~~不想说~~~
发表于 2019-1-30 11:12:05 | 显示全部楼层
能不能解释一下定时器1的初始值怎样计算?
好懒~~不想说~~~
 楼主| 发表于 2019-1-30 19:15:01 | 显示全部楼层
林雨 发表于 2019-1-30 11:12
能不能解释一下定时器1的初始值怎样计算?

QQ图片20190130190624.png 默认配置定时器T1为模式2,就是8位自动重装模式,此时最大值是是256,因为是8位的嘛,2^8=256,波特率就是发送二进制数据位的速率,即发送一位二进制数据的持续时间=1/baud,定时器1的重载值计算公式:
TH1=TL1=256-晶振值/12/2/16/波特率,默认情况下AUXR辅助寄存器(不可位寻址)中的T1x12位为0;定时器1传统8051速度,12分频(暂不考虑)。串行通信模式1的波特率=(2^SMOD/32)*定时器1的溢出率, 定时器1 的溢出率=晶振频率/12/(256-TH1),当波特率不倍增时,SMOD的值为0,又因为晶振频率是33.1776Mhz,化简得:TH1 = 256-(33177600/12/32)/baud。(可联想定时器0的65536配置)
好懒~~不想说~~~
发表于 2019-1-30 20:52:08 | 显示全部楼层
好的,谢谢
好懒~~不想说~~~
发表于 2019-2-2 14:46:04 | 显示全部楼层
stc-isp-15xx-v6.85H中这个程序你怎么操作实现发送数据1接收数据2那?我烧录软件用的不太好!!
好懒~~不想说~~~
 楼主| 发表于 2019-2-7 15:45:28 | 显示全部楼层
商吉祥 发表于 2019-2-2 14:46
stc-isp-15xx-v6.85H中这个程序你怎么操作实现发送数据1接收数据2那?我烧录软件用的不太好!!

不好意思,前几天没有及时回消息, 20190207154113.png
首先找到串口助手,把发送缓冲区和接受缓冲区都调节为HEX模式,打开串口,波特率9600,无校验,停止位 1位  把要发送的数据输入到发送缓冲区,点击发送即可
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表