STC89C52定时器3串口通信

更新时间:2023-09-13 02:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

#include //52系列单片机头文件 #include // 使用到空指令

/*****************************************************************************/

#define uint unsigned int //用简写符号表示无符号整型数据类型 #define uchar unsigned char //简写符号表示无符号字符型数据类型 #define FOSC 12000000 //晶振大小值设定,便于计算波特率 #define BAUD 9600

sbit PWM=P1^1; //控制信号输出口定义

uchar a,b,y,i,j,s[4];

/*******************************串口初始化程序********************************/ void InitUART(void) {

unsigned int iTmpBaud; unsigned long lTmpBaud; iTmpBaud = 0;

//首先选定定时器2作为波特率发生器,16位定时器,自动装载 SCON = 0x50; //SM0 SM1 SM2 REN TB8 RB8 TI RI //0 1 0 1 0 0 0 0

PCON = 0x00; //PCON的地址是87H,这里SMOD =0

T2CON = 0x30;//TF2 EXF2 RCLK TCLK EXEN2 TR2 C(/T2) CP(/RL2) //0 0 1 1 0 0 0 0 /* T2MOD = 0x00; // / / / / / / T2OE DCEN //0 0 0 0 0 0 0 0*/

lTmpBaud = FOSC/BAUD; lTmpBaud /= 32; //12T-mode iTmpBaud = lTmpBaud & 0xFFFF; iTmpBaud = 65536 - iTmpBaud; RCAP2H = (iTmpBaud>>8) & 0x0FF; RCAP2L = iTmpBaud & 0x0FF;

RI = 0; //清除接收中断标志 REN = 1; //允许串行接收 ES = 1; //允许串行中断 TR2 = 1; //启动定时器1

EA=1;//开总中断 }

//************************************通过串口将接收到数据发送给PC端**************************************

void R_S_Byte(uchar R_Byte) { SBUF = R_Byte;

while( TI == 0 ); //查询法

TI = 0; }

//*********************************串****************************************

void UARTRead(void) interrupt 4 { if(RI) {

s[i]=SBUF; //接收到的数据放入数组a } RI=0; i++; if(i==4)

{ i=0; for(j=0;j<4;j++) { R_S_Byte(s[j]); } }

收到数据 //接收上位机发送的控制指令 //判断接收标志 口 }

//*********************************

***************************************

void main(void) {

InitUART(); while(1) {

} }

主程序

本文来源:https://www.bwwdw.com/article/k1ih.html

微信扫码分享

下载全文
范文搜索
下载文档
Top