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

📄 example1.c

📁 以atmel AT89C51为核心的超小型PLC源代码
💻 C
字号:
/*
*********************************************************************************************************
*                            EXAMPLE1

*				   Using the Keil uVision2 compiler
* File : EXAMPLE1.C
*********************************************************************************************************
*/
#include "uPLC.h"
#include "EXAMPLE1.h"
#include "REG52.h" //应与所用的CPU相配
#include "Program.h"

//////////////////////////////////////////////////////////////////////////////////
#define OSC_FREQ			(12000000UL)
#define OSC_PER_INST		(12)

//Preload value for 20 ms delay
#define PERIOD		(20)	//100 msec	
#define PRELOAD020	(65536 - (unsigned int)(OSC_FREQ * PERIOD / (OSC_PER_INST * 1000)))
#define PRELOAD020H	(PRELOAD020 / 256)
#define PRELOAD020L	(PRELOAD020 % 256)

#define INTR_TIMER_0		1

unsigned int xdata counter;

///////////////////////////////////////////////////////////////////////////////
void Timer0ISR(void) interrupt INTR_TIMER_0
{
	//Reload timer0 value 
	TL0	= PRELOAD020L;
	TH0 = PRELOAD020H;
	if(counter%5==0) ReflashTIM();
	counter++;
}
///////////////////////////////////////////////////////////////////////////////
void main (void)
{
#if CODE_DEBUGGING
    SCON  = 0x50;		        /* SCON: mode 1, 8-bit UART, enable rcvr      */
    TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */
    TH1   = 221;                /* TH1:  reload value for 1200 baud @ 16MHz   */
    TR1   = 1;                  /* TR1:  timer 1 run                          */
    TI    = 1;                  /* TI:   set TI to send first char of UART    */
#endif
	Init();

#if CODE_DEBUGGING
	CheckLadder(Program);
#endif
	while (1)
	  {
		ExecuteLadder(Program);
		MappingIO();
	  }
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void Init(void)
{
	P0=P1=P2=P3=0xff;

	TMOD &= 0xf0;	// clear all T0 bits
	TMOD |= 0x01;	// set T0 as 16-bit timer
	
	//Set timer0 value as (65536 - 20 * 1000) equivalent to 20 ms
	TL0	= PRELOAD020L;
	TH0 = PRELOAD020H;

	ET0 = 1;	// enable timer 0 interrupt
	TR0 = 1;	// start timer 0
	EA = 1;		// enable interrupt
//	AUXR=0;		//选择片内XRAM
	uPLCInit();
	counter=0;
}
////////////////////////////////////////////////////////////////////////////////
void MappingIO(void)
{
	unsigned char In;
	unsigned int xdata mt;
	int *pIR;
	pIR=GetIR();
	mt=0;
	In=~P3;
	mt|=In;
	*pIR=mt;
	mt=*(pIR+9);
	P1=~mt; 
}
//////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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