自己编写STC15F2K60S2函数之串口2通信初始化

时间:2024-11-06 17:08:16

1、#include <STC15F2K60S2.H>

2、/*****函数名:串行口2初始化调用:Serial2Ini();参数:无备注:串行口2只有8位可变波特率和9位可变波特率2种方式,而且只能使用定时器2作为波特螟苋镔柞率发生器,而定时/计数器2只有一种工作方式——16位自动重装方式。*****/void Serial2Ini(){ S2CON = 0x10; //S2SM0 | 空|S2SM2 |S2REN |S2TB8 |S2RB8 |S2TI |S2RI(方式0即8位可变波特率方式;允许接收) T2L = 0xE8; //此时,波特率=定时器2的溢出率/4 T2H = 0xFF; //通过T2L和T2H的值设置波特率为9600 AUXR &= 0xE3;//先对需要设置的位进行清零 1110 0011 AUXR |= 0x10; //T0x12 | T1x12 | UART_M0x6 |T2R|T2_C/T(T上画)|T2x12| EXTRAM | S1ST2 启动定时器2,即T2R=1;12T IE2 &= 0xFE; //先对需要设置的位进行清零 1111 1110 IE2 |= 0x01; //- - - - - - - | ESPI |ES2允许UART2中断 EA = 1; //允许总中断}

3、void main(void){ Serial2Ini(); //运行串口2初始化函数 while(1){ } //等待中断()}

4、oid Uart2(void) 坡纠课柩interrupt 8 using 2{ unsigned char mydata稆糨孝汶; if(S2CON & 0x01) //如果是接收中断 { S2CON &= 0xFE; //接收中断标志位清0 mydata = S2BUF; //将接收缓冲区的数据保存到mydata变量中 S2BUF = ~mydata; //将接收到的数据按位取反后发回 } if(S2CON &0x02) //如果是发送中断 { S2CON &=0xFD; //发送中断标志清0 }}

© 手抄报圈