📄 easy2416.c
字号:
/*****************************************************************************
EASY2416外围接口驱动程序
编译软件:KEILC51
编写:科威自控
时间:2005/06/22
*****************************************************************************/
#include "user_datac.h"
/*****************************************************************************
用户端口初始化
*****************************************************************************/
void init_configc()
{
SFRPAGE=0x0f;
P3MDOUT=0x0ff;
P2MDOUT=0x0ff;
P1MDOUT=0xff;
P4MDOUT=0x0f|P4MDOUT;
P0MDOUT=P0MDOUT|0x80;
P0MDOUT=P0MDOUT|0x04;
}
/*****************************************************************************
用户上电初始化
*****************************************************************************/
void init_startc()
{
Ram_py[0]=0;
Ram_py[1]=0;
Input_cnt=8;
}
/*****************************************************************************
用户运行初始化
*****************************************************************************/
void init_runc()
{
;
}
/*****************************************************************************
用户设置初始化
*****************************************************************************/
void init_setc()
{
;
}
/*****************************************************************************
指令周期扫描
*****************************************************************************/
void stepc()
{
;
}
/*****************************************************************************
内核2.5ms中断程序调用的函数
*****************************************************************************/
void tmsc() using REGBANK//选用0组寄存器.
{
uint8 xdata len[8];
len[0]=cpye_reg[0];//将工作寄存器0组保存
len[1]=cpye_reg[1];
len[2]=cpye_reg[2];
len[3]=cpye_reg[3];
len[4]=cpye_reg[4];
len[5]=cpye_reg[5];
len[6]=cpye_reg[6];
len[7]=cpye_reg[7];
user_display(Xlamp);//刷新显示
if(Input_cnt-- >0)
{
if(Input_cnt > 7) Input_cnt=7;
user_sampl(Input_cnt,Xinput);// 输入采样
P1MDOUT=0xff;
}
SFRPAGE=0x0f;
user_out(Xoutput); // 输出刷新
cpye_reg[0]=len[0];//恢复工作寄存器的值.
cpye_reg[1]=len[1];
cpye_reg[2]=len[2];
cpye_reg[3]=len[3];
cpye_reg[4]=len[4];
cpye_reg[5]=len[5];
cpye_reg[6]=len[6];
cpye_reg[7]=len[7];
}
/*****************************************************************************
指令周期扫描SCAN
*****************************************************************************/
void scanc()
{
if(Input_cnt <= 0)
{
user_scan_i(Ram_px);//输入值滤波
Input_cnt=8;
}
user_scan_o(Xoutput,Ram_py);//求输出刷新值
user_scan_lamp();//显示赋值;
user_scan_signal();//ERR,RUN指示灯赋值.
}
/************************输出刷新******************************/
void put_delay()
{
nop;
nop;
nop;
}
void user_out(uint8 xdata *point)
{
P_g1u7=1;
P_g1u6=1;
P1=point[0];
P4=P4|0x01;
P_dir1u8=1;
P4=P4|0x04;
put_delay();
P4=P4&0xfb;
P1=Xoutput[1];
P4=P4|0x02;
put_delay();
P4=P4&0xfd;
nop;
nop;
P_dir1u8=0;
}
/*****************输入采样********************/
//每组输入信号采样8次.
void user_sampl(uint8 count,uint8 xdata *point)
{
SFRPAGE=0x0f;
P1MDOUT=0;
P1=0xff;
P_dir1u8=0;
nop;
nop;
nop;
P_g1u7=0;
put_delay();
point[count]=P1;
P_g1u7=1;
nop;
nop;
nop;
P_g1u6=0;
put_delay();
count+=8;
point[count]=P1;
P_g1u6=1;
P_g1u10=0;
put_delay();
count+=8;
point[count]=P1;
P_g1u10=1;
}
/****************刷新显示*********************/
void user_display(uint8 xdata *point)//
{
static uint8 code chip_elect[5]={4,1,2,0x10,8};//片选值
static uint8 Dislamp_cnt=0;//片选序号
if(Dislamp_cnt++ >4) Dislamp_cnt=0;
P3=P3&0xe0;
P2=~(point[Dislamp_cnt]);
P3=P3|chip_elect[Dislamp_cnt];
}
/************************输入值滤波******************************/
void change_i0()
{
cb10=cb2;
cb11=cb3;
cb12=cb0;
cb13=cb1;
cb14=cb5;
cb15=cb4;
cb16=cb7;
cb17=cb6;
}
void change_i1()
{
cb10=cb5;
cb11=cb4;
cb12=cb7;
cb13=cb6;
cb14=cb1;
cb15=cb0;
cb16=cb3;
cb17=cb2;
}
void change_i2()
{
cb10=cb1;
cb11=cb0;
cb12=cb3;
cb13=cb2;
cb14=cb5;
cb15=cb4;
cb16=cb7;
cb17=cb6;
}
bit user_scan_ls(uint8 xdata *p)
{
bit sign=1;
uint8 num;
for(num=0;num<7;num++)
{
if(p[num]!=p[num+1])
{
num=8;
sign=0;
}
}
return sign;
}
//8次采样值完全相同才能确定.
void user_scan_i(uint8 xdata *point)//输入值滤波
{
if(user_scan_ls(Xinput))
{
Change_bit=Xinput[0];
Change_bit1=0;
change_i0();
point[1]=Change_bit1;
}
if(user_scan_ls(&Xinput[8]))
{
Change_bit=Xinput[8];
Change_bit1=0;
change_i1();
point[0]=Change_bit1;
}
if(user_scan_ls(&Xinput[16]))
{
Change_bit=Xinput[16];
Change_bit1=0;
change_i2();
point[3]=Change_bit1;
}
}
/*****************求输出刷新
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -