历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-11-18 来源:51hei

功能如下:

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


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

//#include

#include                 //库文件

#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_();                                                //延时一个机器周期

推荐阅读

史海拾趣

CML Microcircuits公司的发展小趣事

为了进一步扩大市场份额,CML Microcircuits公司开始积极拓展全球市场。通过与当地代理商和分销商建立合作关系,CML的产品逐渐进入了全球各地的电子市场。同时,公司还设立了多个海外研发中心和销售中心,以便更好地服务全球客户。这些举措不仅提升了CML的品牌知名度,也为其带来了更多的商业机会。

Excel-Display Corporation公司的发展小趣事

EDC深知人才是企业发展的核心动力。因此,公司一直致力于人才培养和团队建设。

公司建立了完善的人才培养机制,为员工提供各种培训和学习机会,帮助他们不断提升自己的专业能力和综合素质。同时,EDC还注重员工的福利待遇和职业发展,为员工创造了一个良好的工作环境和发展空间。

在团队建设方面,EDC注重营造积极向上的企业文化和团队合作精神。公司定期组织各种团队活动和文化交流活动,增强员工的凝聚力和归属感。这些举措不仅提高了员工的工作积极性和效率,也为公司的长远发展提供了有力保障。

CR Magnetics公司的发展小趣事

为了更好地服务全球客户,CR Magnetics积极在全球范围内拓展业务。公司在东亚、欧洲和美洲等地设立了制造和销售办事处,以便更快速地响应市场需求和提供更好的服务。同时,公司还与国际知名厂商建立了合作关系,共同推动电子行业的发展。

台湾肯尼威(CANNYWELL)公司的发展小趣事

随着公司产品的逐渐推广,肯尼威面临着日益激烈的市场竞争。李明深知,要想在竞争中脱颖而出,必须走品质之路。他引入了国际先进的质量管理体系,率先在同行业中通过ISO9001认证。这一举措不仅提高了产品质量,也提升了公司的品牌形象。同时,公司还建立了严格的品质检测流程,确保每一件产品都符合高标准的品质要求。

Califia Lighting公司的发展小趣事

Califia Lighting公司的创立源于创始人对节能照明技术的深刻理解和前瞻视野。在电子照明行业快速发展的背景下,他们看到了LED照明技术的巨大潜力,并决定投身其中。凭借对技术的热爱和对市场的敏锐洞察,Califia Lighting成功研发出了一系列高性能的LED灯具和模块,为公司的起步奠定了坚实的基础。

Fenfa Electronics Ltd公司的发展小趣事

在快速发展的同时,Fenfa Electronics Ltd公司始终坚守品质管理的原则。公司建立了严格的质量检测体系,确保每一款产品都符合高标准的品质要求。此外,Fenfa还注重员工的培训和教育,提高员工的品质意识和操作技能。通过这一系列的品质管理措施,Fenfa Electronics Ltd公司的产品质量得到了广泛认可,也赢得了消费者的信赖和口碑。

问答坊 | AI 解惑

【招聘】奥笙北京公司软件部招聘信息(重新发帖)

奥笙公司软件部门招聘信息(北京职位) 公司简介    奥笙时代科技(北京)有限公司(www.orpheusys.com) 是成立于2007年的高科技企业,位于中关村腹地才智大厦,毗邻北大、清华和中科院,本公司与中科院声学研究所建立了战略合作关系, ...…

查看全部问答>

TTL反相器电路中某个三极管集电极电阻的计算问题

请问T1管的集电极电阻到底该如何看,如何计算?因为以往的电路大都是一个集电极电阻RC接到电源,而这个图就不一样了,因为T1管的集电极接的是T2管,我就有些搞不太懂到底T1管的集电极电阻怎么算,有的人讲T1管的集电极电阻是R2+T2管C-B结的反偏电阻 ...…

查看全部问答>

LED点阵显示仿真

LED点阵显示仿真----由浅入深之8X8,16X16,24X24LED点阵流动显示 一直以来,对LED点阵显示很感兴趣,特别是流动点阵显示。论坛里有不少例子,可是在我的电脑上大多无法正常运行。有的一运行就S机,能运行的,也是字符不清。于是,自己动手 ...…

查看全部问答>

CC2530发射功率

Zigbee协议栈(CC2530)发射功率最大能有多大呀,难道只有4.5dbm吗,请高手回答,谢谢…

查看全部问答>

fifo缓存

请问有谁做过,用FIFO来构成数据缓存窗口的啊,比如3*3的数据缓存窗口?请教,谢谢…

查看全部问答>

闹心的DSP与codec器件通信

序:               搞了几块aic3256,按照TI公司的原理图做了最小系统,想用F2812来驱动,结果老是不行,好,我想,既然这样,那就从最简单的开始一步一步慢慢来。于是种种问题就浮出水面…… ...…

查看全部问答>

职场:出色拍档的六大要素

  步入社会,你每天要和形形色色的人打交道,在社会的每个角落,你都不可能是孤立的,你必须要通过与其他人合作完成自己的工作任务。如果你在公司里工作,那么,你是否具有团队精神,直接关系到你的业绩。一些大公司招聘人才时,十分注重人才的团 ...…

查看全部问答>

通用示波器几种常见故障的分析

安泰测试维修中心根据多年的维修经验,帮大家分析示波器的几种特殊故障,供广大的电子仪器维修者参考和学习。 一、无扫描线 出现无扫描线故障时应先检查电源电路、示波管电路、触发扫描电路、X轴放大器等的工作是否正常。若这些部分工作都正常 ...…

查看全部问答>

有谁有这两种显示器件的资料啊。

有谁有这两种显示器件的资料啊。麻烦分享一下,这都是一些设备的拆机件。特别是那个大液晶,没有一点资料啊! …

查看全部问答>