登录
|
注册会员
开启辅助访问
设为首页
收藏本站
扫一扫关注官方微信
论坛
BBS
M币充值
M currency prepaid phone
M币获取
附件中心
搜索
search
全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
MCU资讯论坛
»
论坛
›
单片机论坛
›
51单片机论坛
›
51单片机的串口通讯例程
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版
51单片机的串口通讯例程
[复制链接]
8792
11
1871***
管理员
发表于 2010-5-9 22:27:43
|
查看全部
|
阅读模式
本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要
登录
才可以下载或查看,没有帐号?
注册会员
x
51
单片机
的串口通讯例程详情见附件
// 采用查询方式进行串口通讯的例子
// 采用这种方式的弊端:
// 1.如果对方没有发送数据,则本机无限等待,而不能做其它事情
// 2.如果对方发送数据而本机正做其它事情,那么有可能丢失数据。
// 因此实际上串口接收常采用中断方式,串口发送则不需要。
#include <reg51.h>
extern void serial_init(void);
extern unsigned char getchar(void);
extern void putchar(unsigned char ch);
extern void puthex(unsigned char ch);
void main(void)
{
unsigned char i;
serial_init(); // 串口初始化
do {
i=getchar(); // 如果没有收到串口数据则一直等待(查询接收串口数据的弊端)
++i;
--i; // 观察断点
putchar(i); // 在串口显示接收到的ASCII数据(就是把原来收到的数据再送回串口)
putchar(' ');
putchar(' ');
putchar('0');
putchar('x');
puthex(i); // 在串口以十六进制格式显示接收的ASCII数据
putchar(' ');
putchar(' ');
++i;
--i; // 观察断点
}while(1);
}
复制代码
// 题目:串口初始化C代码
// 要求:
// 1.波特率1200bps,无奇偶校验,停止位1,数据位8
// 2.定时器T1做波特率发生器
// 软件模拟测试说明:
// 1.这个测试采用查询方式进行串口通讯
// 2.将软件仿真环境的晶震设为11.0592 MHz
// 3.软件模拟全速运行, 观察波特率是1200bps
// 4.在串口1中输入数字或字母,可观察到通讯是否有误。
//#pragma src
#include <reg51.h>
//串口初始化
void serial_init(void)
{
//ET1 = 0; //CLR 0ABH ;禁止T1中断
TMOD = 0x20; //MOV 89H,#20H ;timer 1 mode 2: 8-Bit reload(定时器T1 模式2: 8位自动初值重装)
TH1 = 0xE8; //MOV 8DH,#0E8H
TL1 = 0xE8; //MOV 8BH,#0E8H ;1200bps, 11.059
TR1 = 1; //SETB 8EH ;启动定时器1
SCON = 0x50; // mode 1: 10-bit UART, enable receiver(模式1: 10位异步发送/接收, 使能接收允许位)
//SM1 = 1; // ;串行口 模式1
//SM0 = 0;
//REN = 1; // ;允许串行中断接收
SM2 = 1; //SETB O9DH ;收到有效的停止位时才将RI置1
ES = 1; //SETB 0ACH ;允许串行中断
EA = 1; //SETB 0AFH ;总中断开
}
//中断方式处理串口数据
void serial(void) interrupt 4 using 1
{
if(RI)
{
// RI = 0;
// 串口接收, 采用临时缓冲
}
#if 0
if(TI)
{
// TI = 0;
// 串口发送, 没有必要使用中断方式
}
#endif
}
// 查询方式接收串口数据
unsigned char getchar(void)
{
while(!RI);// 没有收到串口数据则一直等待
RI=0;
return SBUF;
}
// 查询方式发送串口数据
void putchar(unsigned char ch)
{
SBUF=ch;
while(!TI);
TI=0;
}
code unsigned char HEX_TAB []="0123456789ABCDEF";
void puthex(unsigned char ch)
{
unsigned char i,j;
i=ch>>4;
j=ch&0x0f;
putchar(HEX_TAB[i]);
putchar(HEX_TAB[j]);
}
复制代码
串口通讯例程.rar
(20.09 KB, 下载次数: 35)
2010-5-9 22:27 上传
点击文件名下载附件
举报
回复
11 个评论
jest***
新手上路
发表于 2010-6-11 11:28:30
|
显示全部楼层
不错!{:13_781:}
举报
回复
支持
反对
hpd***
新手上路
发表于 2010-6-13 13:50:33
|
显示全部楼层
不错!!!!!!!!!
举报
回复
支持
反对
kevi***
新手上路
发表于 2010-7-24 11:06:56
|
显示全部楼层
感谢分享.....................
举报
回复
支持
反对
kevi***
新手上路
发表于 2010-7-24 11:07:20
|
显示全部楼层
感谢分享!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
举报
回复
支持
反对
nyw***
新手上路
发表于 2010-10-12 11:40:31
|
显示全部楼层
{:13_780:}收下了,哈哈!~
举报
回复
支持
反对
xyw372***
新手上路
发表于 2010-10-18 18:19:38
|
显示全部楼层
{:13_1488:}为什么我就下不了呢!。。。
举报
回复
支持
反对
fm***
新手上路
发表于 2010-10-18 22:27:55
|
显示全部楼层
不错,顶一下
举报
回复
支持
反对
fm***
新手上路
发表于 2010-10-18 22:59:33
|
显示全部楼层
学习一下,谢谢
举报
回复
支持
反对
hsy***
新手上路
发表于 2011-3-1 23:11:34
|
显示全部楼层
haohaomashangqukankan好号码闪回去
hsy2966于2011-3-1 23:12补充以下内容:
#include<reg52.h>
typedef unsigned int uint16;
typedef unsigned char uint8;
void init()
{
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
SCON=0X50;
ES=1;
EA=1;
}
void main()
{
init();
while(1);
}
void serial() interrupt 4
{ RI=0;
ACC=SBUF;
ES=0;
P1=0Xef;
SBUF=ACC;
while(TI==0);
TI=0;
ES=1;
}
hsy2966于2011-3-1 23:12补充以下内容:
#include<reg52.h>
typedef unsigned int uint16;
typedef unsigned char uint8;
void init()
{
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
SCON=0X50;
ES=1;
EA=1;
}
void main()
{
init();
while(1);
}
void serial() interrupt 4
{ RI=0;
ACC=SBUF;
ES=0;
P1=0Xef;
SBUF=ACC;
while(TI==0);
TI=0;
ES=1;
}
举报
回复
支持
反对
查看下一页
返回列表
1
2
/ 2 页
下一页
*
滑块验证:
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册会员
本版积分规则
发表回复
回帖后跳转到最后一页
回复
转播
评分
分享
打开支付宝扫一扫,最高立得1212元红包
搜索
本版
帖子
用户
热搜:
传感器
51串口程序
电子管放大器
夾式電表
夾式電流
Mentor论坛
打印机
版块推荐
百宝箱
My 布拉格
无边框Z9
Z9Max
Z9mini
nubia动态
问题 & 建议
资源分享
爱拍
同城会
牛仔生活
查看论坛所有版块>>
每日签到
论坛任务
摄影技巧
跳蚤市场
互助问答
论坛导读
申请内测
红包中心
每日摇一摇
活动中心
网站地图
官方旗舰店
图文热点
低成本、高性能、带EEPROM了解一下
无锡矽杰微电子的XCE855E 是一颗带 EEPROM 的 8 位单片机,专为多 IO 产品的应用而设
工控仪表/水电气表LCD驱动/抗干扰液晶段码
产品品牌:永嘉微电/VINKA 产品型号:VK2C21A 封装形式:SOP28 概述 VK2C21是一
为什么电动车会着火?原因是什么?电动车充
其实电动车起火的新闻我们也不是第一次看到了,让很多人对电动车的安全性产生质疑,但
性价比超高的国产单片机了解一下
hello大家好,我是无锡矽杰微电子的马甲小号 今天给大家介绍一颗单片机,我们的
上手简单,开发资料齐全的触摸单片机了解一
hello,各位工程师大大们新年快乐 我是无锡矽杰微电子的马甲号。 我司新推出了
更多
精华推荐
低成本、高性能、带EEPROM了解一下
工控仪表/水电气表LCD驱动/抗干扰液晶段码
软件模拟2812通信协议导致的种种问题,你遇
适用于电子鞭炮、电子蜡烛灯等方案的单片机
为什么电动车会着火?原因是什么?电动车充
性价比超高的国产单片机了解一下
国产单片机推荐I 低功耗、强驱动、极具性价
上手简单,开发资料齐全的触摸单片机了解一
更多
社区学堂
低成本、高性能、带EEPROM了解一下
工控仪表/水电气表LCD驱动/抗干扰液晶
低成本、高性能、带EEPROM了解一下
无锡矽杰微电子的XCE855E 是一颗带 EEPROM 的 8 位单片机,专为多 IO 产品的应用而设
工控仪表/水电气表LCD驱动/抗干扰液晶段码
产品品牌:永嘉微电/VINKA 产品型号:VK2C21A 封装形式:SOP28 概述 VK2C21是一
为什么电动车会着火?原因是什么?电动车充
其实电动车起火的新闻我们也不是第一次看到了,让很多人对电动车的安全性产生质疑,但
更多
客服中心
QQ:187196467
服务时间:周一至周日 8:30-20:30
在线客服
客服微博
产品咨询
售后中心
关注我们
关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
QQ:187196467
周一到周日 8:30-22:00 (全年无休)
7 x 24小时在线客服
手机版
Powered by
MCUZX!
X3.4 © 2008-2015
MCU资讯论坛
版权所有
京ICP备18035221号-2
客服QQ: 187196467
技术支持:
MCU资讯论坛
|
网站地图
快速回复
返回顶部
返回列表