⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mian.c

📁 用于远程控制系统下位机的设置程序
💻 C
字号:
#include"AT89S8252.h"



#define TRUE  1
#define FALSE 0

#define uchar unsigned char 
#define uint  unsigned int 

#define LCDCOM_R XBYTE[0x7f01]   /*液晶口地址定义*/
#define LCDCOM_W XBYTE[0x7f00]
#define LCDDATA_R XBYTE[0x7f03]
#define LCDDATA_W XBYTE[0x7f02]

sbit BF=ACC^7;  /*液晶忙标志位*/

/*输入/输出引脚定义*/

sbit  LED    =P1^6;
sbit  MODEM  =P1^7;
sbit  DIN7705=P3^4; /*数据输入输出为同一端口*/
sbit  DOUT7705=P3^4;
sbit  CLK7705=P3^5;
sbit  AD7705_DRDY=P1^5;


/*全局变量定义*/
uchar ADH_1;
uchar ADL_1;
uchar ADH_2;
uchar ADL_2;

uchar k_stat;
uchar mod_buff_head;
uchar mod_buff_tail;
uchar mod_buff[16];

uchar  bdata  flag;
sbit  ch_flag=flag^0;
sbit  tx_f=flag^1;
sbit  state=flag^3;


/*发送命令,命令为ASC码形式,待发送命令串数据存放在str缓冲区中*/
void mod_comd(uchar *str)
{
  uchar i,k;
  do
  {
    if(*str!=0x00)     /*字符串结束符*/
	 {
	  SBUF=*str;
	   state=FALSE;
	   while(state==FALSE);
	   str++;
	  }
	else break;     /*字符串发送完成结束循环*/
  }while(1);
  SBUF=0x0d;     /*发送回车符,命令必须以回车符结尾*/
  state=FALSE;
  for(i=0;i<250;i++)
    for(k=0;k<16;k++);
}

/*发送数据函数,发送的数据存在缓冲区p中,字符数为n*/
void mod_data(uchar *p,uchar n)
{
  uchar i;
  for(i=0;i<n;i++)
  {
     SBUF=*p;
	 state=FALSE;
	 while(state==FALSE);
	 p++;
   }
   state=FALSE;
}

/*检测四个开关输入量,检测后的状态存入变量k_stat中,以供显示和发送*/
void test_kio(void)
{
  P1=P1|0x0f;
  k_stat=P1;
  k_stat&=0x0f;
}


/*主函数*/

void main (void)
{
  uchar  i,j,k;

  MODEM=1;      /*关MODEM电源开关*/
  for(i=0;i<20;i++)
    for(j=0;j<150;j++)          /*总共延迟时间20*150*150=450000*0.2=90ms*/
	  for(k=0;k<150;k++);   

  MODEM=0;

  WMCON|=PS0_;            /*看门狗周期2048ms*/
  WMCON|=PS1_;
  WMCON|=PS2_;
  WMCON|=WDTEN_;           /*使能片内看门狗*/

  ES=0;                  /*关串口中断以免干扰初始化*/

  WMCON|=WDTRST_;         /*喂狗*/

  tx_f=0;      /*清中断标志位,未发生中断*/
  init();

  for(i=0;i<50;i++)
    {
	 for(j=0;j<150;j++)
	  for(k=0;k<150;k++);
	   
	   WMCON|=WDTRST_;         /*喂狗*/
	 }
  init_lcd();

  test_kio();             /*A/D转换结果默认为零*/

  ADH_1=0;
  ADL_1=0;
  ADH_2=0;
  ADL_2=0;



  ES=1;

  modem_init();              /*MODEM初始化*/

  for(i=0;i<50;i++)
    for(j=0;j<250;j++);

  tx_f=0;               /*清通信标志(接收中断标志位)*/

  /*缓冲区尾指针必须清零,以便从头存放接收的数据*/

  mod_buff_tail=0;
  for(i=0;i<16;i++)
      mod_buff[i]=0;

  while(!tx_f)         /*接收中断发生,表示有振铃信号*/
  {
      WMCON|=WDTRST_;         /*喂狗*/
	  ch_flag=0;
	  AD7705_init(ch_flag);  /*通道0初始化*/
	  readfromda7705(ch_flag);/*读取通道结果*/

	  delay();

      ch_flag=1;
	  AD7705_init(ch_flag);  /*通道1初始化*/
	  readfromda7705(ch_flag);/*读取通道结果*/
 
	  test_kio();        /*刷新显示*/


	  LED=!LED;             /*工作灯闪亮*/
   }

   tx();
   while(1);
}


   
/*串行中断函数*/
void SCON_int (void ) interrupt 4 using 2
{
  if(RI==1)    /*如果可以接收*/
  {
    RI=0;        /*清除接收标志*/
	tx_f=1;        /*可以开始通信*/

	mod_buff[mod_buff_tail]=SBUF;
	mod_buff_tail=(mod_buff_tail+1)%0x10; /*为什么%0x10???*/
   }
   if(TI==1)
   {
     TI=0;
	 state=TRUE;          /*发送完成则志位完成标志*/
	}
 }



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -