完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这个例程是开发板自带的,功能是PC向单片机发数据,单片机再反馈。里面P0口是我为了直观显示单片机向PC机返回数据加上去的,但我发现发字符串时返回没问题,但如果返回单个字符或数字则返回出问题,有时甚至只接受没返回(用的是串口调试助手)
#include "reg51.h" #define uchar unsigned char #define uint unsigned int uchar ch; //用于存放串口接收到的数据 bit read_flag= 0 ; //取数标志位 //初始化串口 void init_com( void ) { SCON = 0x50; // 设定通信方式为方式1,允许接收,相当于REN = 1; SM1 = 1; PCON = 0x00; //SMOD=0,该语句可去掉 IE |= 0x90 ; //打开串口中断, 相当于 EA = 1;ES = 1; //以下4句设置T1 TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率 TH1=0xE6; //定时器0赋初值,TH1=(256 - (12000000 / (32 * 12 * 1200)))=230; TL1=0xE6; //TL1=(256 - (12000000 / (32 * 12 * 1200)))=230; TR1 = 1; //启动T1 } //串口中断函数 void serial () interrupt 4 using 3 { if (RI) { RI = 0 ; //此步必不可少,因为硬件不能将其置0 ch=SBUF; //从SBUF中取出数据 read_flag= 1 ; //就置位取数标志 } } //串口发送函数 void send_char( unsigned char ch1) { SBUF=ch1+1; //将待发数据放到SBUF while (ti== 0); //等待TI=1(表示帧发送结束)发送 TI= 0 ; //此步必不可少,因为硬件不能将其置0 } //主函数 void main(void) { P0=0x0f;// ------------------ init_com( ) ; while(1) { if (read_flag) //如果取数标志已置位,就将读到的数从串口发出 { read_flag= 0 ; //取数标志清0 P0=~P0; // ---------- send_char(ch); //将读到的数从串口发出 } } |
|
相关推荐
1个回答
|
|
不错的资料,值得分享
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
280 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1083 浏览 0 评论
846 浏览 0 评论
886 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
869 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11824 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 10:44 , Processed in 0.423565 second(s), Total 42, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号