#include <reg51.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P0^7;
sbit Plus_out = P2^0 ; //脉冲输出
unsigned int Per = 36 ,s_xian=4319;
bit dd=1,b_anjian=1,b_stop=0 , b_jia=0 , b_jian=0 , b_fas=0 ,b_a=0 ,b_b=0 ,b_c=0 ,b_d=0;
unsigned char decode[12]={1,2,2,2,0,2,2,2,1,1,1,1};
unsigned char init_timer[5][2]={{211,40},{250,96},{251,200},{254,152},{254,184}} ;//存放各种定时器初值
unsigned char rx_decode[24]={0} ,aaa=0,bbb=1;
void delayms(unsigned char ms); // 1ms延时程序
void INT_0( void ) ; // 外部中断0服务程序
//unsigned int measure ( void ); //测量一次正脉冲宽度
void Timer0_IN(void) ;
void Timer1_IN(void) ;
void send()
{
int i,j;
TMOD = 0x11 ; //T1、T0定时方式1,定时器,GATE置0
ET0 = 1 ;
ET1 = 1 ; //开定时
PT1 = 1 ; //T1定时中断优先级高
// 外部中断设置
EA = 1 ; //开总中断
Plus_out = 0 ; //
for( i = 0 ; i <12 ; i++ ) //转换编码高:11 , 低:00 , 高阻:01;
{
if( decode[i] == 1 )
{ rx_decode[2*i] = 1;
rx_decode[2*i+1] = 1 ;
}
else if( decode[i] == 2 )
{
rx_decode[2*i] = 0;
rx_decode[2*i+1] = 1 ;
}
else
{
rx_decode[2*i] = 0;
rx_decode[2*i+1] = 0 ;
}
}
for( j = 0 ; j<4 ; j++)
{
TH1 = init_timer[0][0] ;
TL1 = init_timer[0][1] ; //启始码的周期为128a;同步码
TH0 = init_timer[4][0] ;
TL0 = init_timer[4][1] ; //同步码的正脉冲宽度,4a。
TR0 = 1 ;
TR1 = 1 ; //启动定时器
F0 = 1 ; //标志置位
Plus_out = 1 ; //
for( i = 0 ; i < 25 ; i++ )
{
while( F0 == 1 ) ; //等待TO中断,正脉宽
if ( i != 24 )