历史上的今天
返回首页

历史上的今天

今天是: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;

    }

   }

  }


}

}


推荐阅读

史海拾趣

昭华(CHA)公司的发展小趣事

昭华(CHA)公司自2007年成立以来,就致力于拨码开关与轻触开关的研发制造。在初创阶段,公司面临着技术挑战、资金短缺以及市场竞争激烈等多重困难。然而,昭华团队凭借着对技术的热情和执着,通过不断的技术创新和产品优化,逐渐在市场上树立了自己的品牌。他们不仅成功研发出多款高性能的开关产品,还积累了丰富的行业经验,为公司的后续发展奠定了坚实的基础。

Elec & Eltek公司的发展小趣事

Elec公司成立于20世纪初,最初只是一家小型电子元件生产商。创始人李明(化名)对电子技术有着深厚的兴趣和独到的见解。在他的带领下,Elec公司逐步研发出具有竞争力的电阻、电容等基础元件,并逐渐在市场中崭露头角。随着电子技术的不断发展,Elec公司敏锐地捕捉到半导体技术的潜力,开始投入巨资研发。经过数年的努力,Elec公司成功研发出具有自主知识产权的半导体芯片,这一突破让Elec公司在电子行业中声名鹊起。

Accelink Technologies Co Ltd公司的发展小趣事

在国内市场取得一定成绩后,Elec公司开始将目光投向国际市场。为了更好地适应国际市场的需求,Elec公司积极引进国际先进技术和管理经验,并加强与国际知名企业的合作。同时,Elec公司还加大了在海外市场的营销力度,通过参加国际展会、举办技术研讨会等方式提高品牌知名度。经过多年的努力,Elec公司的产品已远销欧美、东南亚等多个国家和地区,成为国际市场上具有竞争力的电子品牌。

DFI公司的发展小趣事

DFI深知产品质量对于企业的重要性。因此,公司从设计到生产,都实施了严格的质量管理。在产品设计阶段,DFI的专责团队会对电路、机构和零组件进行严格的测试与检验,确保每个专案的设计和质量都具备一致的高质量。在生产阶段,所有产品出货前都必须通过完整的产品内部检验,以确保产品的可靠性和耐久性。这些质量管理措施使DFI的产品在市场上享有良好的口碑,也为公司赢得了众多客户的信任。

Analytic Instruments Corp公司的发展小趣事

随着电子行业的快速发展和技术的不断进步,Analytic Instruments Corp面临着日益激烈的市场竞争。为了保持领先地位,公司不断调整产品结构和市场策略,积极应对行业变革。公司加大了研发投入,推出了一系列具有创新性和竞争力的新产品。同时,公司还加强了与客户的沟通和合作,深入了解客户需求,为客户提供更加个性化的解决方案。

Atmel (Microchip)公司的发展小趣事

随着产品的不断完善和技术的不断进步,Atmel开始积极拓展全球市场。公司通过建立遍布全球的办事处和销售网络,将产品销往世界各地。同时,Atmel还注重品牌建设,通过优质的产品和服务,赢得了客户的信任和好评。这使得Atmel在全球微控制器市场中逐渐崭露头角。

问答坊 | AI 解惑

[下载]美国MSP430电子书(英文)

希望大家喜欢哈! 这本书的作者是个公共遥测工程师 大学用51,工作了用PIC,之后一个项目要求低功耗,所以又用了430。 …

查看全部问答>

在台式数字电子秤的课程设计中 可以用哪些类型的信号放大器?

对于数字电子秤的设计可以用哪些类型的放大器  哪一种的放大器效果更好??请高人指点!  …

查看全部问答>

关于BIB文件中RAMIMAGE类型的问题

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 ...…

查看全部问答>

Ubuntu下的一些小问题

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口电平变化中断)结束休眠。 如何才能保证系统能可靠的运行? 就是每次在休眠中,按键按下都能够唤醒, ...…

查看全部问答>

编写字符设备驱动框架的步骤(简要)

        作者:武汉华嵌嵌入式培训  长沙中心        讲师: 周龙         Step 1:  申请设备号(主要是申请主设备号)         ...…

查看全部问答>

TIVA C Launchpad 是否可以外接其他电源?

具体就是想问一下 : 当我用PC下载完程序后, 要让TIVA C Launchpad  单独运行,没法再提供USB接口; TIVA C Launchpad有没有简单的供电方法。…

查看全部问答>