1. 串口怎么用
2. 设置工作方式
一般使用工作方式2
TMOD寄存器使用从高位到低位,选择方式2,M1M0为1/0,即值为,TMOD值为0x20
3. 波特率设置
使用STC-ISP自带的波特率计算器
4. 开启串口、开启中断
5. 写中断服务
清除标志位
6. 写发送函数
串口一次只能发一个字节,也就是8位,发完才能开始下一个,因此写一个发送字符串的函数调用发送字节的函数即可
7. 代码如下
#include <STC15.H>
#include "intrins.h"
typedef unsigned char BYTE;
bit busy;
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
SCON = 0x50; //8位可变波特率
AUXR = 0x40; //定时器1为1T模式
TMOD = 0x20; //定时器1为模式2(8位自动重载)
TL1 = 0xFD; //设置波特率重装值
TH1 = 0xFD;
TR1 = 1; //定时器1开始工作
ES = 1; //使能串口中断
EA = 1;
SendString("LED666 !\r\n");
while(1);
}
void Uart() interrupt 4
{
if (RI)
{
RI = 0; //清除RI位
P0 = SBUF; //P0显示串口数据
}
if (TI)
{
TI = 0; //清除TI位
busy = 0; //清忙标志
}
}
/*----------------------------
发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy); //等待前面的数据发送完成
ACC = dat; //获取校验位P (PSW.0)
busy = 1;
SBUF = ACC; //写数据到UART数据寄存器
}
/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s) //检测字符串结束标志
{
SendData(*s++); //发送当前字符
}
}
8. 实验现象
因为是只实现了最简单的串口发送功能,并且是没有循环发送,因此只能在开机瞬间发送字符串。
看到的现象就是在ISP的串口接收区域可以看见,每次断电开机都会打印字符串。