//-------------------------------------------------------------------------------------------------------------------
//程序名称:串口通信程序
//功能:实现单片机与PC之间的串口通信,PC向单片机发送,单片机返回PC所发的内容
//硬件连接:单片机的P3.0 P3.1经max232电平转化后与PC串口相连
//测试情况:本程序已经由我亲自上机测试,确保无误
//-------------------------------------------------------------------------------------------------------------------
#include
#define uint unsigned int
#define uchar unsigned char
uchar num,flag;
void main()
{
TMOD=0X20;//设置定时1为工作方式2
TH1=0XFD; //设置定时器初始值
TL1=0XFD;
TR1=1; //启动定时器
SCON=0X50;
EA=1; //开总中断
ES=1; //开串口中断
while(1)
{
if(flag==1) //flag为标志位,当flag==1时,说明此时已经发生串口中断,也就是说此时PC已经向单片机发送了数据
{
EA=0; //为防止受影响,关闭所有中断
flag=0; //清标志位
SBUF=num; //将串口收到的值num存放在串口发送寄存器中
while(!TI); //TI是串口发送标志位,当发送完毕后,硬件自动置1,所以一般此句话的意思叫等待发送完毕
TI=0; //清发送标志位,以便下次中断后能再次发送
EA=1; //开总中断
}
}
}
void ser() interrupt 4 //中断服务子程序
{
RI=0; //RI接受标志位,为0时允许接收,接收完毕后置1
num=SBUF; //串口接收寄存器接收到的值赋给变量num
flag=1; //中断标志位置1
}
注:有时候对于新手来说,有些特殊功能寄存器或者一些 位 的操作不理解,其实只要翻开课本查一下这个是什么作用,对于程序就明白怎么写了,比如本文的 RI TI SCON SBUF等等 ,读懂了他们的作用自热而然的就知道怎么用了。查资料很重要
关键字:C51 串口通信
引用地址:
c51串口通信程序
推荐阅读最新更新时间:2024-03-16 15:20
基于C51的嵌入式实时控制模块的设计与实现
随着现代通信技术的发展,通信测试仪器不断推陈出新。各种新型设备对系统的实时响应能力的要求越来越高,一种通信测试仪器的实时响应性能,就成为系统设计能否成功的关键因素之一。笔者曾在多个通信测试仪器项目中,成功地应用ARM处理器、C51 单片机 等为主控芯片的嵌入式系统,实现了对仪器相关模块的实时控制功能。因此提出一种在某通信测试仪器中使用C51单片机来实现实时控制的设计方案。 1 硬件设计与实现 1.1 总体方案设计 在该通信测试仪器中,实时控制模块主要实现对射频接收频综、射频发生频综、 滤波器 组件、射频输入模块、射频输出模块等实时控制作用。对射频检波信号进行A/D转换以获取数据。与上位计算机进行通信等功能。 根
[单片机]
在C51中如何实现软复位?
可以定义一个指向复位向量(0x0000)的函数指针,然后在C程序中需要软复位的地方调用该函数: ((void (code *) (void)) 0x0000) (); 例如,以下程序不断地复位: void reset (void) { ((void (code *) (void)) 0x0000) (); } void main (void) { reset (); } 也许你会注意到前面所提到的复位程序并不恢复8051的中断系统,它也不去复位任何的8051外设。若上述代码在一个中断例程中执行,则8051 会阻止同级中断的产生。因此,在中断服务例程中不能使用这个复位程序。 以下的一小段汇编过程同样
[单片机]
【51单片机】(手把手教你)串口通信-基础篇
通信方式 并行 适合短距离通信,并行通信控制简单、相对传输速度快(8位一起传输)。 串行 只能一位一位的传送。 同步(了解) 建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙。 发送方对接收方的同步可以通过外同步和自同步 异步(常) 以字符(构成的帧)为单位进行传输。数据位从低到高传送。 格式: 这里的空闲时间是任意的。 串行通信的制式(传输方向) 单工(仅能沿一个方向) 半双工(可进行双向,但需分时) 全双工 串行通信的错误校验 奇偶校验 在发送数据时,数据位尾随的1位为奇偶校验位(1/0)。
[单片机]
AD7705应用 C51源程序
源程序有很多不妥之处:1、程序中电压结果换算不好,没用 % 取余方法 2、没有对最小精度进行换,方法是2.5/65535=38.14uV,然后用T_Voltage*38.14uV。另有问题请指出;希望大家能共享自己的原创,谢谢!游客说AD7710源程序与此差不多,不知是否能帮得上忙。 #include reg52.h #include absacc.h #include intrins.h #include math.h sbit Number_BIT0 = P2^7; sbit Number_BIT1 = P2^6; sbit Number_BIT2 = P2^5; sbit Number_BIT3 = P2^4; sb
[单片机]
c51:延时程序
#include reg52.h #define uchar unsigned char //f=11.0592 void delay(uchar ms) //约n(ms)延时 { int i; while(ms--) { i=97; while(i--); //循环1此约1ms } } main() { delay(1); delay(5); delay(10); delay(100); delay(1); //上述语句设置断点,观察sec参数,了解延时时间。 } /*约15ms延时 ,需较准确延时:
[单片机]
c51 bit使用
如i=0时,tab 的值为0x3f,那么这句bit_dat((bit)(tab &0x80));的作用是: 第一步:tab 与0x80作位与,即0x3f与0x80作位与(与0x40相位与就是取了第6位),这样的效果是取得了0x3f的最高位(第7位),其它位全部被屏蔽为0 第二步:作int向bit强制转换,向bit转换有一个规则,只要待转换前变量是非零,转换后的bit类型变量即为1,否则为0,这里,0x3f&0x80的结果为0,也就是((bit)(tab &0x80))的结果为0 第三步:调用bit_dat函数,向外设写入这一位。 后面的(bit_dat((bit)(tab &0x40))句子就是取次高位,后面的依此类推,就可以从高
[单片机]
C51程序设计中的数组和指针关系
一、指针是地址 各种类型的数据被分配合适的内存。比如整形数据通常被分配两个连续的存储单元(字节)存放。对数据的访问是通过分配给数据的内存首地址来实现的。我们称这些内存地址为指针。 二、指针变量是存放地址的变量 如果我们定义了一些变量来存放数据的地址(指针),这样的变量就是指针变量。也就是说,指针变量有两个特征:首先它作为变量会分配内存空间;其次,它存放的内容应该是内存地址。 比如,当我们声明了一个整形变量i并且赋予初始值10;同时我们声明了一个整形的指针变量p,将它指向变量i。当我们运行代码时,内存中可能是这样的: i - |0AH| FFF0H |00H|FFF1H |...| p - |0F0H | FFFAH |0FFH
[单片机]
DSP与PC间高速串口通信的实现
摘要: 利用UART解决DSP与PC机间通信时速率匹配问题,并给出了具体实现电路。
关键词: DSP UART 串行通信 FIFO
DSP是一种专门用来实现信号处理算法的微处理器芯片,主要优点有:硬件乘法器,哈佛总线结构,多种寻址方式,零耗循环(zero overhead loop),程序执行时间可预测等。
正是由于DSP的诸多优点能够满足密集的数学计算,而且DSP应用的另一个突出特点是实时性,使其在通信、雷达、数字电视等领域得到了广泛的应用,而且日益渗透到人们的日常生活的各个方面。
在实时信号处理中已经离不开DSP,这些处理系统中包含了各种数据通
[工业控制]