题目:以2400bps从计算机发送任一字节数据,当单片机收到该数据后,在此数据前加上一序号然后连同此数据一起发送至计算机,当序号超过255时归零。
程序如下:
#include
#define uint unsigned int
#define uchar unsigned char
void init();
uchar flag,aa;
char ch[3];
uint i;
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0; //关闭串行中断
i=0;
ch[0]=i/100+48; //设百位,转常量为字符常量
ch[1]=(i/10)%10+48; //设十位
ch[2]=i%10+48; //设个位
i++;
if(i==256)
i=0;
if(ch[0]!=0)
{
SBUF=ch[0];
while(!TI);
TI=0;
}
if(ch[1]!=0)
{
SBUF=ch[1];
while(!TI);
TI=0;
}
SBUF=ch[2];
while(!TI);
TI=0;
SBUF=aa;
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0; //软件清零RI
aa=SBUF;
flag=1;
}
void init()
{
TMOD=0x20; //T1工作在8位重装定时器状态
TH1=0xf4;
TL1=0xf4; //设置波特率为2400bps
EA=1;
ES=1;
TR1=1;
SM0=0;
SM1=1;
REN=1;
}
这里有几点要注意:
1.设置波特率用T1定时器来设置,有固定计算公式,T1设置在8位重装定时器状态。
2.由于要输出0~255字符串,所以要用到程序里面红色那一段,设一个3维数组,把字符串的百位,十位和个位分别记录下来,然后用SBUF发送缓冲器输出。
3.输出的时候注意先关闭串行中断(ES=0),以免发送字符串时T1置1引起串行中断服务程序
关键字:89C52 串口通信
引用地址:
89C52串口通信练习
推荐阅读最新更新时间:2024-03-16 14:42
实验3 串口通信
1. 以2400bps从计算机发送任一字节数据,当单片机收到该数据后,将其送到数码管显示,在此数据前加上一序号然后连同此数据一起发送至计算机,当序号超过255时归零。 #include reg51.h #define uchar unsigned char #define uint unsigned int #define ulong unsigned long /** 题目要求:以2400bps从计算机发送任一字节数据,当单片机收到该数据后,将其送到数码管显示,在此数据前加上一序号然后连同此数据一起发送至计算机,当序号超过255时归零。 **/ /** 步骤 接线方式: 1、P0接数码管J12,实现段选 2、译码器和数码管位选
[单片机]
【STM32CubeMX】HAL库中断方式UART串口通信
HAL库下,利用STM32CubeMX生成源代码,确实比较简单,比用标准库简单很多。 现在总结自己学习的过程: 硬件平台:正点原子探索者(STM32F407ZET6) 1、配置STM32CubeMX (1)打开STM32CubeMX,选择相应的芯片型号,并配置调试信息为:Serial Wire (2)配置RCC主频,选择外部高速晶振(HSE):Crystal/Ceramic Resonator(译文:水晶/陶瓷谐振器) 然后开始配置时钟树: 外部晶振为8MHz,配置PLL使主频为168MHz,如下图: (3)配置USART1:选择异步通信模式 (4)配置串口:115200
[单片机]
51单片机串口通信例子
小记:本例子是在别人的版本修改而来的,因本人没有11.0592MHz的晶振,进而采用12MHz的,经过波特率的调整发现在波特率为1200时,定时器工作在方式二,穿口工作在模式二,且SMOD=1.此时定时器的TH1=TL1=0xCC,此时调试串口没有错误。 发送例子: #include reg52.h #include stdio.h void delay(unsigned int i); char code message ="welcome"; unsigned char a; void main(void) { SCON=0x50; //REN=1 ,串口工作模式2; TMOD=0x20; //
[单片机]
STM32之串口通信
实验目的: 实现利用串口1 不停的打印一个信息到电脑上,同时接收从串口发过来的数据,把发送过来的数据直接送回给电脑。 实验平台: 基于STM32F103C8T6的彩屏开发板 硬件接口: 注意:因为我的开发板上的串口和LED共用了PA9和PA10,所以在使用USART1时务必屏蔽LED,不然两者会互相影响而导致实现现象无法呈现。 相关寄存器: 1,串口时钟使能。串口作为STM32 的一个外设,其时钟由外设时钟使能寄存器控制,这 里我们使用的串口1 是在APB2ENR 寄存器的第14 位。 2,串口复位。串口1 的复位是通过配置APB2RSTR 寄存器的第14 位来实现的。。通
[单片机]
单片机双机串口通信程序设计
利用方式1实现单片机双机通信,主频为6M,波特率为2400bps,电路见图5-10。当两个单片机距离较近时,甲、乙两机的发送端与接收端分别直接相联,两机共地。执行程序,甲机将亮灯信号发送给乙机,若通信正常,乙机接收到信号后点亮20个发光二极管。乙机采用查询与中断两种工作方式。当然20个LED乙机可单独控制,也可接受甲机的控制,并执行甲机指令,还需要进一步完善程序. 甲机发送程序: org 0000h sta: mov tmod,#20h ;设置波特率 mov tl1,#0FAh mov th1,#0FAh setb tr1 mov scon,#40h ;置工作方式1 clr ti
[单片机]
关于串口通信中断和查询方式
网上找了不少串口方面的资料,国内的资料都没有提到如何用中断方式来实现串口数据发送。其实,采用中断方式实现串口数据发送和采用中断方式实现串口数据接收的过程差不多,都需要开放8259的IRQ3或IRQ级中断,并需要设定modem控制寄存器使OUT2输出低电平,设置中断允许寄存器开放发送和接收中断。 这里有一点需要注意,《The Art of assembly language programming》中提到,发送寄存器为空时串口会产生中断,但是只会产生一次,书中采用的解决办法是通过IO端口直接写入发送保持寄存器,此时发送完毕后串口便又会产生 发送保持寄存器为空 中断。(就是每次发送前都设置中断允许寄存器),从实际效果来看是可以
[单片机]
基于EP9315的附网络存储NAS系统设计
摘要 附网络存储NAS是一种将分布、独立的数据整合为大型、集中化管理的数据中心,以便对不同主机和应用服务器进行访问的技术。本文提出一种以ARM9微处理器EP93l5和嵌入式Linux操作系统构建附网络存储系统的设计方案;对系统的体系结构、硬件设计、操作系统的移植、驱动程序和应用程序的开发等设计要点作了相关研究和讨论。 以嵌入式微处理器和嵌入式操作系统为核心的嵌入式技术是近年来一项新兴的热门技术,特别是以ARM公司的32位IP核为基础的ARM嵌入式微处理器,以其高性能、低功耗、低成本等优势,得到了广泛的应用。然而,目前在网络存储领域,国内商用市场上的网络存储系统大都采用x86等成熟的硬件平台和商业化操作系统,成本昂贵、核
[应用]
DSP与PC间高速串口通信的实现
摘要: 利用UART解决DSP与PC机间通信时速率匹配问题,并给出了具体实现电路。
关键词: DSP UART 串行通信 FIFO
DSP是一种专门用来实现信号处理算法的微处理器芯片,主要优点有:硬件乘法器,哈佛总线结构,多种寻址方式,零耗循环(zero overhead loop),程序执行时间可预测等。
正是由于DSP的诸多优点能够满足密集的数学计算,而且DSP应用的另一个突出特点是实时性,使其在通信、雷达、数字电视等领域得到了广泛的应用,而且日益渗透到人们的日常生活的各个方面。
在实时信号处理中已经离不开DSP,这些处理系统中包含了各种数据通
[工业控制]