/*============================================================
= Q=P1^2; =
= H=P1^3; =
= Y=P1^4; =
= Z=P1^5; =
=============================================================*/
#include <reg52.h> //器件配置文件
#include <intrins.h>
/*
sbit Z=P3^2;
sbit Y=P3^3;
sbit Q=P3^4;
sbit H=P3^5;
*/
#define fx P2
typedef unsigned char u8;
u8 r_buf; //接收数据缓存
u8 flag_q,flag_h,flag_z,flag_y;
//22.1184MHz波特率初始化9600
void InitUART()
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFA;
TL1 = 0xFA;
TR1 = 1;
ES = 1;
EA = 1;
}
void SendOneByte(unsigned char c) //发送字符函数
{
SBUF = c;
while(!TI);
TI = 0;
}
void UARTInterrupt(void) interrupt 4 //串口接受字符
{
//while(1){
if(RI){
RI = 0;
switch(SBUF){
case 'Q': {flag_q=1;flag_h=0;/*if(flag_q==1&&flag_h==0)*/ {fx=0x10;SendOneByte('q');}}break;
/*
else if(r_buf=='H') {flag_h=1;flag_q=0;if(flag_h==1&&flag_q==0) {Q=0;H=1;Z=0;Y=0;CZ}}
else if(r_buf=='Z') {flag_z=1;flag_y=0;if(flag_z==1&&flag_y==0) {Z=1;Y=0;Q=0;H=0;SendOneByte('z');}}
else if(r_buf=='Y') {flag_y=1;flag_z=0;if(flag_y==1&&flag_z==0) {Z=0;Y=1;Q=0;H=0;SendOneByte('y');}}
else if(r_buf=='q') {flag_q=1;flag_z=1;if(flag_q==1&&flag_z==1) {Q=1;Z=1;Y=0;H=0;SendOneByte('q');}}
else if(r_buf=='h') {flag_y=1;flag_q=1;if(flag_q==1&&flag_y==1) {Q=1;Y=1;Z=0;H=0;SendOneByte('h');}}
else if(r_buf=='z') {flag_z=1;flag_h=1;if(flag_z==1&&flag_h==1) {Z=1;H=1;Y=0;Q=0;SendOneByte('z');}}
else if(r_buf=='y') {flag_y=1;flag_h=1;if(flag_y==1&&flag_h==1) {H=1;Y=1;Z=0;Q=0;SendOneByte('y');}}
*/
default: fx=0x00; break;
}
}
// }
}
//400ms延时
void Delay400Ms(void)
{
unsigned char TempCycA = 5;
unsigned int TempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--);
};
}
/********************************************************/
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
/*********************************************************/
void main(void)
{
fx=0x00;
InitUART();
while(1);
}
在串口中断里,io口无法操作,但是发送的数据可以收到。SendOneByte('z');就是这句是正常的
|