|
*********************************************************************
輸入控制:
第1路輸入信號(hào),第1路繼電器吸合。
第2路輸入信號(hào),第1路繼電器斷開。
第3路輸入信號(hào),第2路繼電器吸合。
第4路輸入信號(hào),第2路繼電器斷開。
第5路輸入信號(hào),第3路繼電器吸合。
第6路輸入信號(hào),第3路繼電器斷開。
第7路輸入信號(hào),第4路繼電器吸合。
第8路輸入信號(hào),第4路繼電器斷開。
單片機(jī)與PC機(jī)采用max232 max485通訊或者TTL通信,波特率默認(rèn)為9600.
單片機(jī)接收PC機(jī)發(fā)送的數(shù)據(jù)碼表如下:
PC向單片機(jī)發(fā)送字符'A'第1路繼電器吸合單片機(jī)返回值'A'。
PC向單片機(jī)發(fā)送字符'B'第1路繼電器吸合單片機(jī)返回值'B'。
PC向單片機(jī)發(fā)送字符'C'第1路繼電器吸合單片機(jī)返回值'C'。
PC向單片機(jī)發(fā)送字符'D'第1路繼電器吸合單片機(jī)返回值'D'。
PC向單片機(jī)發(fā)送字符'a'第1路繼電器斷開單片機(jī)返回值'a'。
PC向單片機(jī)發(fā)送字符'b'第1路繼電器斷開單片機(jī)返回值'b'。
PC向單片機(jī)發(fā)送字符'c'第1路繼電器斷開單片機(jī)返回值'c'。
PC向單片機(jī)發(fā)送字符'd'第1路繼電器斷開單片機(jī)返回值'd'。
PC向單片機(jī)發(fā)送字符'1'查詢第1路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'2'查詢第2路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'3'查詢第3路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'4'查詢第4路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'5'查詢第5路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'6'查詢第6路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'7'查詢第7路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'8'查詢第8路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'E'所有繼電器輸出狀態(tài)取反單片機(jī)返回值'E'。
*********************************************************************/
#include "STC15W408AS.h"
#include <intrins.H>
#define uchar unsigned char //宏定義字符型變量
#define uint unsigned int //宏定義整型變量
/********************************************************************
波特率設(shè)定
*********************************************************************/
//#define BAUD 0XF400 //1200bps@ 11.0592MHZ
//#define BAUD 0XFA00 //2400bps@ 11.0592MHZ
//#define BAUD 0XFD00 //4800bps@ 11.0592MHZ
#define BAUD 0XFE80 //9600bps@ 11.0592MHZ
//#define BAUD 0XFF40 //19200bps@ 11.0592MHZ
//#define BAUD 0XFFA0 //38400bps@ 11.0592MHZ
uchar dat; //用于存儲(chǔ)單片機(jī)接收發(fā)送緩沖寄存器SBUF里面的內(nèi)容
sbit IN1 = P1^2; /*單片機(jī)1.2引腳檢測(cè)IN1是否動(dòng)作*/
sbit IN2 = P1^3; /*單片機(jī)1.3引腳檢測(cè)IN2是否動(dòng)作*/
sbit IN3 = P1^4; /*單片機(jī)1.4引腳檢測(cè)IN3是否動(dòng)作*/
sbit IN4 = P1^5; /*單片機(jī)1.5引腳檢測(cè)IN4是否動(dòng)作*/
sbit IN5 = P1^6; /*單片機(jī)1.6引腳檢測(cè)IN5是否動(dòng)作*/
sbit IN6 = P1^7; /*單片機(jī)1.7引腳檢測(cè)IN5是否動(dòng)作*/
sbit IN7 = P5^4; /*單片機(jī)5.4引腳檢測(cè)IN5是否動(dòng)作*/
sbit IN8 = P5^5; /*單片機(jī)5.5引腳檢測(cè)IN5是否動(dòng)作*/
sbit COM1 = P3^7; /*單片機(jī)3.7引腳控制繼電器COM1*/
sbit COM2 = P3^6; /*單片機(jī)3.6引腳控制繼電器COM2*/
sbit COM3 = P3^5; /*單片機(jī)3.5引腳控制繼電器COM3*/
sbit COM4 = P3^4; /*單片機(jī)3.4引腳控制繼電器COM4*/
/********************************************************************
定義特殊寄存器
*********************************************************************/
sbit RXB=P3^0;
sbit TXB=P3^1;
/********************************************************************
定義數(shù)據(jù)類型
*********************************************************************/
uchar TBUF,RBUF;
uchar TDAT,RDAT;
uchar TCNT,RCNT;
uchar TBIT,RBIT;
uint TING,RING;
uint TEND,REND;
void UART_INIT(); //聲明函數(shù)
uchar t,r; //定義數(shù)據(jù)類型
uchar but; //數(shù)據(jù)存儲(chǔ)數(shù)組
/********************************************************************
延時(shí)函數(shù)
*********************************************************************/
void delay(uchar t)
{
uchar i,j;
for(i=0;i<t;i++)
{
for(j=13;j>0;j--);
{ ;
}
}
}
/********************************************************************
延時(shí)函數(shù)
*********************************************************************
void delays()//延時(shí)程序
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=50;n>0;n--)
for(s=248;s>0;s--);
}
/****************發(fā)送函數(shù)*********************/
void senduart2()
{
if(TEND) //允許發(fā)送
{
TEND=0;
TBUF=but;
TING=1;
}
while(!TEND);
}
/********************************************************************
主函數(shù)
*********************************************************************/
void main()
{
TMOD=0X00; //定時(shí)器T0設(shè)定
AUXR=0X80; //輔助寄存器
TL0=BAUD; //十六位寄存器
TH0=BAUD>>8; //十六位寄存器
TR0=1; //開定時(shí)器
ET0=1;
PT0=1;
EA=1; //開總中斷
UART_INIT(); //串口初始化
while(1) // 循環(huán)
{
if(IN1==0) {COM1=0;}
if(IN2==0) {COM1=1;}
if(IN3==0) {COM2=0;}
if(IN4==0) {COM2=1;}
if(IN5==0) {COM3=0;}
if(IN6==0) {COM3=1;}
if(IN7==0) {COM4=0;}
if(IN8==0) {COM4=1;}
if(REND)
{
REND=0;
r++;
dat=RBUF;
}
switch(dat) //接收數(shù)據(jù)判斷
{
uchar k;
k=10;
case 'A': COM1=0;delay(k);but=dat;senduart2();dat=0xee;break; // 開
case 'B': COM2=0;delay(k);but=dat;senduart2();dat=0xee;break; // 開
case 'C': COM3=0;delay(k);but=dat;senduart2();dat=0xee;break; // 開
case 'D': COM4=0;delay(k);but=dat;senduart2();dat=0xee;break; // 開
case 'a': COM1=1;delay(k);but=dat;senduart2();dat=0xee;break; // 關(guān)
case 'b': COM2=1;delay(k);but=dat;senduart2();dat=0xee;break; // 關(guān)
case 'c': COM3=1;delay(k);but=dat;senduart2();dat=0xee;break; // 關(guān)
case 'd': COM4=1;delay(k);but=dat;senduart2();dat=0xee;break; // 關(guān)
case '1': if(IN1==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break; // 讀輸入口狀態(tài)
case '2': if(IN2==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break; // 讀輸入口狀態(tài)
case '3': if(IN3==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break; // 讀輸入口狀態(tài)
case '4': if(IN4==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break; // 讀輸入口狀態(tài)
case '5': if(IN5==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break; // 讀輸入口狀態(tài)
case '6': if(IN6==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break; // 讀輸入口狀態(tài)
case '7': if(IN7==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break; // 讀輸入口狀態(tài)
case '8': if(IN8==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break; // 讀輸入口狀態(tài)
case 'E': COM1=!COM1;COM2=!COM2;COM3=!COM3;COM4=!COM4;delay(k);but=dat;senduart2();dat=0xee;break; // 輸出口取反
default:break; // 跳出
}
}
}
/********************************************************************
定時(shí)器T0
*********************************************************************/
void tm0()interrupt 1 using 1
{
if(RING)
{
if(--RCNT==0)
{
RCNT=3;
if(--RBIT==0)
{
RBUF=RDAT;
RING=0;
REND=1;
}
else
{
RDAT>>=1;
if(RXB)RDAT|=0X80;
}
}
}
else if(!RXB)
{
RING=1;
RCNT=4;
RBIT=9;
}
if(--TCNT==0)
{
TCNT=3;
if(TING)
{
if(TBIT==0)
{
TXB=0;
TDAT=TBUF;
TBIT=9;
}
else
{
TDAT>>=1;
if(--TBIT==0)
{
TXB=1;
TING=0;
TEND=1;
}
else
{
TXB=CY;
}
}
}
}
}
/********************************************************************
功能:串口初始化,波特率9600,方式1
*********************************************************************/
void UART_INIT()
{
TING=0;
RING=0;
TEND=1;
REND=0;
TCNT=0;
RCNT=0;
}
/********************************************************************
結(jié)束
*********************************************************************/
|
|