完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include #include #include #define uchar unsigned char #define uint unsigned int unsigned int rec_data_len_uart=0; //标记Buffer_Uart0接收数组 unsigned char idata Buffer_Uart0_Rec[100]; //Uart0中断接收数组 #define V_TH0 0XFF #define V_TL0 0XA4 #define V_TMOD 0X01 ***it LED=P1^0; ***it DOUT=P2^0; ***it P14=P1^4; ***it P13=P1^3; ***it LED8=P1^7; unsigned int ZKB1=5,ZKB2; void init_sys(void) { TMOD=V_TMOD; TH0=V_TH0; TL0=V_TL0; TF0 = 0; TR0=0; ET0=1; EA=1; } void Delay5Ms(void) { unsigned int TempCyc = 1000; while(TempCyc--); } void delay(void) { uchar m,n,s; for(m=20;m>0;m--) for(n=20;n>0;n--) for(s=248;s>0;s--); } //注意,无论接收到信号还是发送完信号,都会进中断服务程序的 /*初始化程序(必须使用,否则无法收发),次程序将会使用定时器1*/ void SerialInti()//初始化程序(必须使用,否则无法收发) { TMOD=0x20;//定时器1操作模式2:8位自动重载定时器 #ifdef FOSC_12M //在这里根据晶振大小设置不同的数值初始化串口 TH1=0xf3;//装入初值,波特率2400 TL1=0xf3; #else TH1=0xfd;//装入初值,波特率9600 TL1=0xfd; #endif //end of SOC_12M TR1=0;//打开定时器 SM0=0;//设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制) SM1=1;//(同上)在此模式下,定时器溢出一次就发送一个位的数据 REN=1;//串行接收允许位(要先设置sm0sm1再开串行允许) EA=1;//开总中断 ES=1;//开串行口中断 } unsigned char hand(unsigned char *ptr) { if(strstr(Buffer_Uart0_Rec,ptr)!=NULL) return 1; else return 0; } void clear_rec_data() { uchar i,temp_len; temp_len=strlen(Buffer_Uart0_Rec); if(temp_len>100) { temp_len=100; } for(i=0;i Buffer_Uart0_Rec=' |