历史上的今天
今天是:2025年01月05日(星期日)
2021年01月05日 | 51单片机模拟串口源程序
2021-01-05 来源:51hei
单片机模拟串口实验,在没有串口的单片机上想使用串口功能这就需要模拟一个串口了
单片机源程序如下:
#include "reg51.h"
typedef unsigned char BYTE;
typedef unsigned WORD;
typedef bit BOOL;
#define BAUD 0xFE80 /* 9600bps@11.0592MHz */
sfr AUXR = 0x8E;
sbit RXB = P3^0; /* 定义串口TX RX端口 */
sbit TXB = P3^1;
BYTE TBUF,RBUF;
BYTE TDAT,RDAT;
BYTE TCNT,RCNT;
BYTE TBIT,RBIT;
BOOL TING,RING;
BOOL TEND,REND;
BYTE t,r;
BYTE buf[16];
sbit led=P3^3;
void UART_INIT()
{
TING = 0;
RING = 0;
TEND = 1;
REND = 0;
TCNT = 0;
RCNT = 0;
}
void main()
{
TMOD = 0x00; /* 定时器0 16位自动装置模式 */
AUXR = 0x80; /* 定时器0工作在1T模式 */
TL0 = BAUD;
TH0 = BAUD >> 8; /* 初始化定时器0,并设置自动装置的值 */
TR0 = 1; /* 定时器0开始启动 */
ET0 = 1; /* 使能定时器0中断 */
PT0 = 1; /* 设置定时器0中断优先级 */
EA = 1; /* 开全局中断 */
UART_INIT(); /* 串口初始化 */
while(1)
{
if(buf[0]=='0')
{
led=0;
}
else
{
led=1;
}
if(REND)
{
REND = 0;
buf[r++ & 0x0f] = RBUF;
}
if(TEND)
{
if(t != r)
{
TEND = 0;
TBUF = buf[t++ & 0x0f];
TING = 1;
}
}
}
}
void tm0() interrupt 1 using 1
{
if(RING)
{
if(--RCNT == 0)
{
RCNT =3;
if(--RBIT == 0)
{
RBUF = RDAT;
RING = 0;
REND = 1;
}
else
{
RDAT >>=1;
if(RXB)RDAT |= 0x80;
}
}
}
else if(!RXB)
{
RING = 1;
RCNT = 4;
RBIT = 9;
}
if(--TCNT == 0)
{
TCNT = 3;
if(TING)
{
if(TBIT == 0)
{
TXB = 0;
TDAT = TBUF;
TBIT = 9;
}
else
{
TDAT >>= 1;
if(--TBIT ==0)
{
TXB = 1;
TING = 0;
TEND = 1;
}
else
{
TXB =CY;
}
}
}
}
}
上一篇:基于51单片机的数字时钟
下一篇:基于51单片机信号发生器的设计
史海拾趣
|
MSDN中在关于BIB文件的MEMORY Section部分中提到RAMIMAGE类型时说: Specifies that the region should be treated like RAM. The memory addresses in this entry can physically correspond to RAM or to linear flash memory. 原文见: http ...… 查看全部问答> |
|
1. 帮忙说明下linux(ubuntu)中,configure的参数问题,--prefix=/路径 和--exec-prefix=/路径,还有with-xxx-prefix=/路径 又什么区别吗 2. 说能解释下\"sed\",\"set\",\"eval\",\"tee\" and \"getopt\" in shell,推好能推荐个教程,找了半天没什 ...… 查看全部问答> |
|
[DIY]再造二十四小时的感动【古典版II】 自制QS18-12辉光电子钟 附百图 前几天刚刚完成QS30-1管的辉光钟,有不少朋友在向我讨教如何制作。说实话,就个人而言,我更喜欢QS18-12辉光管。 QS30-1的辉光管制作贴在这里:https://bb ...… 查看全部问答> |
|
声明:展现在你眼前的所有文档都非本人的智慧所编写,而只是转发,但所有文档也都非具有相同层次的专业人士所作,你需要的是学习与思考,融合与创新。你的灵感,将来自於你的头脑,你的知识,确来自于其他人的智慧。包容糟粕,取其精华,你必能智於 ...… 查看全部问答> |
|
系统是一个手持设备,用电池供电,电量低时,通过外部充电器充电。 平时不使用时,进入休眠状态,通过按键(有三个不同功能的按键)唤醒(IO口电平变化中断)结束休眠。 如何才能保证系统能可靠的运行? 就是每次在休眠中,按键按下都能够唤醒, ...… 查看全部问答> |
|
具体就是想问一下 : 当我用PC下载完程序后, 要让TIVA C Launchpad 单独运行,没法再提供USB接口; TIVA C Launchpad有没有简单的供电方法。… 查看全部问答> |




