STC15F2K60S2串口通信程序代码
2017-06-18 18:56
776 查看
//**********************************************
//STC15F2K60S2串口通信程序,将串口接受到的数据从串口发出去
//采用22.1184M晶振,波特率115200
//为方便大家调试,特附该程序的项目工程文件下载地址,下载打开即可调试下载到单片机
//
//*********************************************
#include <stc15fxxxx.h> //调用stc15f系列头文件,下载地址: http://pan.baidu.com/s/1eRUbjLS
/*************常量定义****************/
#define MAIN_Fosc 22118400L
//主时钟,晶振频率不同的直接在这里修改频率
#define serial_one_read_max 32
//定义缓存区的长度
#define serial_one_baud_rate 115200L
//波特率,只需在这里修改波特率就可以了
#define Timer1_Reload
(65536UL -(MAIN_Fosc / 4 / serial_one_baud_rate))
//用定时器1做波特率发生器,计算定时器1的重装值
/*************变量定义****************/
u8 serial_one_read_data[serial_one_read_max];
//定义串口接受数据缓存区
u8 serial_one_read_count=0; //接受数据的个数
//初始化串口1
void serial_one_init()
{
SCON |= 0x40;
//8位数据
P_SW1 &= ~0xc0;
//UART1 使用P30 P31口 默认
TR1 = 0;
//关闭定时器
AUXR &= ~0x01;
//S1 BRT Use Timer1;
TMOD &= ~(1<<6);
//Timer1 set As Timer
TMOD &= ~0x30;
//Timer1_16bitAutoReload;2
AUXR |= (1<<6);
//Timer1 set as 1T mode
TH1 = (u8)(Timer1_Reload >> 8);
TL1 = (u8)Timer1_Reload;
TR1 = 1;
//打开定时器
PS = 1;
//高优先级中断
REN = 1;
//允许接收
ES = 1;
//允许中断
EA = 1;
//允许全局中断
}
//延时10毫秒
void Delay10ms() //@22.1184MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 1;
j = 216;
k = 35;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//串口1发送一个字节
void serial_one_send_byte(u8 dat)
{
SBUF = dat;//发送数据
while(!TI);//等待发送完毕
TI=0; //清除发送标志
}
//串口1发送字符串
void serial_one_send_string(u8 *dat)
{
while(*dat)
serial_one_send_byte(*dat++);
}
//串口1发送指定指定长度数据
void serial_one_send_length_string(u8 *dat,u8 length)
{
u8 i=0;
for(;i < length;i++)
serial_one_send_byte(dat[i]);
}
void main()
{
Delay10ms();//延时10毫秒
Delay10ms();//延时10毫秒
serial_one_init();//串口初始化
while(1)
{
if(serial_one_read_count > 0)//如果接受到数据
{
Delay10ms();//延时10毫秒,等待数据全部读入
serial_one_send_length_string(serial_one_read_data,serial_one_read_count);//发送接收到的数据
serial_one_read_count = 0;//接收计数清0
}
}
}
/********************* 串口1中断函数************************/
void UART1_int (void) interrupt UART1_VECTOR
{
if(RI)
{
RI = 0;//清除接受标志
serial_one_read_data[serial_one_read_count] = SBUF;//将数据存入数组
if(++serial_one_read_count > serial_one_read_max)
//避免溢出
serial_one_read_count = 0;
}
// if(TI)
// {
// }
}
相关文章推荐
- STM32串口通信代码、ASCII码、XU4串口通信,printf只会转换为无符号类型,linux下的串口通信程序
- RC5编码格式的遥控器解码、PCA9633器件控制代码示例、串口通信程序示例、IIC通信示例
- 基于COMPAC协议的.NET框架实现的串口通信程序
- 基于Nios II和eCos的串口通信程序开发
- 多线程技术在VC++串口通信程序中的应用研究
- Qt编写串口通信程序全程图文讲解
- Qt编写串口通信程序全程图文讲解(一)
- 一个C串口通信程序
- linux串口通信程序
- 51单片机与PC串口通信程序及硬件电路图
- 【原创】串口通信测试程序
- Qt编写串口通信程序全程图文讲解
- Pocket PC常用程序代码(JPEG,串口,ADOCE还有网络的等等)
- 在CB6下基于api函数编写串口通信程序简介
- [汇总]Windows Mobile常用程序代码(串口、图象、网络、3D、数据库、音频视频等等)
- 多线程技术在VC++串口通信程序中的应用研究
- 多线程技术在VC++串口通信程序中的应用研究
- 232串口通信程序刚完成(本站原创)
- VS2005 下的串口程序的实现代码
- Qt编写串口通信程序全程图文讲解(二)