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

📄 dcfv1.c

📁 阀控制器控制电流大小的程序
💻 C
字号:
/*-----------------------设计人:王兴刚--------------------*/
/*-----------------------日期:2007年1月9日----------------*/
#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sfr CCON=0X0D8;
sfr CMOD=0X0D9;
sfr CL  =0x0E9;
sfr CH  =0x0F9;
sfr CCAP0L=0x0EA;
sfr CCAP1L=0x0EB;
sfr CCAP0H=0x0FA;
sfr CCAP1H=0x0FB;
sfr CCAPM0=0x0DA;
sfr CCAPM1=0x0DB;
sbit CR=0x0DE;
sfr PCA_PWM0=0X0F2;
sfr PCA_PWM1=0x0F3;
sfr isp_data=0xe2; //数据
sfr isp_addrh=0xe3; //地址高
sfr isp_addrl=0xe4; //地址低
sfr isp_cmd=0xe5;
sfr isp_trig=0xe6;
sfr isp_contr=0xe7;

uchar data receive_register[8]={0};
uchar data receive_counter;
uchar data eeprom1;
uchar data eeprom2;
uchar data eeprom;
uchar bdata tx;
sbit tx0=tx^0;
sbit tx1=tx^1;
sbit tx2=tx^2;
sbit key1=P3^2;
sbit key2=P3^3;

/*------------------------delay---------------------------*/
void delay(uint x)
{
uint i;
uchar j;
for(i=x;i>0;i--)
{
for(j=110;j>0;j--)
;
}
}
/*------------------------通信函数------------------------*/
 void communicatiom(void) interrupt 4 using 1  /*serial port interrupt servise function*/
{


	if(RI==1)
	{
                if(tx0==0)
                {

                                receive_register[receive_counter]=SBUF;


                                if(receive_counter>8)
                                {tx0=0;}
                                 else;
                                  receive_counter+=1;

		}
		else;


                RI=0;

	}
	else
		;

}
/*-----------------*/

unsigned char eeprom_read(unsigned int addres);
void eeprom_write(unsigned int address,unsigned char wdata);
void eeprom_eares(unsigned int addres);//扇区擦除。

void eeprom_eares(unsigned int addres)//扇区擦除。
     {unsigned i;
      isp_addrl=addres;     //低位地址
      isp_addrh=addres>>8;  //高位地址
      isp_contr=0x01;
      isp_contr=isp_contr|0x80; //设时间与充ISP操作。
      isp_cmd=0x03;         //扇区命命令
      isp_trig=0x46;        //触发
      isp_trig=0xb9;        //触发启动。
      for(i=0;i<3;i++);
      isp_addrl=0xff;
      isp_addrh=0xff;
      isp_contr=0x00;
      isp_cmd=0x00;
      isp_trig=0x00;
          }
/*-------------------------------------------------------*/
void eeprom_write(unsigned int addres,unsigned char write_data)//写数据。
     {unsigned char i;
      isp_data=write_data;   //要写入的数据。
      isp_addrl=addres;     //低位地址
      isp_addrh=addres>>8;  //高位地址
      isp_contr=0x01;
      isp_contr=isp_contr|0x80; //设时间与充ISP操作。
      isp_cmd=0x02;         //写命令
      isp_trig=0x46;        //触发
      isp_trig=0xb9;        //触发启动。
      for(i=0;i<3;i++);
      isp_addrl=0xff;
      isp_addrh=0xff;
      isp_contr=0x00;
      isp_cmd=0x00;
      isp_trig=0x00;


       }
unsigned char eeprom_read(unsigned int addres)
     {unsigned char i,z;
      isp_addrl=addres;     //低位地址
      isp_addrh=addres>>8;  //高位地址
      isp_contr=0x01;
      isp_contr=isp_contr|0x80; //设时间与充ISP操作。
      isp_cmd=0x01;         //写命令
      isp_trig=0x46;        //触发
      isp_trig=0xb9;        //触发启动。
      for(i=0;i<3;i++);
      isp_addrl=0xff;
      isp_addrh=0xff;
      isp_contr=0x00;
      isp_cmd=0x00;
      isp_trig=0x00;
      z=isp_data;
      return(z);


     }

/*------------------------主程序--------------------------*/
void main(void)
{
CMOD=0X02;  //定时器溢出方式可以实现可调频PWM输出
CCON=0X00;
CL=CH=0x00;
CCAP0L=CCAP0H=0X0C0;
CCAP1L=CCAP1H=0X0C0;
CCAPM0=0X42;
CCAPM1=0X42;
PCA_PWM0=0X00;
PCA_PWM1=0X00;
CR=1;


eeprom1=eeprom_read(0x1200);
eeprom2=eeprom_read(0x1000);
        TMOD=TMOD|0x20;
	ET1=0;                           //现在波特率9600,待调。
	TR1=1;

	SCON=SCON|0x70; //d8
	TH1=0x0fd;
	TL1=0x0fd;
	PCON=0x80;/*波特率 19200,无奇偶校验,8位数据位。80  */
        ES=1;
        EA=1;
        CCAP0H=0;
while(1)
{

/*
CCAP0H=eeprom1;
CCAP1H=eeprom2;
 */
 CCAP0H+=1;
 delay(500);
  CCAP1H+=1;
while(key1==0)
{
delay(200);
CCAP0H+=10;
tx1=1;
}

if(tx1==1)
{
tx1=0;
eeprom_eares(0x1000);
eeprom_write(0x1000,CCAP0H);

CCAP0H=0;
}
else;
while(key2==0)
{
CCAP1H+=10;
delay(200);
tx2=1;
}
asm mov a,#00h;
if(tx2==1)
{
eeprom_eares(0x1200);
eeprom_write(0x1200,CCAP1H);
CCAP1H=0;
tx2=0;
 
}
else;
}
}

⌨️ 快捷键说明

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