基于单片机的数字采控器设计
for(i=0;i<8;i++) {
SCK=0;
if(sdataL&0x01) DS = 1; //串行数据输出 else DS = 0;
SCK=1; //移位输入时钟,上升沿输入 sdataL>>=1; _nop_(); _nop_(); _nop_(); }
for(i=0;i<8;i++)
{ SCK=0; if(sdataH&0x01) DS = 1; //串行数据输出 else DS = 0; SCK=1; //移位输入时钟,上升沿输入 sdataH>>=1; _nop_(); _nop_(); _nop_(); }
LCK=0; //并行输出时钟 _nop_(); _nop_(); _nop_(); LCK=1; }
main() {
UCHAR *lpc ;
BOOL COM_OK=FALSE; UCHAR lpxdata[5]; UCHAR tmp=0x00; RS485_Re_EN=0;
tmp=P3; //P3=0xFF;获取本地波特率设置 tmp=(tmp&0xC0)>>6; baurd_SetVal=tmp;
hc74_165(get_Value,3); //获取模块ID设置
44
盐城工学院本科生毕业论文(毕业设计说明书) 2012
SubID_SetVal=get_Value[2]; SetSubID(SubID_SetVal);
Init_COM(SubID_SetVal,HOSTID,tmp,VERIFY_NONE,0); //初始化串口 ClrCOM(); //清除缓存 EA = 1; //开中断 while ( 1 ) {
RS485_Re_EN=0; //使能485接收
lpc=GetCOM_Event(SCommand); //获取串口通信事件 switch(lpc[IDX_CMD]) { case CMD_COMM_TEST://0x01 { //COM通信测试 WriteCom(CMD_COMM_TEST,\ COM_OK=TRUE; break; } case CMD_IO_IN://0x02 { //IO输入信息上传 hc74_165(get_Value,3); lpxdata[0]=get_Value[0]; //要上传的数据 lpxdata[1]=get_Value[1]; lpxdata[2]=get_Value[2]; WriteCom(CMD_IO_IN,lpxdata,3); break; } case CMD_RELAY_IN:
{//本地控制继电器信息上传 hc74_165(get_Value,3); lpxdata[0]=get_Value[0]; //要上传的数据 lpxdata[1]=get_Value[1]; WriteCom(CMD_RELAY_IN,lpxdata,2); break; } case CMD_RELAY_SET://0x04 {//继电器控制 if(lpc[IDX_DATA]) { flag_Relay=0x00; Writ_595_HL(lpc[IDX_DATA+1],lpc[IDX_DATA+2]); } else {
45