STC12C60S2单片机双485通讯开发双485通讯控制程序

发布者:脑电狂潮最新更新时间:2019-11-13 来源: 51hei关键字:STC12C60S2  单片机  双485通讯  通讯控制 手机看文章 扫描二维码
随时随地手机看文章

电路原理图如下:
 

程序说明


接线:MAX485-1 D+ 链接 MAX485-2 D+ ;MAX485-1 D- 链接 MAX485-2 D-

功能:串口一 自动发送一个tab数据,串口二接收,接收后数据显示在P0口的led灯上
          串口二 自动发送一个tab数据,串口一接收,接收后数据显示在p0口的led灯上
                  按key1,P0口显示0xAA
                  按key2,P0口显示0x55
                  按key3,P0口显示0xf0
                  按key4,P0口显示0x0f
*********************************************************************/

#include "STC12C5A60S2.h"  //库文件

#define uchar unsigned char//宏定义无符号字符型

#define uint unsigned int  //宏定义无符号整型

/********************************************************************

                            初始定义

*********************************************************************/

uchar dat1=0,dat2=0;

uchar tab[8]={0xfe,0xfd,0xfB,0xf7,0xef,0xdf,0xBf,0x7f};

sbit key1=P2^0;

sbit key2=P2^1;

sbit key3=P2^2;

sbit key4=P2^3;

/********************************************************************

                            串口初始化

*********************************************************************/

void init ()

{

        TMOD = 0x20;                           //定时器1产生波特率

        SCON = 0x50;                          //方式1,8位数据,波特率可变

        TH1= TL1 = 0xfd;                 //波特率 9600

        S2CON= 0x50;                     //方式1,八位数据,可变波特率

        BRT= 0XFD;                                  //设置波特率9600

        TR1= 1;                                          //启动定时器产生波特率        

        AUXR= 0x10;                                 //启动波特率发生器

        IP= 0x00;                                 //优先级默认

        EA = 1;                                  //开总中断

        ES= 1;                                         //开串口1中断

        IE2=0x01;                                 //开串口2中断

}

/********************************************************************

                            串口一 发送一个字符

*********************************************************************/

void  uart1_txd(uchar x)

{

        SBUF = x;

}

/********************************************************************

                            串口二   发送一个字符

*********************************************************************/

void  uart2_txd(uchar x)

{

        S2BUF = x;

}

/********************************************************************

                             延时函数

*********************************************************************/

void delay ( uint t )

{

        uint i,j;

        for( i=0; i        for( j=0; j<250; j++);

}

/********************************************************************

                              主函数

*********************************************************************/

void main()

{

    uchar i;

        init();


         for(i=0;i<8;i++)

           {

             uart1_txd(tab[i]);//串口一发送数据

             delay(500);          

                 P0=dat2;                  //串口二接收数据在led灯显示

                 delay(500);


                 uart2_txd(tab[7-i]); //串口二发送数据

             delay(500);          

                 P0=dat1;                 //串口一接收数据在led灯显示

                 delay(500);

           }

        while(1)

        {

          if(key1==0){delay(20);while(!key1){P0=0xAA;} }

          if(key2==0){delay(20);while(!key2){P0=0x55;} }

          if(key3==0){delay(20);while(!key3){P0=0xf0;} }

          if(key4==0){delay(20);while(!key4){P0=0x0f;} }


        }

}

/********************************************************************

                            串口二    发送接收中断函数

*********************************************************************/

void uart2_isr()  interrupt 8

{

        if( S2CON & 0x01 )

        {

                S2CON &= ~0x01;

                dat2= S2BUF;

        }

        if( S2CON & 0x02 )

        {

                S2CON &= ~0x02;

        }

}

/********************************************************************

                            串口一 发送接收中断函数

*********************************************************************/

void uart_isr()  interrupt 4 

{

        if( RI )

           RI = 0;

            dat1 = SBUF;

        if( TI ) 

            TI = 0;

}

/********************************************************************

                              结束

*********************************************************************/



关键字:STC12C60S2  单片机  双485通讯  通讯控制 引用地址:STC12C60S2单片机双485通讯开发双485通讯控制程序

上一篇:51单片机数字频率计仿真(可按键切换量程)
下一篇:单片机6位数电子密码锁源码+PCB+仿真原理图设计(可改密码

推荐阅读最新更新时间:2024-11-01 17:59

51单片机+ISD4002语音芯片读写源代码
#include reg52.h #define uchar unsigned char #define uint unsigned int sbit SS=P2^3; //使能控制端 sbit SCLK=P2^2; sbit MOSI=P2^0; sbit MISO=P2^1; sbit LED=P1^0; sbit PR=P1^1;//录放控制端,通过开关来调节,高电平为录音状态 sbit ISD_INT=P1^2;//溢出中断 sbit AN=P2^4; sbit STOP=P2^5; void delay(uint time) { while(time!=0) { time-
[单片机]
什么是MCS-51单片机、8051单片机、51单片机
MCS-51单片机---是指美国INTEL公司生产的内核兼容的一系列单片机的总称。“MCS-51”也代表这一系列单片机的内核。这一系列单片机硬件结构和指令系统一致,包括8031、8051、8751、8032、8052、8752等基本型。 8051单片机---是MCS-51系列单片机中的一个基本型,是MCS-51系列中最早期、最典型、应用最广泛的产品,所以8051单片机也就成了MCS-51系列单片机的典型代表。 51单片机---51单片机是对目前所有兼容MCS-51指令系统的单片机的统称,包括INTEL MCS-51系列单片机、以及其他厂商生产的兼容MCS-51内核的增强型8051单片机。只要和MCS-51内核兼容的
[单片机]
基于PID算法和51单片机的温度控制系统
0 引 言 温控技术无论是在工业生产,还是日常生活中都起着非常重要的作用。在冶金、石油、化工、电力和现代农业等行业,温度是极为重要而又普遍的热工参数之一,在普通家庭里热水器、电饭煲、电烤箱等依赖于温控技术的家电设备也是必不可少。可以说温度控制技术无处不在。 常规的温度控制方法以设定温度为临界点,超出设定允许范围即进行温度调控:低于设定值就加热,反之就停止或降温。这种方法实现简单、成本低,但控制效果不理想,控制温度精度不高、容易引起震荡,达到稳定点的时间也长,因此,只能用在精度要求不高的场合。 而采用PID算法进行温度控制,它具有控制精度高,能够克服容量滞后的特点,特别适用于负荷变化大、容量滞后较大、控制品质要求又很高的控
[单片机]
基于PID算法和51<font color='red'>单片机</font>的温度<font color='red'>控制</font>系统
多路端口可编程霓虹灯及彩灯控制
   现有的霓虹灯以及彩灯控制器多是使用专用集成电路,其中固化多种闪烁方式,一般只提供4~16路输出。由于在大型霓虹灯中使用的控制器路数相当多,一般只能定做,代价高而且灵活性较差。本设计由于采用了力源公司的新一代BASIC单片机PS1016及高性价比的8位LED控制驱动器PS7219,从而可实现多路端口,并且能够对任一端口进行控制,可广泛用于大型霓虹灯、塑料霓虹灯以及彩灯的可编程控制,既可在产品上直接编程,又可在计算机上调试好直接传输。具有设计简单、使用方便等特点。 1主要器件介绍 1.1 PS1016单片机   PS1016单片机引脚排列如图1所示,其特点如下:   1.固化在芯片内部的PICBAS
[单片机]
80C51单片机片内与片外程序存储器的选择
大多数51系列单片机内部都配置一定数量的程序存储器ROM。如80C51芯片内有4KB掩模ROM存储单元,AT89C51芯片内部配置了4KB Flash ROM,它们的地址范围均为0000H~0FFFH。 ROM可以用来存放固定的程序或数据,如系统监控程序,常数表格等。 片内与片外程序存储器的选择 80C51的程序计数器PC是16位的计数器,所以能寻址64KB ROM的任何单元。 1.~EA引脚接高电平 ~EA引脚接高电平,对于基本型单片机,首先在片内程序存储器中取指令,当PC的内容超过0FFFH(4K)时,系统会自动转到片外的程序存储器中取指令,外部程序存储器的地址从1000H开始编址。 2.~EA引脚接低电平 ~
[单片机]
80C51<font color='red'>单片机</font>片内与片外程序存储器的选择
单片机初学者的常见问题总结
1、吴鉴鹰单片机开发板可以在哪些电脑系统上面运行答:在WIN7/XP/8/10都行。 2、吴鉴鹰单片机开发板可以外扩STM32,ATmega128的最小系统板吗?答:可以的,只需要把51芯片下下来,然后把STM32,ATmega128的最小系统板用杜邦线插上就行。 3、单片机的学习,需要哪些软件答:KEIL、STC—ISP软件。 4、下载软件需要安装吗?答:不需要安装,但是需要安装驱动。WIN7/XP/8/10,安装方法一样。驱动安装方法: 一、打开软件的文件夹 二、打开文件夹“ USB to UART Driver” 三、打开文件夹“CH340_CH341” 四、点击应用程序 五、点击安装5、
[单片机]
<font color='red'>单片机</font>初学者的常见问题总结
51单片机之串口波特率配置
232串口模式,共有4钟方式,其中方式0、方式2的波特率是固定的。方式1、方式3的是可变波特率,这两个是用T1定时器作为波特率发生器。 方式0的波特率配置 方式0的波特率计算公式如下: 其中B是波特率,fosc是晶振的频率。 方式2的波特率配置 方式2的波特率计算公式如下: 其中B是波特率,fosc是晶振的频率,SMOD是PCON寄存器最高位。 方式1和3的波特率配置 由于方式1和3是用T1定时器作为波特率发生器,计算时间常数就可以了。此时T1一般工作在方式2(8为位自动重装入工作方式)。 波特率的计算公式是: 因此我们只需要计算出T1溢出率,就可以得到波特率了,下面我们就去求解溢出率。 计数器初值X的
[单片机]
51<font color='red'>单片机</font>之串口波特率配置
高速扫描采样单片机与PC机接口板的设计
摘要:为色谱-质谱联用仪设计了高速采样扫描接口电路。介绍了采用ISA卡形式以两片双端口RAM为信箱实现单片机与PC机高速通讯的接口电路,给出了实现高速、高精度采集及扫描的高性能A/D和D/A转换电路,最后给出了相应的软件设计方案。 关键词:色谱-质谱联用仪 双端口RAM 高速采样 色普-质谱(GC-MS)联用仪可对许多产品中的多种元素进行分析测定,因此被广泛应用于农业、工业以及医药、环保、食品等领域中。GC-MS技术在未来的经济发展和科学研究中将发挥更为积极和重要的作用。 GC-MS联用仪对质谱扫描速度要求很高,需要对被测信号进行高速的实时采集,在极短的时间内获得大量的数据。因此必须设计高速的数据采集接口电路。 本文采用两
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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