📄 mcom98.c
字号:
//
#include "mb90540.h"
//
unsigned char uart0_rl[64],uart0_tl[128]; //,*uart0_ra,*uart0_ta;
unsigned char uart0_rc,uart0_tc,command_bak,rc0,tc0,e_rc;
unsigned int uart0_time;
unsigned char uart0_ttime,uart0_rtime,uart0_data;
unsigned int uart0_pointer;
unsigned long int uart0_address;
__far unsigned char *uart0_p;
extern unsigned int eeprom_ram[128];
extern IO_BYTE eep_in_count;
////////////////////////////////////////////////////////
unsigned char uart0_hco[]={"\n\r"
" 使 用 说 明 \n\r"
" [A]----循环显示某区数据。\n\r$"
" [B]----显示并行通讯下行数据。\n\r"
" [C]----显示某站遥测数据。\n\r$"
" [D]----显示某地址的数据。\n\r"
" [E]----字节显示修改内存。\n\r"
" [F]----填充某数据区。\n\r$"
" [G]----显示某站遥信屏蔽状态。\n\r"
" [H]----帮助。\n\r"
" [I]----字显示修改内存。\n\r$"
" [R]----读串行EEPROM数据。\n\r"
" [X]----清除串行EEPROM数据。\n\r"
" [W]----写串行EEPROM数据。\n\r$$"
};
unsigned char uart0_unxsq[]={"\n\r命令没发现$"};
unsigned char uart0_eadr[]={"\n\r请输入地址:$"};
unsigned char uart0_error[]={"\n\r命令格式错$"};
unsigned char uart0_pass[]={"\n\r请输入口令:$"};
unsigned char uart0_passerr[]={"\n\r口令错 $"};
void uart0_init (void);
void cl_ad1 (void);
void cl_enabletxd (void);
//UART1中断服务程序
//接收中断
__interrupt void irqsvruart0_rx(void)
{
unsigned char i;
if ((USR0_RDRF==1)&&(USR0_ORFE==0))
{
i=UIDR0;
if (i>='a'&&i<='z') i=i-0x20;
if (i=='\b')
{
if (rc0!=0)
{
rc0--;
uart0_rc--;
uart0_tl[0]='\b';
uart0_tl[1]=' ';
uart0_tl[2]='\b';
tc0=0;
uart0_tc=0x03;
USR0_TIE=1;
}
}
else
{
if (uart0_mark1_a4==0)
{
uart0_rl[rc0]=i;
rc0++;
uart0_rc++;
UODR0=i;
}
else
{
if (((i>='0')&&(i<='9'))||((i>='A')&&(i<='F')))
{
if ((uart0_mark2_a1!=1)||(uart0_rc<2))
{
uart0_rl[rc0]=i;
rc0++;
uart0_rc++;
UODR0=i;
}
}
else
{
if ((i=='\r')||(i==' ')||(i=='-'))
{
uart0_rl[rc0]=i;
rc0++;
uart0_rc++;
}
}
}
}
if (uart0_rc>63)
{
rc0=0x00;
uart0_rc=0x00;
}
}
else
{
UMC0_RFC=0;
rc0=0x00;
uart0_rc=0x00;
}
uart0_rtime=0x00;
uart0_time=0;
}
//发送中断
__interrupt void irqsvruart0_tx(void)
{
if (USR0_TDRE==1)
{
if (uart0_tc!=0x00)
{
UODR0=uart0_tl[tc0];
tc0++;
uart0_tc--;
}
else
{
UMC0_RFC=0;
tc0=0;
uart0_tc=0;
USR0_TIE=0;
uart0_mark1_a0=0;
}
uart0_time=0;
uart0_ttime=0;
}
}
//UART1初始化
void inituart0 (void)
{
DDR4_D42=0;
UMC0=0x19;
URD0=0x0C;
USR0=0x08;
uart0_init();
}
void uart0_init (void)
{
rc0=tc0=0x00;
uart0_rc=uart0_tc=uart0_ttime=uart0_rtime=0x00;
uart0_mark1=0x00;
uart0_mark2=0x00;
uart0_time=0x0000;
e_rc=0x00;
}
void uart0_cltime (void)
{
uart0_time++;
uart0_rtime++;
uart0_ttime++;
}
///////////////////////////////////////
//送显示
void cl_xsc (void)
{
unsigned char i;
i=*uart0_p;
while (i!='$')
{
uart0_tl[tc0]=i;
tc0++;
*uart0_p++;
uart0_tc++;
i=*uart0_p;
}
*uart0_p++;
}
//送回车换行'>'
void cl_ad (void)
{
uart0_tl[tc0]=0x0a;
tc0++;
uart0_tc++;
uart0_tl[tc0]=0x0d;
tc0++;
uart0_tc++;
}
void cl_ad1 (void)
{
uart0_tl[tc0]=0x0a;
tc0++;
uart0_tc++;
uart0_tl[tc0]=0x0d;
tc0++;
uart0_tc++;
uart0_tl[tc0]='>';
tc0++;
uart0_tc++;
}
//允许发送
void cl_enabletxd(void)
{
tc0=rc0=0x00;
uart0_rc=0;
USR0_TIE=1;
uart0_mark1_a0=1;
}
//送地址
void cl_xsdata_address(void)
{
unsigned long int i;
i=uart0_address>>20;
i=(i&0x0f)+'0';
if (i>'9') i=i+7;
uart0_tl[tc0]=i;
tc0++;
uart0_tc++;
i=uart0_address>>16;
i=(i&0x0f)+'0';
if (i>'9') i=i+7;
uart0_tl[tc0]=i;
tc0++;
uart0_tc++;
i=uart0_address>>12;
i=(i&0x0f)+'0';
if (i>'9') i=i+7;
uart0_tl[tc0]=i;
tc0++;
uart0_tc++;
i=uart0_address>>8;
i=(i&0x0f)+'0';
if (i>'9') i=i+7;
uart0_tl[tc0]=i;
tc0++;
uart0_tc++;
i=uart0_address>>4;
i=(i&0x0f)+'0';
if (i>'9') i=i+7;
uart0_tl[tc0]=i;
tc0++;
uart0_tc++;
i=uart0_address;
i=(i&0x0f)+'0';
if (i>'9') i=i+7;
uart0_tl[tc0]=i;
tc0++;
uart0_tc++;
uart0_tl[tc0]=':';
tc0++;
uart0_tc++;
uart0_tl[tc0]=' ';
tc0++;
uart0_tc++;
}
//送数据
void cl_dszc(void)
{
unsigned char l;
l=*uart0_p;
l>>=4;
l=(l&0x0f)+'0';
if (l>'9') l=l+0x07;
uart0_tl[tc0]=l;
tc0++;
uart0_tc++;
l=*uart0_p;
l=(l&0x0f)+'0';
if (l>'9') l=l+0x07;
uart0_tl[tc0]=l;
tc0++;
uart0_tc++;
uart0_tl[tc0]=' ';
tc0++;
uart0_tc++;
*uart0_p++;
}
void cl_eszc(void)
{
unsigned char l;
l=*uart0_p;
l>>=4;
l=(l&0x0f)+'0';
if (l>'9') l=l+0x07;
uart0_tl[tc0]=l;
tc0++;
uart0_tc++;
l=*uart0_p;
l=(l&0x0f)+'0';
if (l>'9') l=l+0x07;
uart0_tl[tc0]=l;
tc0++;
uart0_tc++;
uart0_tl[tc0]='.';
tc0++;
uart0_tc++;
}
//清除串行EEPROM
void cl_clear_eeprom(void)
{
IO_WORD i;
for (i=0;i<4096;i++) systemconfig_para(i)=0xffff;
eeprom_ram[eep_in_count++]=(unsigned int)&systemconfig_para(0);
eeprom_ram[eep_in_count++]=256;
}
//输入地址处理
void cl_address(void)
{
unsigned char j,k;
unsigned long int l;
l=0x0000;
for (j=0;j<uart0_rc;j++)
{
switch (uart0_rl[j])
{
case ' ':
if (uart0_mark1_a4==0)
{
switch (uart0_mark1_a7)
{
case 0: uart0_mark1_a7=1;
uart0_address=l;
l=0x0000;
break;
case 1: if (uart0_mark1_a6==0)
{
uart0_mark1_a6=1;
uart0_pointer=l-uart0_address;
if (uart0_pointer>0x8000) uart0_pointer=0x0100;
l=0x0000;
}
else
{
uart0_mark1_a5=1;
return;
}
}
}
break;
case '\r':
if (uart0_mark1_a4==0)
{
switch (uart0_mark1_a7)
{
case 0:
uart0_pointer=0x100;
if (uart0_rc!=1) uart0_address=l;
break;
case 1: if (uart0_mark1_a6==1) uart0_data=l;
break;
}
uart0_p=(__far unsigned char *)uart0_address;
return;
}
break;
default :
l=l<<4;
if ((uart0_rl[j]>='0')&&(uart0_rl[j]<='9'))
{
k=uart0_rl[j]-'0';
l=l|k;
}
else
{
if ((uart0_rl[j]>='a')&&(uart0_rl[j]<='f'))
{
k=uart0_rl[j]-0x57;
l=l|k;
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -