单片机C语言程序设计:单片机之间双向通信

发布者:钱老李最新更新时间:2013-10-29 来源: 21ic关键字:单片机  C语言  程序设计  双向通信 手机看文章 扫描二维码
随时随地手机看文章

/*  名称:甲机串口程序

说明:甲机向乙机发送控制命令字符,

甲机同时接收乙机发送的数字,并显示在

数码管上。

*/

#include

#define uchar unsigned char

#define uint unsigned int

sbit LED1=P1^0;  


sbit LED2=P1^3;

sbit K1=P1^7;

uchar Operation_No=0; //操作代码

//数码管代码

uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//延时

void DelayMS(uint ms)

{

uchar i;

while(ms--) for(i=0;i<120;i++);

}

//向串口发送字符

void Putc_to_SerialPort(uchar c)

{

SBUF=c;

while(TI==0);

TI=0;

}

//主程序

void main()

{

LED1=LED2=1;

P0=0x00;

SCON=0x50; 串口模式 1,允许接收

TMOD=0x20; //T1 工作模式 2

PCON=0x00; 波特率不倍增

TH1=0xfd;

TL1=0xfd;

TI=RI=0;

TR1=1;

IE=0x90;  //允许串口中断

while(1)

{

DelayMS(100);

if(K1==0) //按下 K1 时选择操作代码 0,1,2,3

{

while(K1==0);

Operation_No=(Operation_No+1)%4;

 [page]

switch(Operation_No)根据操作代码发送 A/B/C 或停止发送

{

case 0: Putc_to_SerialPort(\'X\');

LED1=LED2=1;

break;

case 1: Putc_to_SerialPort(\'A\');

LED1=~LED1;LED2=1;

break;

case 2: Putc_to_SerialPort(\'B\');

LED2=~LED2;LED1=1;

break;

case 3: Putc_to_SerialPort(\'C\');

LED1=~LED1;LED2=LED1;

      break;      }      

       }

     }

}

//甲机串口接收中断函数

void Serial_INT() interrupt  4

{

if(RI)

{

RI=0;

if(SBUF>=0&&SBUF<=9) P0=DSY_CODE[SBUF];

else P0=0x00;

}

}

 

/*  名称:乙机程序接收甲机发送字符并完成相应动作

说明:乙机接收到甲机发送的信号后,根据相应信号控制 LED 完成不同闪烁动作。

*/

#include

#define uchar unsigned char

#define uint unsigned int

sbit LED1=P1^0;  

sbit LED2=P1^3;

sbit K2=P1^7;

uchar NumX=-1;

//延时

void DelayMS(uint ms)

{

uchar i;

while(ms--) for(i=0;i<120;i++);

}

//主程序

void main()

{

LED1=LED2=1;

SCON=0x50; 串口模式 1,允许接收

TMOD=0x20; //T1 工作模式 2

TH1=0xfd;

TL1=0xfd;    //波特率 9600 

PCON=0x00; 波特率不倍增

RI=TI=0;

TR1=1;

IE=0x90;

while(1)

{

DelayMS(100);

if(K2==0)

{

while(K2==0);

NumX=++NumX%11; //产生 0~10 范围内的数字,其中 10 表示关闭

SBUF=NumX;

while(TI==0);

TI=0;

}

   }

}[page]

void Serial_INT() interrupt 4

{

if(RI) //如收到则 LED 则动作

{

RI=0;

switch(SBUF) //根据所收到的不同命令字符完成不同动作

{


 

case \'X\':LED1=LED2=1;break; //全灭

case \'A\':LED1=0;LED2=1;break; //LED1 亮

case \'B\':LED2=0;LED1=1;break; //LED2 亮

                                      case \'C\':LED1=LED2=0;//全亮


                             }


                               }


                }

单片机C语言程序设计:单片机之间双向通信

关键字:单片机  C语言  程序设计  双向通信 引用地址:单片机C语言程序设计:单片机之间双向通信

上一篇:单片机C语言程序设计:单片机向主机发送字符串
下一篇:单片机C语言程序设计:甲机通过串口控制乙机 LED

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

电源重新上电引起的MCU启动失败的原因分析
对于主电源掉电后需要继续工作一段时间来用于数据保存或者发出报警的产品,我们往往都能够看见产品PCB板上有大电容甚至是超级电容器的身影。大容量的电容虽然能延时系统掉电,使得系统在电源意外关闭时MCU能继续完成相应操作,而如果此时重新上电,却经常遇到系统无法启动的问题。那么这到底是怎么回事呢?遇到这种情况又该如何处理呢? 一、上电失败问题分析 1. 上电缓慢引起的启动失败 对于需要进行掉电保存或者掉电报警功能的产品,利用大容量电容缓慢放电的特性来实现这一功能往往是很多工程师的选择,以便系统在外部电源掉电的情况下,依靠电容的储能来维持系统需要的重要数据保存及安全关闭的时间。此外,在不需要掉电保存数据的系统中,为了防止电源纹波
[电源管理]
8位单片机加减乘法算法
;-------------------------------------------------------------------------------------- ;Function: F_Bcd2Binary ;Description: Convert OP4 mantissa(BCD) to OP1 mantissa(Binary) ;Input: OP4 and R_Op1Count ;Output: OP1 ;affect:OP2,R_RamTemp1 ;-------------------------------------------------------------------------------
[单片机]
I2C总线的单片机C语言实现及其应用
1 I2C总线概述   I2C(Intel-Integrated Circuit)总线是荷兰的Philips公司于八十年代初推出的一种芯片间串行总线扩展技术。它用两根线(数据线SDA、时钟线SCL)可完成总线上主机与器件的全双工同步数据传送,可极方便地构成多主机系统和外围器件扩展系统。I2C总线支持所有NMOS、CMOS、TTL等工艺制造的器件,其上所有的节点都连到同名的SDA、SCL上。I2C总方法,数据传送都有相同的操作模式,接口电器特性相同且独立,可在系统供电情况下从系统中移去或增加IC芯片,有I2C接口的外围器件都有应答能力,读写片内单元时有地址自动加1功能,易实现多个字节的自动操作。近年来,国际上有关公司制造了多达几百
[单片机]
I2C总线的<font color='red'>单片机</font><font color='red'>C语言</font>实现及其应用
SPCE061A型单片机在土木工程测温仪中的应用与设计
1 引言   在土木工程中,许多大型的桥梁和大坝都是采用现场浇注的钢筋混凝土结构。在此类工程中混凝土浇注以后,由于水泥的水化热作用,混凝土内温度将逐渐上升,混凝土厚度的差异导致不同的温升,形成温度梯度并产生温度应力。与外力作用于结构时引起的应力不同,混凝土的温度应力是由变形引起的;混凝土的导热性能较差,浇注初期其强度和弹性模量都较低,温度变化引起的变形不明显。随着龄期的增长,混凝土的强度和弹性模量提高,对混凝土变形的约束越来越大,以致产生很大的拉应力,当混凝土的抗拉强度不足以抵抗这种拉应力时,开始出现温度裂纹。这将严重影响土木工程的质量,所以很有必要对混凝土浇注后的一段时期内的温度参数进行监测,可为其合理的浇注和养护提供可靠的数据
[单片机]
SPCE061A型<font color='red'>单片机</font>在土木工程测温仪中的应用与设计
小尺寸单片机在便携式设备中的应用
摘 要 本文介绍了小尺寸C8051系列MCU在便携设备中的应用,如手机中闪信和计步器应用,MCU在TFT彩屏驱动的应用,体现了小尺寸MCU在便携设备应用中的优越性。 关键词 闪信,计步器,运动传感器,嵌入系统,彩色TFT屏驱动 引 言 手机在现代生活中的使用越来越广,其功能也是越来越多,如现在有很多手机都带有MP3及照相功能,有的还具有闪信和计步器功能。手机闪信需要处理器能完成多路模拟输入、数据的实时处理等,原有的手机很难直接实现这些功能,就需要MCU配合完成其功能。 PMP等便携式设备大都带有彩色的TFT屏,而传统的驱动是由白色LED完成的,但其存在色差;现在大都采用RGB三色LED来背光,同时需要检测背光的效
[单片机]
普通单片机与STM32单片机中堆栈的区别
学习STM32单片机的时候,总是能遇到“堆栈”这个概念。分享本文,希望对你理解堆栈有帮助。 对于了解一点汇编编程的人,就可以知道,堆栈是内存中一段连续的存储区域,用来保存一些临时数据:嵌入式开发中更接近底层的汇编与C语言。堆栈操作由PUSH、POP两条指令来完成。而程序内存可以分为几个区: 栈区(stack) 堆区(Heap) 全局区(static) 文字常亮区程序代码区 程序编译之后,全局变量,静态变量已经分配好内存空间,在函数运行时,程序需要为局部变量分配栈空间,当中断来时,也需要将函数指针入栈,保护现场,以便于中断处理完之后再回到之前执行的函数。 栈是从高到低分配,堆是从低到高分配。 普通单片机与STM32单片机
[单片机]
普通<font color='red'>单片机</font>与STM32<font color='red'>单片机</font>中堆栈的区别
12位A/D转换器ADS7804与51单片机的接口及程序设计
1 基本特点 在计算机控制系统及各类用单片机(或微处理器)构成的智能仪器仪表中,外部的各种模拟信号必须通过A/D转换器变换为数字信号后才能送入计算机。与8位和16位的A/D转换器相比,12位A/D转换器以其较高的性能价格比而在仪器仪表中得到广泛的应用。ADS7804芯片采用28脚0.3英寸PDIP(塑料双列直插式)封装,两列管脚间距为0.3英寸,比一般DIP28封装窄一倍,所以俗称瘦型DIP;ADS7804采用单5V电源供电;芯片内部含有采样保持、电压基准和时钟等电路,可极大简化用户的电路设计和硬件开锁,并可提高系统的稳定性。ADS7804采用CMOS工艺制造,转换速度快、功耗低(最大功耗为100mW)。该A/D转换器采用逐次逼近
[单片机]
12位A/D转换器ADS7804与51<font color='red'>单片机</font>的接口及<font color='red'>程序设计</font>
基于μC/OS—III的CC1120驱动程序设计
内容摘要:本文根据实际需要,在实现无线数据传输系统基本功能的前提下,选用功耗较低的CC1120芯片作为无线收发单元。在分析CC1120功能特性并介绍嵌入式操作系统μC/OS—III的基础上,阐述如何实现基于STM32F103ZE平台的CC1120驱动程序。 关键词:CC1120;嵌入式操作系统;STM32F103ZE;驱动设计 引言 随着频率资源的日趋紧张,短距离无线通信按窄带化趋势发展。无线数传模块一般由微处理器和收发芯片组成,本文所设计的窄带数传模块的微处理器采用了STM32F103ZE芯片,收发芯片选用了TI公司新推出的CC1120,CC1120通过SPI串行总线协议与MCU相连接。同时,采用了可移植、可植入ROM、可裁
[单片机]
基于μC/OS—III的CC1120驱动<font color='red'>程序设计</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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