历史上的今天
今天是:2024年12月23日(星期一)
2021年12月23日 | 基于51单片机的串口通信(PC发字符)
2021-12-23 来源:eefocus
串口通信
选用芯片:AT89S52
函数功能:见如下代码。
/*******************************************************************
函数功能:PC机发送数据给单片机,每次发送3个字节(每字节为8位)的数据,
每个字节的内容为0~99无符号整数中的一个;单片机接收PC机串口发送过来的
这3个字节数据,并将它们依次以十进制方式显示在6位数码管中(每两个数码管
显示一个字节数据,例如发送数据为11,9,70,则数码管上显示11 09 70);
显示采用共阳极数码管,采用动态扫描显示方式。
作者:Crazy Wind
日期:2020.10.22
version:1.0.0
********************************************************************/
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //段码:0~9
uchar code smgwei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位码
uchar b;
uchar k=0;
uchar y[9]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //给数组y[]一组初始值
/*****************************************************
函数功能:ms延时
******************************************************/
void delayms(uint ms) //毫秒延时
{
uint i,j;
for(i=0;i for(j=115;j>0;j--); } } /***************************************************** 函数功能:发送数据x ******************************************************/ void send_char(uchar x) { SBUF=x; //SBUF是数据缓冲寄存器(暂存数据),把数据x输入到SBUF while(!TI); //等待数据发送 TI=0; //每发送8位数据TI就自动置1,需软件清零 } /***************************************************** 函数功能:串口初始化、T1作波特率发生器初始化、打开串口中断 ******************************************************/ void init() { TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率 TH1=0xFD; //波特率9600 TL1=0xFD; SCON=0x50; //串口工作方式1 允许接收 PCON=0x00; //波特率不倍增 TR1=1; //启动定时器1 EA=1; //打开总中断 ES=1; //打开串口中断 } /***************************************************** 函数功能:把接收到的数据转换十进制,再转换成对应的段码 ******************************************************/ void quduanma() { y[k]=smgduan[b/16]; y[k+1]=smgduan[b%16]; y[k+2]=smgduan[10]; } void main() { uint n; init(); //串口初始化 while(1) { for(n=0;n<8;n++) { P2=smgwei[n]; P0=y[n]; delayms(1); P0=0xff; } } } /***************************************************** 函数功能:串口接收的中断函数 ******************************************************/ void TNT_Uart() interrupt 4 { RI=0; //每接收8位数据RI就自动置1,需软件清零 b=SBUF; //SBUF是数据缓冲寄存器(暂存数据),把数据输出到b quduanma(); send_char(b); //传给电脑接收到的数据 k=k+3; if(k==9) //装满8位就重装 { k=0; } }
上一篇:51单片机串口通信数码管显示
史海拾趣
|
本人从事安防行业5年,一路走来,一直在做监控摄像机这一块,发现自己组装生产摄像机,有以下几大优势,供大家参考: 第一:摄像机本身组装很简单,技术含量不高,不如自己动手,还学会了组装,与摄像机内部结构。 第二:自己组装生产摄像机,价格 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 自2009年年底起,3D在国内成为了“时尚”的代名词,继3D电影《阿凡达》、《爱丽丝梦游仙境》在中国市场赚得盆满钵满,3D似乎也成为了报刊企业的又一掘金点。 2010年4月16日,湖北《十堰晚 ...… 查看全部问答> |
|
先祝各位达人元旦快乐! 我老板现在想开发CDMA的通信模块,就是网上很多卖的那种,可以通过串口或其他通用接口进行CDMA无线通信,但我查了很长时间仍然没有头绪……望各位达人指点一二: 用于开发CDMA模块一般都有什么芯片?我看网上大部分都是高 ...… 查看全部问答> |
|
Powerpc现在编译的文件系统是jff2格式,用串口线先传倒powerpc的RAM里,再复制进flash,但是现在文件系统似乎限制了大小,如果传3M左右就能正常启动,如果大于4M就不能正常启动,系统会不停重启。但是如果系统能正常启动后,用FTP上传文件,则没有 ...… 查看全部问答> |
|
之前用的是vxworks+Tornado开发方式,一切比较顺利!! 最近单位买了最新版的vxworks,开发环境是workbench,刚接触,本打算先做启动软盘尝试启动vxworks,可发现每次编译后,目标机出现v1.6++++++++++++++++++然后又重起,尝试了各种方法,都是这样,请各位 ...… 查看全部问答> |
|
S3C44B0X那块板子,能在线调试并且LCD显示正常,但是将程序烧录进去后,却发现LCD没有显示了。这是怎么回事呢?有哪位大虾遇到过同样的问题吗? 做LED实验却不管在线调试还是将程序烧录进去,都能得到正确的结果。… 查看全部问答> |




