📄 user.c
字号:
/*+--------------------------------------------------------------+
|文件名称: 实验板板串口通信程序—监测SE接口状态的工作模式 |
|版 本: V1.1 |
|制作单位: 北京鼎实创新科技公司 |
|版权许可: |
|网址: www.c-profibus.com.cn |
|email: tangjy@c-profibus.com.cm |
|日期: 2004/9 |
+----------------------------------------------------------------+*/
#include <d:\Keil\c51\INC\reg52.h>
#include <d:\Keil\c51\INC\stdio.h>
#define UBYTE unsigned char
#define UWORD unsigned int
/*==================================================================================================================*/
/* 以下是输入键、指示灯等设备变量定义,用户可以越过阅读 */
/*------------------------------------------------------------------------------------------------------------------*/
sbit out0_7=P2^0; /* 定义out0_7=P2.0=P16O0,输出指示灯Q0-Q7的输出控制,见实验板原理图U16 ------*/
sbit out8_15=P2^1; /* 定义out8_15=P2.1=P17O1,输出指示灯Q8-Q15的输出控制,见实验板原理图U17 ------*/
sbit inled0_7=P2^2; /* 定义inled0_7=P2.2=P18IO0,输入指示灯I0-I7的输出控制,见实验板原理图U18 ------*/
sbit inled8_15=P2^3; /* 定义inled8_15=P2.3=P19IO1,输入指示灯I8-I15的输出控制,见实验板原理图U19 ------*/
sbit in0_7=P2^4; /* 定义in0_7=P2^4=P2.4=P12I0,输入键I0-I7的读控制,见实验板原理图U12 ------*/
sbit in8_15=P2^5; /* 定义in8_15=P2^5=P2.5=P13I1,输入键I8-I15的读控制,见实验板原理图U13 ------*/
sbit inadd=P2^6; /* 定义inadd=P2^6=P2.6=P20AD,PROFIBUS地址输入AD0-AD7的读控制,见实验板原理图U20 ------*/
sbit REQ_IT=P1^7; /* 定义REQ_IT=P1^7=P1.7=P17S_CTS,输入,连接OEM2-SE-REQ_IT,见实验板原理图CONNECT-16 ---*/
sbit S_RTS=P1^6; /* 定义S_RTS=P1^6=P1.6=P17S_RTS,输入,连接OEM2-SE-S_RTS,见实验板原理图CONNECT-16 ---*/
sbit P15RES=P1^5;
/************** 定义:di0_7:字节型,是输入键I0-I7当前值; **************************/
/************** 定义:di8_15:字节型,是输入键I8-I15当前值; **************************/
bdata UBYTE di0_7,di8_15; /* di0_7:字节型,输入键I0-I7;di8_15:字节型,输入键I8-I15 --------*/
sbit di0=di0_7^0; /* 定义di0=di0_7^0=输入键I0 --------*/
sbit di1=di0_7^1; /* 定义di1=di0_7^1=输入键I1 --------*/
sbit di2=di0_7^2; /* 定义di2=di0_7^2=输入键I2 --------*/
sbit di3=di0_7^3; /* 定义di3=di0_7^3=输入键I3 --------*/
sbit di4=di0_7^4; /* 定义di4=di0_7^4=输入键I4 --------*/
sbit di5=di0_7^5; /* 定义di5=di0_7^5=输入键I5 --------*/
sbit di6=di0_7^6; /* 定义di6=di0_7^6=输入键I6 --------*/
sbit di7=di0_7^7; /* 定义di7=di0_7^7=输入键I7 --------*/
sbit di8=di8_15^0; /* 定义di8=di8_15^0=输入键I8 --------*/
sbit di9=di8_15^1; /* 定义di9=di8_15^1=输入键I9 --------*/
sbit di10=di8_15^2; /* 定义di10=di8_15^2=输入键I10 --------*/
sbit di11=di8_15^3; /* 定义di11=di8_15^3=输入键I11 --------*/
sbit di12=di8_15^4; /* 定义di12=di8_15^4=输入键I12 --------*/
sbit di13=di8_15^5; /* 定义di13=di8_15^5=输入键I13 --------*/
sbit di14=di8_15^6; /* 定义di14=di8_15^6=输入键I14 --------*/
sbit di15=di8_15^7; /* 定义di15=di8_15^7=输入键I15 --------*/
/************** 定义:key0_7:字节型,是输入键I0-I7扫描读入值; **************************/
/************** 定义:key8_15:字节型,是输入键I8-I15扫描读入值; **************************/
bdata UBYTE key0_7,key8_15;
sbit key0=key0_7^0; /* 定义key0=key0_7^0=输入键I0 --------*/
sbit key1=key0_7^1; /* 定义key1=key0_7^1=输入键I1 --------*/
sbit key2=key0_7^2; /* 定义key2=key0_7^2=输入键I2 --------*/
sbit key3=key0_7^3; /* 定义key3=key0_7^3=输入键I3 --------*/
sbit key4=key0_7^4; /* 定义key4=key0_7^4=输入键I4 --------*/
sbit key5=key0_7^5; /* 定义key5=key0_7^5=输入键I5 --------*/
sbit key6=key0_7^6; /* 定义key6=key0_7^6=输入键I6 --------*/
sbit key7=key0_7^7; /* 定义key7=key0_7^7=输入键I7 --------*/
sbit key8=key8_15^0; /* 定义key8=key8_15^0=输入键I8 --------*/
sbit key9=key8_15^1; /* 定义key9=key8_15^1=输入键I9 --------*/
sbit key10=key8_15^2; /* 定义key10=key8_15^2=输入键I10 --------*/
sbit key11=key8_15^3; /* 定义key11=key8_15^3=输入键I11 --------*/
sbit key12=key8_15^4; /* 定义key12=key8_15^4=输入键I12 --------*/
sbit key13=key8_15^5; /* 定义key13=key8_15^5=输入键I13 --------*/
sbit key14=key8_15^6; /* 定义key14=key8_15^6=输入键I14 --------*/
sbit key15=key8_15^7; /* 定义key15=key8_15^7=输入键I15 --------*/
/************** 定义:P00-P07对应P0口的P0.0-P0.7 **************************/
sbit P00=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
sbit P03=P0^3;
sbit P04=P0^4;
sbit P05=P0^5;
sbit P06=P0^6;
sbit P07=P0^7;
/************** PP00-PP07是上面P00-P07的中间变量 **************************/
bdata UBYTE PP0;
sbit PP00=PP0^0;
sbit PP01=PP0^1;
sbit PP02=PP0^2;
sbit PP03=PP0^3;
sbit PP04=PP0^4;
sbit PP05=PP0^5;
sbit PP06=PP0^6;
sbit PP07=PP0^7;
/**** 定义:AB_status:字节型,报文类型及接口状态,见《PB-OEM2-SE产品手册》第四章、三、数据交换 *******/
bdata UBYTE AB_status;
sbit AB_sD0=AB_status^0; /**** AB_sD0=AB_status^0:用户参数更新标记 ****/
sbit AB_sD7=AB_status^7; /**** AB_sD7=AB_status^7:报文格式 ****/
/**** 定义:req_com:字节型,请求数据命令,见《PB-OEM2-SE产品手册》第四章、三、数据交换 *******/
bdata UBYTE req_com;
sbit req_comD0=req_com^0; /**** req_comD0=req_com^0:请求数据/参数命令 ****/
sbit req_comD1=req_com^1; /**** req_comD1=req_com^1:清参数命令 ****/
/*------------------------------------------------------------------------------------------------------------------*/
/* 输入键、指示灯等设备变量定义完毕 */
/*==================================================================================================================*/
/*==================================================================================================================*/
/* 以下是有关输入键、指示灯控制子程序,用户了解功能即可 */
/*------------------------------------------------------------------------------------------------------------------*/
/************************* 将V值送指示灯Q0-Q7输出****************************/
void steout0_7(UBYTE v)
{
out0_7=0;
P0=v;
P0=v;
P0=v;
P0=v;
out0_7=1;
out0_7=0;
}
/************************* 将V值送指示灯Q8-Q15输出***************************/
void steout8_15(UBYTE v)
{
out8_15=0;
P0=v;
P0=v;
P0=v;
P0=v;
out8_15=1;
out8_15=0;
}
/************************* 将V值送输入键指示灯ILED0-LIED7输出****************/
void steinled0_7(UBYTE v)
{
inled0_7=0;
P0=v;
P0=v;
P0=v;
P0=v;
inled0_7=1;
inled0_7=0;
}
/************************* 将V值送输入键指示灯ILED8-LIED15输出***************/
void steinled8_15(UBYTE v)
{
inled8_15=0;
P0=v;
P0=v;
P0=v;
P0=v;
inled8_15=1;
inled8_15=0;
}
/************************* 读PROFIBUS地址开关值****************************/
UBYTE rd_address()
{
UBYTE data x;
P0=0xff;
inadd=0;
x=P0;
x=P0;
x=P0;
x=P0;
inadd=1;
return(x);
}
/************************* 扫描一次输入键I0-115,更新一次输入键当前值*******************************/
/************************* 对输入键I0-I15有0-1者,当前值取反****************************************/
void scanin()
{
P0=0xff;
in0_7=0;
PP0=P0;
PP0=P0;
PP0=P0;
PP0=P0;
if (key0_7!=PP0)
{
if ((PP00==1)&&(key0==0)) { di0=~di0;};
if ((PP01==1)&&(key1==0)) { di1=~di1;};
if ((PP02==1)&&(key2==0)) { di2=~di2;};
if ((PP03==1)&&(key3==0)) { di3=~di3;};
if ((PP04==1)&&(key4==0)) { di4=~di4;};
if ((PP05==1)&&(key5==0)) { di5=~di5;};
if ((PP06==1)&&(key6==0)) { di6=~di6;};
if ((PP07==1)&&(key7==0)) { di7=~di7;};
key0_7=PP0;
};
in0_7=1;
inled0_7=0;
P0=di0_7;
P0=di0_7;
P0=di0_7;
P0=di0_7;
inled0_7=1;
inled0_7=0;
P0=0xff;
in8_15=0;
PP0=P0;
PP0=P0;
PP0=P0;
PP0=P0;
if (key8_15!=PP0)
{
if ((PP00==1)&&(key8==0)) { di8=~di8;};
if ((PP01==1)&&(key9==0)) { di9=~di9;};
if ((PP02==1)&&(key10==0)) { di10=~di10;};
if ((PP03==1)&&(key11==0)) { di11=~di11;};
if ((PP04==1)&&(key12==0)) { di12=~di12;};
if ((PP05==1)&&(key13==0)) { di13=~di13;};
if ((PP06==1)&&(key14==0)) { di14=~di14;};
if ((PP07==1)&&(key15==0)) { di15=~di15;};
key8_15=PP0;
};
in8_15=1;
inled8_15=0;
P0=di8_15;
P0=di8_15;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -