历史上的今天

今天是:2024年11月18日(星期一)

2019年11月18日 | 检测0~20MA电流传感器报警控制程序

发布者:剑戟辉煌 来源: 51hei关键字:电流传感器  报警控制  信号输入 手机看文章 扫描二维码
随时随地手机看文章

功能如下:

1、24VDC供电,输入端可识别4-20mA信号输入,可以根据用户任意设定电流值,进行继电器报警输出,输出形式常开+常闭;


2、用来实现高于某电流值继电器断开,当低于设定电流值继电器闭合,进而导通回路。

//#include

#include<STC12C2052AD.h>                 //库文件

#include

#define uchar unsigned char //宏定义字符型变量

#define uint  unsigned int        //宏定义整型变量                                                                                                                                                                                                t


/*声明 SFR 相关 与 的 IAP*/

sfr IAP_DATA = 0xE2; 

sfr IAP_ADDRH = 0xE3;

sfr IAP_ADDRL = 0xE4;

sfr IAP_CMD = 0xE5;

sfr IAP_TRIG = 0xE6;

sfr IAP_CONTR = 0xE7;



#define ADC_POWER   0x80            //ADC 电源控制位

#define ADC_FLAG    0x10            //ADC 转换结束标志位

#define ADC_START   0x08            //ADC 开始转换控制位

#define ADC_SPEEDLL 0x00            //210 个时钟周期转换一次

#define ADC_SPEEDL  0x20            //420 个时钟周期转换一次

#define ADC_SPEEDH  0x40            //630 个时钟周期转换一次

#define ADC_SPEEDHH 0x60            //840 个时钟周期转换一次


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

                             IO口定义

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

uchar s1=0;

bit  write=0;

uint txian;

uint ADdate;

uchar txian1,dxian1;

uchar T0RH=0,T0RL=0;

uint ms=0;

uchar A1,A2,A3,A4;

uchar B1,B2;

uchar C1,C2,C3,C4;


bit bz=0;

sbit P10=P1^0;//数码管段

sbit P11=P1^1;//数码管段

sbit P12=P1^2;//数码管段

sbit P13=P1^3;//数码管段

sbit P14=P1^4;//数码管段

sbit P15=P1^5;//数码管段

sbit P16=P1^6;//数码管段

sbit P17=P1^7;//AD信号输入


sbit P30=P3^0;//按键输入

sbit P31=P3^1;//按键输入

sbit P32=P3^2;//数码管位

sbit P33=P3^3;//数码管位

sbit P34=P3^4;//数码管位

sbit P35=P3^5;//数码管位

sbit P37=P3^7; //继电器输出

bit ts=0;


bit bz1=0;

bit bz2=0;

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

                            定义 ISP/IAP/EEPROM 命令

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

#define CMD_IDLE 0

#define CMD_READ 1

#define CMD_PROGRAM 2

#define CMD_ERASE 3


#define ENABLE_IAP 0x83//SYSCLK<12MH

#define IAP_ADDRESS 0x0000        //存储地址



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

禁用 ISP/IAP/EEPROM functionmake 单片机 在 一 安全 状态

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

void IapIdle()

{

    IAP_CONTR = 0;           //

        IAP_CMD = 0;           //

        IAP_TRIG = 0;           //

        IAP_ADDRH = 0x80;  //

        IAP_ADDRL = 0;           //

}


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

                             读数据

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


uchar IapReadByte(uint addr)

{

   uchar dat;

   IAP_CONTR = ENABLE_IAP;

   IAP_CMD = CMD_READ; 

   IAP_ADDRL = addr;

   IAP_ADDRH = addr >> 8;

   IAP_TRIG = 0x46;

   IAP_TRIG = 0xb9;

   _nop_();

   dat = IAP_DATA;

   IapIdle();

   return dat;

}

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

                               写数据

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


void IapProgramByte(uint addr, uchar dat)

{

   IAP_CONTR = ENABLE_IAP;

   IAP_CMD = CMD_PROGRAM;

   IAP_ADDRL = addr;

   IAP_ADDRH = addr >> 8;

   IAP_DATA = dat;

   IAP_TRIG = 0x46;

   IAP_TRIG = 0xb9;

   _nop_();

   IapIdle();

}

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

                               擦除数据

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


void IapEraseSector(uint addr)

{

   IAP_CONTR = ENABLE_IAP;

   IAP_CMD = CMD_ERASE;

   IAP_ADDRL = addr;

   IAP_ADDRH = addr >> 8;

   IAP_TRIG = 0x46;

   IAP_TRIG = 0xb9;

   _nop_();

   IapIdle();

}


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

                            初始定义

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

code uchar seg7code[10]={ 0x84,0xf6,0x8a,0xa2,0xf0,0xa1,0x81,0xb6,0x80,0xa0}; //显示段码 数码管字跟


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

                            延时函数

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

void delay(uchar t)

{

  uchar i,j;

   for(i=0;i   {

            for(j=130;j>0;j--);

         { ;

         }

   }

}

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

                            显示函数 接通时间

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

//void tong(uchar tdate) //显示函数

void tong() //显示函数

{

          C3=txian%100/10;

          C4=txian%10;         

      P32=0;P33=0;P34=0;P35=0;

          P1=seg7code[0];

          P32=1;P33=0;P34=0;P35=0;

          delay(80);

          P32=0;P33=0;P34=0;P35=0;  

      P1=seg7code[0];

          P32=0;P33=1;P34=0;P35=0;

          delay(80);

          P32=0;P33=0;P34=0;P35=0;  

             P1=seg7code[C3];

          P32=0;P33=0;P34=0;P35=1;

          delay(80);

          P32=0;P33=0;P34=0;P35=0;  

             P1=seg7code[C4];

          P32=0;P33=0;P34=1;P35=0;

          delay(80);

          P32=0;P33=0;P34=0;P35=0;  

}

void tong1() //显示函数

{

          C3=A1%100/10;

          C4=A1%10;         

      P32=0;P33=0;P34=0;P35=0;

          P1=seg7code[0];

          P32=1;P33=0;P34=0;P35=0;

          delay(80);

          P32=0;P33=0;P34=0;P35=0;  

      P1=seg7code[0];

          P32=0;P33=1;P34=0;P35=0;

          delay(80);

          P32=0;P33=0;P34=0;P35=0;  

             P1=seg7code[C3];

          P32=0;P33=0;P34=0;P35=1;

          delay(80);

          P32=0;P33=0;P34=0;P35=0;  

             P1=seg7code[C4];

          P32=0;P33=0;P34=1;P35=0;

          delay(80);

          P32=0;P33=0;P34=0;P35=0;  

}


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

                         AD转换初始化程序

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


void InitADC()

{

    P1 = P1M0 = P1M1 = 0xFf;        //设置P1口为开漏模式,使用AD功能

        ADC_DATA = 0;                   //AD数据寄存器清空

    ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打开AD电源,转换周期210

    delay(80);                       //延时

}


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

                         AD转换控制程序

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



uchar GetADCResult(uchar px)          //转换输出的数据 (PX为通道口)

{

    ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//开始转换

    _nop_();                        //延时一个机器周期

    _nop_();                                                //延时一个机器周期

    _nop_();                                                //延时一个机器周期

[1] [2]
关键字:电流传感器  报警控制  信号输入 引用地址:检测0~20MA电流传感器报警控制程序

上一篇:51单片机MPX4115压力传感器+ADC0832仿真课设程序
下一篇:单片机LCD12864无限扩展多级菜单源码

推荐阅读

下一代机器学习技术为BlackBerry技术组合提供全面补充集成后BlackBerry解决方案将成为业界首款可实现智能保护固定和移动终端的产品嵌入式人工智能技术将加速BlackBerry Spark 企业物联网平台的发展 BlackBerry今日宣布已签订最终协议,将斥资14亿美元现金以及承担未兑现的员工激励,全面收购人工智能和网络安全领军企业Cylance。该交易还需获得监管部门批...
不同的分析仪设计不一样、功能不一样、用途不一样,下面对功率分析仪与电能质量分析仪之间的不同进行一个分析。功率分析仪主要用来测量电机、变频器、变压器等功率转换装置的功率、效率等参量。被广泛用于混合动力电动汽车、电动车、太阳能发电、风力发电、变频器、变频电机和燃料电池等的测试。部分分析仪,如WP4000变频功率分析仪,还具备实时波形、波形...
韩国LED制造商首尔半导体表示,德国杜塞尔多夫地方法院已经对飞利浦品牌的某些手机和照明产品发布了两项永久禁令。法院下令对Signify(原飞利浦照明)的子公司Klite lighting生产的照明产品发出永久禁令,并在最近针对Klite的其他诉讼中对Leuchtstark Vertriebs GmbH提起的专利诉讼中,召回2017年3月后销售的照明产品。此前,在美国还有两起案件,首尔...
据CNBC报道,英伟达近日正式发布了公司最新一季度的财报。财报显示,公司在刚过去的季度收入为71.0 亿美元,同比增长 50%。英伟达表示,预计截至 1 月的本季度财报将达到约 74 亿美元,高于分析师预期的 68.6 亿美元。在谈营收的时候,他们还披露了一些关于Arm收购的进展。正如我们此前报道,英伟达正在收购英国核心移动半导体技术供应商 Arm。针...

史海拾趣

问答坊 | AI 解惑

紧急求助

寻找关于用电容式传感器设计的粮食水分检测的电路等资料~~~~请联系~ yinge_007.student@sina.com…

查看全部问答∨

有用过Android的朋友吗,该怎么学

如题。Android挺火的,不知道如何入手。请教了…

查看全部问答∨

找到一个EAGLE的使用窍门

我发现一个窍门,在EAGLE的原理图编辑器或者PCB编辑器的命令框输入Run Designlink,就会弹出一个产品搜索工具,可以输入产品编号来搜索你要的产品有没有货,价格好多等等信息。但是可惜不能通过双击搜到的产品来直接在电路图中放元件,如果有这个功 ...…

查看全部问答∨

负的AVss怎么处理?

我用dsPIC30F2012做一个A/D转换,正参考电压接在Vref+上,负参考电压接在Vref-上,VCC经过滤波后接在了AVDD上,现在AVss不知如何处理,因为要求转换的电压是有负电压的,我能不能直接将AVss接地。A/D转换的参考电压选用的是Vref+和Vref-。请前辈高 ...…

查看全部问答∨

请问mpc860cpu 狗复位的等待时间是多少

请问mpc860cpu 狗复位的等待时间是多少,如何配置这个时间…

查看全部问答∨

VS2005新建CE6.0工程的问题

file -> new -> project -> platform builder for ce 6.0 输入工程名后,点击OK windows embedded ce 6.0 os design winzard next  -> 选中一个BSP后点击next -> 选中 PDA device后点击next  -> 一路next下去 ...…

查看全部问答∨

开发一个PDA问题

  要开发一个PDA   的应用程序,这PDA支持   Windows   Mobile   5.0   用 vs2005  ,只能用   vc.net     吗?     vb ...…

查看全部问答∨

STM8S的硬SPI通不过

选择HSI做为主时钟,16MHz void CLK_Init(void) {     CLK_DeInit();     CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); } //SPI初始化 void SPI_MyInit(void) {     SPI_DeInit();     ...…

查看全部问答∨

求xilinx高手指点

 刚开始学xilinx,现在有很大问题解决不了,求高手指点,能不能留个QQ,在论坛里交流不方便,贴图很麻烦。QQ:707587938谢谢 …

查看全部问答∨

LaunchPadFirmwareUpdater2.0

------------------------------------------------------------------------------- Readme file for LaunchPadFirmwareUpdater2.0.exe LaunchPadFirmwareUpdater2.0.exe is a GUI based utility to update the emulator firmware of Texas Ins ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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