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

📄 mainbroad.c

📁 热饮现调机控制程序01,可实现饮料的选择和饮料的泡冲
💻 C
字号:
//**********************************
//项目名称:热饮现调机主板
#include <iom16v.h>
#include <macros.h>
#include <math.h>
#include <eeprom.h>
#define xtal 8000000 //晶振8MHZ
#define uchar unsigned char
#define uint  unsigned int
#define ramend 0x45f		
#define eep0 (*(volatile uchar *)0xf000)
#define eep1 (*(volatile uchar *)0xf001)
#define zhsz 0x01
#define cst232 PORTD|=0X04
#define csr232 PORTD&=0Xfb
#define OPENBZ  0X55	//开启标志
#define CLOSEBZ 0XAA	//关闭标志
//输入量片选端PD6
#define clr_cs_in	PORTD&=0XBF						
#define	set_cs_in	PORTD|=0X40
//电路上左边374片选PC7
#define clr_cs_out1	PORTC&=0X7F						
#define	set_cs_out1	PORTC|=0X80
//电路上右边374片选PD4
#define clr_cs_out2	PORTD&=0XEF						
#define	set_cs_out2	PORTD|=0X10


#define WATCHDOG  	PORTC^=BIT(PC5)	
unsigned char ADAVRNUM; 
unsigned char AD_DAADDR;
unsigned char SPIINTNUM;
unsigned int ADBUFFH;
unsigned int ADBUFFL;
unsigned int ADAVR[2];
unsigned char GPER;
unsigned int ADDATA[2];




//-------------与变频器通信定义-----------
uchar TXCNT0=0,RXCNT0=0;
uchar rxtxcompleteflag=CLOSEBZ;
uchar BPQRS=0;
uchar BPQTS=0;
uchar bpqbustbuf[150];
/*uchar bpqbustbuf[100]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,
46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,
71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
96,97,98,99};//MODBUS通讯数据接收缓存*/
uchar bpqbusrbuf[150];//MODBUS通讯数据发送缓存
uint  bpqcrcdata=0;//CRC校验数据寄存器
uint  bpqcrcdata1=0;
uint  BPQHZ=0;


void guanji(void);
void SENDDATA232(uchar senddata232);
void delay_1ms(void)
{	 uint i;
	 for(i=1;i<(uint)(xtal*143-2);i++);
	 }
void delay_10us(void)
{uint i;
	for(i=1;i<30;i++)
	asm("nop");
}	

	

void cpu_init(void)
{
  	 	uint i;
MCUCR=0x00;
//SEI();
DDRB=0Xff;
PORTB=0XFF;
DDRD=0XFF;
PORTD=0Xf7;		
NOP();
NOP();
//set_cs_out2;
set_cs_in;	
DDRC=0XFF;	
		NOP();
		NOP();
		NOP();	
 TCCR2 = 0x00; //stop
 ASSR  = 0x00; //set async mode
 TCNT2 = 0x30; //setup
 OCR2  = 0xD0;
 TCCR2 = 0x14; //start		
					}
void t1_init(void)
{
		TCCR1A=0; 	 	//CTC到后清零,
		TCCR1B=0X08;	//0X13为64分频,1微秒
		TCNT1=0;
		OCR1A=0X30D4;	//定时12500*8微秒=100毫秒
		TIMSK=0X10;		//输出比较A匹配中断使能
//		SEC1=10;
		//SEC10=100;
		SEI();			//全局中断使能
 	 			  	}

void rsbpq_init(void)
 	 { uchar i=0;
	 UCSRA=0;
		UCSRB=0X90;//发送/接受完成中断使能 b7接收,b6发送\90接收、48发送
		UBRRL=51; //配置波特率为9600bps
		UBRRH=00; //配置波特率为9600bps
		csr232;//PORTD|=0X10;		
		UCSRC=0x86;//a4对应7位数据位1位停止位,偶校验,0X86;//配置串口为8位数据位,1位停止位,无效验
		i=UDR;//=0Xaa;	
		GPER=1;	
		RXCNT0=0;
		TXCNT0=0;
	  }	
void delay(uint n)
{
	uint i=0;
	for(i=0;i<n;i++)
	delay_1ms();
}		


#pragma interrupt_handler t1coma:7
void t1coma(void)
{GPER++;
if (GPER>50) GPER=0;
			NOP();
		NOP();
		NOP();
		

 	 }				
	//************CRC校验************
uint bpqcrc(uchar bpqcrca)
{uchar i;
bpqcrcdata1^=bpqcrca;
for(i=0;i<8;i++)
    {if((bpqcrcdata1&0x01)!=0)
        {bpqcrcdata1>>=1;
         bpqcrcdata1^=0xa001;
		}
     else bpqcrcdata1>>=1;
     }
return bpqcrcdata1;
}
//************CRC校验************
uint pbqcrc_check(uchar bpqcrca)
{uchar i;
bpqcrcdata1=0xffff;
for(i=0;i<bpqcrca;i++) bpqcrc(bpqbustbuf[i]);
//bpqbustbuf[6]=bpqcrcdata1&0x0ff;
//bpqbustbuf[7]=bpqcrcdata1>>8;
return bpqcrcdata;
}
//*************变频器通讯**********	
void rxbpq(void)  //
{uchar i;
    CLI();
    csr232;//PORTD&=0Xef;
	RXCNT0++;
	UCSRB=0X90;
	if (RXCNT0<100)
	bpqbusrbuf[RXCNT0]=UDR;
	if (RXCNT0>99)
	    {RXCNT0=0;
		 cst232;
		 UCSRB=0X48;
		 UDR=bpqbustbuf[0];
		}
SEI();
}

void txbpq(void)
{uchar i;
  CLI();
    cst232;
	TXCNT0++;
	UCSRB=0X48;
	if (TXCNT0<100)
	UDR=bpqbustbuf[TXCNT0];
	if (TXCNT0>99) 
	   {UCSRB=0X90;
	    csr232;
		TXCNT0=0;
		bpqbusrbuf[0]=UDR;
		}
SEI(); 
}
/*void bpqrs232(void)
{uchar i;
	 i=UDR;
	 UCSRB=0X90;
	 csr232;
	 delay(1000);
     
	 UDR=0X55;
	 cst232;
	 UCSRB=0X48; 

}					
	*/							 	 								   
#pragma interrupt_handler rs232r:12
void rs232r(void)
{
rxbpq();
}
#pragma interrupt_handler rs232s:14
void rs232s(void)
{
txbpq();
}								   		 
void main(void)
{uchar i;
 	 	SP=0x45f;//ramend;
		cpu_init();/*CPU初始化*/
		t1_init();//定时器1初始化
		//spi_init();
		//rs232_init();
		rsbpq_init();
		TCCR1B=0X0B;//64分频
		for (i=0;i<130;i++)
		bpqbustbuf[i]=0x11;
		SEI();
	while(1)
        {//bpqrs232(); 

		if(GPER==0)
		rsbpq_init();//rs232_init();
		delay_1ms();
		delay_1ms();

}	//while尾
}	//main尾


⌨️ 快捷键说明

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