/*程序的功能是在T1定时器工作方式2下使用串口工作方式1实现串口通讯,
即PC机发送一串数据,51单片机将数据反馈回来。使用回车符作为一串字符串的结束标志
总结:
我是参照郭天祥51单片机写的,
这个程序写得还是有点疑惑,就是下面在接受完数据后
一定要先将串口中断关闭(即ES = 0),然后再进行处理,
如果不关闭中断的话,反馈回PC机的数据就是I get\n*/
#include
//#define DEBUG
#define u8 unsigned char
#define u16 unsigned int
#define MAXSIZE 64
u8 code table[] = "I get ";
u8 flag,index,i,Len;
u8 Buff[MAXSIZE];
void Configuration()
{
TMOD = 0x20;
TH1 = 0xF3; //设置波特率为4800
TL1 = 0xF3;
TR1 = 1;
SCON = SCON & (0x3<<6);
SCON = SCON | (0x01<<6) | (1<<4); //设置串口工作模式和使能接受
PCON = PCON | (1<<7); //设置波特率加倍,即最终的波特率为9600
EA = 1; //开启中断
ES = 1;
}
void Recieve() interrupt 4
{
RI = 0;
Buff[index++] = SBUF;
#ifdef DEBUG
SBUF = Buff[index-1];
while(!TI);
TI = 0;
#endif
if (Buff[index-1]=='\n' ) //这一串数据结束
{
Len = index;
index = 0;
flag = 1;
}
}
void main()
{
Configuration();
while(1)
{
if (1==flag) //判断是否有数据到来
{
ES = 0; //要关闭中断,否则程序有问题
for(i=0;i<6;i++)
{
SBUF = table[i];
while(!TI); //等待数据发送完毕
TI = 0;
}
for(i=0;i
关键字:51单片机 串口通讯
引用地址:
51单片机———串口通讯的疑惑
推荐阅读最新更新时间:2024-03-16 14:54
基于AT89C51单片机和DTMF通信实现电话远程控制家用电器的设计
引言 随着计算机技术和电信业的发展,通过电话线进行的远程通信越来越常见。人们通常采用MODEM进行通信,但是在通信数据量不大,对通信速率要求不高的应用场合,我们可以考虑一种DTMF通信方式,它具有接口简单,成本低廉且可靠性高的特点。本文介绍了一种电话远程控制家用电器的实现方法。用户可通过任意一部双音频电话(包括手机、电话分机)对自己家庭安装的家用电器进行开机、停机、设定等操作。 1、系统结构 本系统主要包括电话振铃检测电路、电话自动摘挂机电路、DTMF信号解码电路、语音提示电路以及整个系统的控制心脏CPU电路。当有电话打入时,电话振铃检测电路检测到有振铃并等待至系统默认的振铃次数后,控制器自动摘机,并在语音电路的提示下依次输入
[单片机]
C51单片机同时扩展SRAM和EPROM
情况一:扩展的RAM和ROM的容量一致 Ø 异同与比较 a. 2764是8K的ROM、6264是8K的RAM b. 2764与单片机连接的数据线是单向的(从ROM到单片机) c. 6264与单片机连接的数据线是双向的 d. 控制线不同:ROM是OE---PSEN RAM是WR---WE、RD---OE e. 片选信号线都是38译码器的Y0非接线端,因此两片存储器的地址是一样的 情况二:扩展的RAM和ROM的容量不一致 Ø 异同与比较 a. 2732是4KROM、6116是2KRAM b. 2732需要12根数据线、6116需要11根数据线,最终单片机要分配
[单片机]
四种简略的拓宽51单片机中断的妙招!
一、选用硬件央求和软件查询的办法: 这种办法是:把各个接连源通过硬件“或非(高有用,如CD4002)”(与,低有用)门引进到单片机外部接连源输入端(INT0或INT1),一同再把外部接连源送到单片机的某个输入输出端口,这么当外部接连时,通过“或非”(与)门致使单片机接连,在接连效能程序中再通过软件查询,进而转相应的接连效能程序。 明显,这种办法的接连优先级取决于软件查询的次第。其硬件衔接和软件编程如下: Void zhongduan (void) interrupt 0 using 3 //接连函数 { EX0=0;//关接连 If(P0_0=1) { *****}//接连查询 If(P0_1=1) {
[单片机]
【51单片机快速入门指南】3.3:USART 串口通信
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 快速使用 可通过STC-ISP的波特率计算器直接生成初始化函数 6T模式下需将系统频率翻倍 1T的单片机不需要将系统频率翻倍,定时器时钟应为1T 范例程序中有写的很好的例程 硬知识 摘自《STC89C52系列单片机器件手册》 中断知识见【51单片机快速入门指南】3:中断系统 STC89C52系列单片机内部集成有一个功能很强的全双工串行通信口,与传统8051单片机 的串口完全兼容。设有 2 个互相独立的接收、发送缓冲器
[单片机]
基于51单片机的多点测温系统设计
1.温度传感器DS18B20介绍 DALLAS公司单线数字温度传感器DS18B20是一种新的“一线器件”,它具有体积小、适用电压宽等特点。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20支持“一线总线”接口,测量温度范围为-55℃~+125℃,在-10℃~+85℃范围内,精度为±0.5℃;通过编程可实现9~12位的数字值读数方式;可以分别在93.75ms和750ms内将温度值转化为9位和12位的数字量。每个DS18B20具有唯一的64位长序列号,存放于DS18B20内部ROM只读存储器中。 DS18B20温度传感器的内部存储器包括1个高速暂存RAM和1个非易失性的电可擦
[单片机]
C-51单片机动态数码管显示1234.5
利用数码管显示数字,可以在静态数码管上加以改良, 给出短码想要的数字可以自己修改。。。。 下面给显示1234.5的码, 这个没有用到循环语句,比较简单 #include reg51.h #define uchar unsigned char void delay(uchar x) { uchar i; while(x--) { for(i=0;i 120;i++); } } void main() //**主程序** { while(1) { P0=0Xfe; P2=0X06; delay(1); P0=0Xfd; P2=0X5b;
[单片机]
8051单片机中的寄存器是算CPU还是RAM
问题:单片机8051中的一些寄存器到底算CPU的还是RAM的? 请高手指点,像累加器DPTR,A,PSW等一些寄存器是属于CPU的,但书上又说他们都属于RAM中的特殊功能寄存器(SFR),这是什么道理? 另外,存储器和寄存器不是两个功能,结构都不同的东西么?为什么RAM中存在许多寄存器组,即二者在此是相同的? 综合理解:有以下几种可能: 1、CPU是一个抽象的概念,如同操作系统这个概念一样没有明确的界线;(cpu是由人划分出来的一块区域不明确) 2、CPU这个概念不适用与51; 3、51可以划分CPU和RAM部分,但CPU和RAM有交叉的部分(比如寄存器组等) 4、CPU部分寄存器是和RAM统一编址,访问该RAM地址即等于
[单片机]