#include <howevero.h>
//逻辑 #define FALSE 0 #define TRUE 1 #define H 1 #define L 0
//管脚定义 sbit std_cnt2 = p1^2; sbit std_cnt1 = p0^1; sbit std_cnt0 = p0^0; sbit std_cnt3 = p0^3;
//函数声明 void serial_init(void);//串口初始化 void serial_send(void);
//全局变量声明 unsigned int idata send_letter;
unsigned char data numberhigh,numberlow; int i=0; unsigned int data temp;
/************ 主函数**************************/ void main(void) { SP=0x60;
serial_init(); std_cnt0=0; std_cnt1=0; std_cnt2=0; std_cnt3=0;
while(i==0);//等待中断
/*发射波形*/ TH0=numberhigh; TL0=numberlow; TF0=0; TR0=1; while(1) { while(TF0==0); TH0=numberhigh; TL0=numberlow; std_cnt3=!std_cnt3; TF0=0;
}
}
/************ 串口初始化?*************************/ void serial_init() { SCON=0x50; //工作方式1,单机通讯,接收允许 TMOD=0x21; //方式1下波特率由SMOD和定时器1共同决定,定时器一工作在方式2下 TR0=0; // PCON=0x00; //PCON=0x00速度不加倍 TH1=0xFD; TL1=0xFD; //计数初值,晶振11.0592M,波特率9600, TR1=1; //启动定时器 ET0=0; EX0=1; ES=1; EA=1;
EX1=0;
PS=1; }
/************ 串口中断函数**************************/ void serial_receive(void) interrupt 4 using 1 {
RI=0; std_cnt3=0; //输出低电平(未发射方波时) for(temp=0;temp<2;temp++) //连续接收2个字节 { switch(temp) { case 0:numberhigh=SBUF;while(RI==0);RI=0;break;//给出定时器初值高八位,并等待下个串行中断 case 1:numberlow=SBUF;break; //给出定时器初值低八位,准备跳出中断 default:break; } } RI=0; i++; }
|