51单片机与PC机串口通信

发布者:敬亭山人最新更新时间:2012-12-01 来源: 51hei关键字:51单片机  PC机  串口通信 手机看文章 扫描二维码
随时随地手机看文章

单片机P2口接8只LED灯,P3.2~P3.3引脚连接有K1和K2共2个按键,使用单片机串行口与PC机通信。
1)由PC机控制单片机的P2口,将PC机送出的数以二进制形式显示在LED灯上;
2)按下按键K1向PC机发送数字0x55,按下K2向PC机发送数字0xAA。
源程序如下:
//出自:51hei单片机学习网http://www.51hei.com
#define uchar unsigned char
#include "string.h"  
#include "reg51.h"
unsigned char   code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
                         0x08,0x03,0x46,0x21,0x06,0x0e}; //十六进制-7段译码表
void mDelay(unsigned int DelayTime)     //延时函数
{ unsigned char j=0;
for(;DelayTime>0;DelayTime--)          //延时循环
{ for(j=0;j<125;j++)
{;}}}
void SendData(uchar Dat)     //发送函数
{ uchar i=0;
SBUF=Dat;                //发送Dat
while(1){
if(TI)                     //如果发送中断标志为1,则等待,
{ TI=0; break; }            //否则清除发送中断标志
}}
uchar Key()                     //按键处理函数
{ uchar KValue;                  //声明键值函数
P3|=0x3e;                       //中间4位置高电平 0011 1101
if((KValue=P3|0xe3)!=0xff)        //如果按键按下
{ mDelay(10);                   //延迟时间函数
if((KValue=P3|0xe3)!=0xff)        //如果按键还在按下状态
{ for(;;)                        //等待
if((P3|0xe3)==0xff)               //如果按键抬起,
return(KValue);                  //返回键值
}}
return(0);                       //如果按键没有按下,返回0
}
void main()                      //主函数
{ uchar KeyValue;                //定义键值变量KeyValue
unsigned char ns,ng,temp;          //定义变量ns,ng,temp
P2=0xff;                        //熄灭P2口连接的所有发光管
TMOD=0x20;               //确定定时器工作模式,模式2,常数自动装入
TH1=0xFD;        
TL0=0xFD;                    //定时器1的初值  波特率为9600,晶体为11.0592MHz
//PCON&=0x80; 若是SMOD=1 可以使波特率加倍
TR1=1;                          //启动定时器1
SCON=0x40;                //串口工作方式1  运行在8位模式
REN=1;                         //允许接收
for(;;)                           //无限循环
{if(KeyValue=Key())              //调用按键函数,获取按键信息
{ if((KeyValue|0xfb)!=0xff)     //如果按键k1按下
SendData(0x55);                   //调用发送函数,送出0x55
if((KeyValue|0xf7)!=0xff)        //如果k2按下
SendData(0xaa);                   //调用发送函数,送出0xaa
}
if(RI)                         //如果接收中断发生
{ P2=SBUF;             //将接收数据写到端口P2
RI=0; }                       //清除接收标志位
temp=P2;                  //暂存接收到的数据
ng=temp & 0x0f;       //取接收数据低4位
ns=temp>>4;            //将高4位右移4位
ns &=0x0f;               //取接收数据高4位
P0=table[ng];        //P0口连接的数码管显示低4位
P1=table[ns];        //P1口连接的数码管显示高4位
}}

关键字:51单片机  PC机  串口通信 引用地址:51单片机与PC机串口通信

上一篇:串行输出数据spi程序(查询方式)
下一篇:如何学习单片机-自学篇

推荐阅读最新更新时间:2024-03-16 13:14

51单片机-单独文件封装
1.再遇多文件编程 因为定时器经常在后面的教程中使用到,所以我们也把这部分功能代码单独使用文件封装起来。 在第六章的教程中已经教过大家多文件创建,这里点到为止。 创建好“timer.c”和“timer.h” 添加进工程中 2.timer.c的代码 #include reg52.h #include function.h //详见第六章第8讲 u8 T0RH,T0RL,T1RH,T1RL; void TIM0_Init(u32 us,int trim)//trim:微调 { u32 tmp; //临时变量 tmp = 11059200 / 12; //定时器计数频率
[单片机]
<font color='red'>51单片机</font>-单独文件封装
51单片机寄存器功能一览表
21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊
[单片机]
51单片机学习——9--温度传感器DS18B20
DS18B20 简介 DS18B20数字温度传感器接线方便,封装后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。 特点 1、适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电 2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微 处理器与DS18B20的双向通讯。 3、DS18B20支持多点组网功能,多个
[单片机]
<font color='red'>51单片机</font>学习——9--温度传感器DS18B20
51单片机中的ROM和RAM分别是什么?
众所周知,51 内部的存储器分为数据存储器 RAM 和程序存储器 ROM。以 AT89c51 为例,其中有 128 字节随机存储器(又称数据储存器 RAM)和 4K 字节的只读存 储器(又称程序存储器 ROM)。 先说说这个 4K 字节的程序存储器或者说只读存储器,我们写的程序经过编译器 编译成机器码都是存在这个区域,所以称为程序存储器;但单片机上电执行的时 候,此区域内的数据只能读取而不能写入,他的只读存储器的名称从这而来。 89c51 的 ROM 采用的是 FPEROM(Flash Programmable and Erasable Read Only Memory),具体工艺我也不太清楚,号称可以擦写 1000 次
[单片机]
51单片机控制LED七彩渐变灯
自己设计的51单片机控制LED七彩渐变灯 MCU:89C51,89S51,89C2051等 晶振:12MHz 电路驱动(LED连接): P1.0连接蓝色LED P1.1连接红色LED P1.2连接绿色LED (必须使用纯绿色高亮LED,不可使用普通草绿管) 全为低电平驱动(低电平点亮),可以加三极管驱动,红、蓝、绿LED也可以交换位置 控制方式:PWM 频率:约300-700Hz(我没有计算或测量过,只是试验显示效果足够好) 调节级数:共600级,相当平滑 编译后的HEX文件: 687241197859316.rar HEX代码: :0D009300E4FEEEC39F50060000000E80F555
[单片机]
51单片机综合学习系统之步进电机控制篇
大家好,通过以前的学习,我们已经对51单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了红外线遥控的基本知识,体会到了综合学习系统的易用性与易学性,这一期我们将一起学习步进电机控制的基本原理与使用方法。 先看一下我们将要使用的51单片机综合学习系统能完成哪些实验与产品开发工作:分别有流水灯,数码管显示,液晶显示,按键开关,蜂鸣器奏乐,继电器控制,IIC总线,SPI总线,PS/2实验,AD模数转换,光耦实验,串口通信,红外线遥控,无线遥控,温度传感,步进电机控制等等。 上图是我们将要使用的51单片机综合学习系统硬件平台,本期实验我们用到了综合系统主机、步进电机,综合系统其它功能模块原理与使用详见前几期《 电子制
[单片机]
<font color='red'>51单片机</font>综合学习系统之步进电机控制篇
8051单片机指令系统的用法介绍
一个计算机的指令系统就是它能执行的全部指令的集合。8051的指令系统共有111条指令,由42种助记符和7种寻址方式组合而成。 8051的指令通常包括操作码,和操作数两部分。操作码规定指令进行什么操作,采用助记表示;操作数表示指令的操作对象。 汇编语言指令的基本形式是:操作码助记符 目的操作数,源操作数。 操作码助记符与操作数分开书写,操作数中目的操作数在前,源操作数在后,操作数之间用逗号分隔。 如指令MOV B,#23H中符号MOV就是操作码助记符,这个助记符的意义为将源操作数传入目的操作数地址中,累加器A是目的操作数,寄存器B是源操作数。 8051的机器语言指令根据长度有一字节、二字节、三字节三种。一字节指令操作码中
[单片机]
80<font color='red'>51单片机</font>指令系统的用法介绍
51单片机定时器和计数器
8051单片机内部有两个定时/计数器T0及T1,具有定时和计数两种功能。T0及T1在计数过程中不需要CPU参与,也不影响CPU的其他工作。当计数溢出后,定时/计数器给出中断信号,申请CPU停止当前的工作,去处理预先设定的中断事件。 一、T1内部结构 定时器工作模式:对内部时钟信号计数。由于时钟频率是定值,所以可根据计数值计算出定时时间。 计数器工作模式:是对加在T1(P3.5)引脚上的外部脉冲进行计数。 二、计数功能 计数器用于统计从TO(P3.4)和Tl(P3.5)两个引脚输入脉冲的负跳变数量。负跳变是指前一个机器周期采样为高电平,后一个机器周期为低电平。每输入一个脉冲负跳变,计数器加1。 输入脉冲的高电平与低电平至少应保持
[单片机]
<font color='red'>51单片机</font>定时器和计数器
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved