?? deng.c
字號:
#include<reg52.h>
sfr CKCON=0xb6; //定義時鐘控制寄存器
sfr IPH=0xb7; //中斷器優(yōu)先級高位
sbit SHANGDIAN_ID1= P1^3;//
sbit STATE_ID2= P1^4;//
sbit STATE_ID3= P1^5;//
sbit STATE_ID4= P1^6;//
unsigned char TIME_counter=0;
unsigned char TIME_counter1=0;
unsigned char TIME_counter2=0;
unsigned char pointer=0; //串口接受首地址
unsigned char xdata Rev_COM_data[12]; //串口通訊接受存儲單元
bit Com_Begin_bz=0; //串口數據開始接受
/*串口發(fā)送子程序*/
void Comout(unsigned char OutData)
{ //EA=0;
SBUF = OutData; //輸出字符
while(!TI); //空語句判斷字符是否發(fā)完
TI = 0; //清TI
//EA=1;
}
main( )
{
CKCON=0x04;
IP=1;
IPH=1;
TMOD=0x21; // 定時器T0為方式1,T1為方式2
TH0=0x00;
TL0=0x00; //定時器0設置,暫時先開開,可能用不上
TR0=1;
ET0=1;
TH1=0x00;
TL1=0x00; //定時器1設置,暫時先開開,可能用不上
TR1=1;
ET1=1;
RCLK=1;
TCLK=1; //定時器2用作波特率發(fā)生器 T2CON中的值
RCAP2H=0xff;
RCAP2L=0xB8; //初步設定波特率為9600
RCAP2L=0xDC; //初步設定波特率為19200
//RCAP2H=0x77;
//RCAP2L=0x77; //初步設定波特率為9600
SCON=0x50; //串口方式為模式1,無校驗,定時器2產生波特率
TR2=1; //開定時器2
//ET2=1; //使能定時器2
IT0=1; // 負邊緣觸發(fā)
EX0=1; //外部中斷使能
ES=1; //使能串口
EA=1;
while (1)
{
if(pointer>=1&&(Rev_COM_data[0]==0xB5)&&(Rev_COM_data[1]==0xA5))
{
pointer=0;
Com_Begin_bz=0;
//if(TIME_counter2>=100)
//{
// TIME_counter2=0;
Comout(0xB5); //是正常通訊信號,回數據
Comout(0xA5);
Rev_COM_data[0]=0;
Rev_COM_data[1]=0;
// }
}
}
}
void Timer0() interrupt 1 using 1
{
TH0 = 0X99;
TL0 = 0x99;
TIME_counter++;
if(TIME_counter>=254)
{
TIME_counter=0;
STATE_ID3=!STATE_ID3;
}
}
void Timer1() interrupt 3 using 2
{
TH1 = 0X00;
TL1 = 0x00;
TIME_counter1++;
TIME_counter2++;
if(TIME_counter1>=254)
{
TIME_counter1=0;
STATE_ID4=!STATE_ID4;
}
}
//void Timer2( ) interrupt 5 using 1
// {
// RCAP2H=0x00;
// RCAP2L=0x00; //初步設定波特率為9600
// STATE_ID4=!STATE_ID4;
// TF2=0;
// }
void CAN(void) interrupt 0 using 0
{
SHANGDIAN_ID1=!SHANGDIAN_ID1;
}
/*串口中斷接收程序此程序中需要處理即對過來的數據進行軟件濾波及信息分析*/
void ComInINT(void) interrupt 4 using 3
{
if(RI)
{unsigned char astring;
RI = 0; //RI清零
// ES=0;
astring= SBUF;
STATE_ID2=!STATE_ID2;
if(astring==0xb5)
{Rev_COM_data[pointer++]=astring;
Com_Begin_bz=1;
// txsjjs=10; //根據定時周期長短來定義初值
}
else
{ if(Com_Begin_bz==1)
{
Rev_COM_data[pointer++]=astring;
}
}
if(pointer>=12)
{pointer=0;
Com_Begin_bz=0;
}
// ES=1;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -