历史上的今天
今天是: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_(); //延时一个机器周期
史海拾趣
|
奥笙公司软件部门招聘信息(北京职位) 公司简介 奥笙时代科技(北京)有限公司(www.orpheusys.com) 是成立于2007年的高科技企业,位于中关村腹地才智大厦,毗邻北大、清华和中科院,本公司与中科院声学研究所建立了战略合作关系, ...… 查看全部问答> |
|
请问T1管的集电极电阻到底该如何看,如何计算?因为以往的电路大都是一个集电极电阻RC接到电源,而这个图就不一样了,因为T1管的集电极接的是T2管,我就有些搞不太懂到底T1管的集电极电阻怎么算,有的人讲T1管的集电极电阻是R2+T2管C-B结的反偏电阻 ...… 查看全部问答> |
|
序: 搞了几块aic3256,按照TI公司的原理图做了最小系统,想用F2812来驱动,结果老是不行,好,我想,既然这样,那就从最简单的开始一步一步慢慢来。于是种种问题就浮出水面…… ...… 查看全部问答> |
|
步入社会,你每天要和形形色色的人打交道,在社会的每个角落,你都不可能是孤立的,你必须要通过与其他人合作完成自己的工作任务。如果你在公司里工作,那么,你是否具有团队精神,直接关系到你的业绩。一些大公司招聘人才时,十分注重人才的团 ...… 查看全部问答> |
|
安泰测试维修中心根据多年的维修经验,帮大家分析示波器的几种特殊故障,供广大的电子仪器维修者参考和学习。 一、无扫描线 出现无扫描线故障时应先检查电源电路、示波管电路、触发扫描电路、X轴放大器等的工作是否正常。若这些部分工作都正常 ...… 查看全部问答> |




