51单片机与PC串口通信程序及硬件电路图
来源:互联网发布者:刘德华河北分华 更新时间: 2020/11/14
#include
#define BUFFERLEGTH 10
//-----------------------------------------------------------------
void UART_init(); //串口初始化函数
void COM_send(void); //串口发送函数
char str;
char j;
//-------------------------------------------------------------------
void main(void)
{
unsigned char i;
UART_init();
j=0; //初始化串口
for(i = 0;i < 10 ;i++)
{
COM_send(); //首先发送一次数据作为测试用
};
while(1);
}
//-------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: UART_init()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
// 串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{
//初始化串行口和波特率发生器
SCON =0x50; //选择串口工作方式1,打开接收允许
TMOD =0x20; //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xfA; //实现波特率9600(系统时钟11.0592MHZ)
PCON = 0x80;
TR1 =1; //启动定时器T1
ET1 =0;
ES=1; //允许串行口中断
PS=1; //设计串行口中断优先级
EA =1; //单片机中断允许
}
//------------------------------------------------------------
void COM_send(void)
{
unsigned char point = 0;
for(point=0;str!="\0";point++) //连续发送二十位数据 //把缓存区的数据都发送到串口
{
SBUF=str;
while(!TI);
TI=0;
//str="\0";
}
}
//--------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: com_interrup()串口接收中断处理函数
// 函数功能: 接收包括起始位"S"在内的十位数据到数据缓冲区
//--------------------------------------------------------------------------------------------------
void com_interrupt(void) interrupt 4 using 3
{
unsigned char RECEIVR_buffer;
bit flag=1;
if(RI) //处理接收中断
{
RI=0; //清除中断标志位
RECEIVR_buffer=SBUF; //接收串口数据
str=SBUF;
if (RECEIVR_buffer == "$")
{ ES=0;
str="\0";
SCON =0x40; //接收不允许
COM_send(); //发送数据
ES=1;
j=0;
flag=0;
SCON=0x50; //接收允许
}
if(flag)
j++;
}
}
这里还没有内容,您有什么问题吗?
电子电路资源推荐
- 无线通信 中文版 杨鸿文
来源:下载中心
- 常用元件3D封装库:LQFP-64
来源:下载中心
- 电路理论基础
来源:大学堂
- 了解和优化采样数据系统
来源:大学堂
- 单片机运行原理的一点点总结
来源:电路图
- 基尔霍夫定律:支路、节点、回路和网孔
来源:电路图
推荐帖子 最新更新时间:2024-11-13 09:13
- 求一道verilog的解答?
- 比赛用计时器(有复位按钮、start/pause按键、4个数码管) 用verilog语言变写 跪求!!! 求一道verilog的解答? 友情帮顶下。 这个很多例程都可以借鉴下,建议楼主百度下。 比数字钟还简单呢
- jbcfelix嵌入式系统
- 【工程源码】基于FPGA的音频采集+FFT频谱分析+VGA显示频谱值
- 非原创,网上下载的,不过进行了一点修改,原来的程序中用的是寄存器实现了9K的存储器,非常消耗逻辑资源,我给改成使用双口RAM存储了,资源立马降下来了,FFT使用的是VHDl格式的源码,不是IP核。 https://bbs.eeworld.com.cn/forum.php?
- 小梅哥Altera SoC
- NAND flash和NOR flash在软件支持方面的差别
- NAND 闪存的缺点在于读速度较慢,它的I/O 端口只有8 个,比 NOR 要少多了。这区区 8 个I/O 端口只能以信号轮流传送的方式完成数据的传送,速度要比 NOR 闪存的并行传输模式慢得多。再加上 NAND 闪存的逻辑为电子盘模块结构,内部不存在专门的存储控制器,一旦出现
- 13691982107移动便携
- 元器件背后的那些门门道道
- 对于从事电子行业的工程师来说,是每天都需要去接触,每天都需要用到的,但其实里面的门门道道很多工程师未必了解。这里列举出工程师门常用的十大电子元器件,及相关的基础概念和知识,和大家一起温习一遍。 一、电阻 作为电子行业的工作者,电阻是无人不知无人不晓的。它的重要性,毋庸
- Jacktang模拟与混合信号
- modelsim的前仿真 FPGA(cyclone4)开发板心得第07贴
- 总感觉时序仿真才是fpga的重中之重.奈何网上找不到靠谱的资料,能借到的书也都版本过低,只能自己摸索了.. 用quartus生成的testbench,没有做任何改动.进入modelsim之后用force添加输入信号,但是很奇怪的是,有些输出信号会改变,有些却总是x signal是
- astwygFPGA/CPLD
- 脑子卡了...就两句代码的报错
- 用宏定义 一个stm32的IO口操作,然后....说不清楚啊,上代码说~ 先是这样, #define KEY_SET GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0); 然后我又这样 if (KEY_SET==Bit_SET ) { LwIP_I
- yl20084784stm32/stm8
- 中断问题,执行NVIC_Init(&NVIC_InitStructure)使执行不下去
- 芯灵思Sinlinx A33实现linux led驱动
- stm32驱动液晶12864,有程序,求助
- Realtime库实际学习过程加所有模块心得(连载)
- 第一批获奖名单(369名)【TI圣诞狂欢:上千套CC3200开发套件免费申请】
- high fanout 解决之道
- Sailor Hat ESP32 开发板
- 寻找合适的单片机
- 硬件工程师入门教程
- 基于UC3842的开关电源保护电路的改进
- 贴片90129013封装怎么处理???
- ICC接口询问
- Nucleo 板卡液晶屏
- keil 存储项设置怎么改
- 毕业设计 DS1302时钟 DH11温湿度 带到计时(24小时)显示
- DSP TMS320C6652/C6654在哪些产品上用过呢?
- 用单片机实现的汉字OSD模块
- 小蜜蜂SLSTK2010A学习序列1:晒板
- 【helper2416】第四弹 linux 3.2的spi驱动解决方法
- 【2024 DigiKey 创意大赛】基于AI的室内环境自适应调节系统(离线大模型)【作品提...