?? prot30.c
字號:
/*--------------------------------------
芯片 :STC12C5A60S2芯片
硬件: :15入15出繼電器控制板子
晶振 :11.0592MHZ
開發平臺:KEIL
功能 :串口一或者串口二都可以通過上位機控制30路繼電器
波特率 :9600BPS
日期 :2012.4.19
編者 :yang
QQ :7902449096
注意 :下載完程序后請復位系統!!(切記!)
--------------------------------------*/
#include "Hfile\\STC12C5A60S2.h"
#include"Hfile\\PublicV.H"
#define uchar unsigned char
#define uint unsigned int
void sender (void);
uchar dat;
void init ()
{
//串口2波特率
TMOD = 0x20; //定時器1產生波特率
SCON = 0x50; //方式1,8位數據,波特率可變
TH1= 0xfd;
TL1 = 0xfd; //波特率 9600
//串口1波特率
S2CON = 0x50; //方式1,八位數據,可變波特率
BRT=0XFD; //設置波特率9600
TR1=1; //啟動定時器產生串口2波特率
AUXR=0x10; //啟動串口1波特率發生器
IP=0x00; //優先級默認
EA=1; //開總中斷
ES=1; //開串口1中斷
IE2=0x01; //開串口2中斷
}
/*--------------------------------------
延時函數
--------------------------------------*/
void delay ( uint t )
{
uint i,j;
for( i=0; i<t; i++)
for( j=0; j<250; j++);
}
/*--------------------------------------
發送函數
--------------------------------------*/
void sender (void)
{
unsigned char j;
ES=0;
for(j=0;j<=5;j++)
{
SBUF=bite[j];
while(!TI);
TI=0;
}
ES=1;
}
/*--------------------------------------
主函數
--------------------------------------*/
void main()
{
uchar k=10;
P4SW|=0x20; //配置P4.5為IO口
P4M0|=0x10; //配置P4.4為IO口
P4M1|=0x10;
P0=P1=P2=P3=0xff;
P4|=0x30;
init(); // 定時器初始化
add=0X00;
while(1)
{
if(receive==1&&bite[1]==add)
{
/*0=握手 1=地址 2=繼電器開關 3=繼電器1-8路 4=繼電器9-16路 5=繼電器17=24路
*6=繼電器25-30路*/
receive=0;
if(bite[2]==0x11) //打開
open_X1(bite[3],0);
if(bite[2]==0x01) //關閉
open_X1(bite[3],1);
if(bite[4]==0x12) //打開
open_X2(bite[5],0);
if(bite[4]==0x02) //關閉
open_X2(bite[5],1);
sender ();
// IapEraseSector(0);
// IapProgramByte(1,bite[3]);
// IapProgramByte(2,bite[5]);
// IapProgramByte(3,bite[7]);
// IapProgramByte(4,bite[9]);
}
}
}
/*--------------------------------------
串口一 接收中斷函數
--------------------------------------*/
void uart_isr() interrupt 4 using 2
{
ES=0;
if( RI )
{
RI=0;
bite[r] = SBUF;
if(bite[0]==0XAA || bite[0]==0XAB || bite[0]==0XAC || bite[0]==0XAD)
r++;
if(r>=6)
{
receive=1;
r=0;
}
}
ES=1;
}
void uart2_isr() interrupt 8 using 1
{
if( S2CON & 0x01 )
{
S2CON &= ~0x01;
bite[r] = S2BUF;
if(bite[0]==0XAA || bite[0]==0XAB || bite[0]==0XAC || bite[0]==0XAD)
r++;
if(r>=6)
{
receive=1;
r=0;
}
}
if( S2CON & 0x02 )
{
S2CON &= ~0x02;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -