shen168 发表于 2024-11-21 22:47:10

请帮忙看看,在600us宽度时里面填数就无法编译,KEIL,应该还是语法不对。请帮忙指正。

#include "stc8g.h"
#include <intrins.h>

sbitLED=P5^4;//指示灯
sbitIR=P5^5;   //红外发射
sbitsignal_input=P3^3;//接收信号
sbitoutput_control=P3^2; //输出位置

unsigned int i;
void send_Ir(void);
void no_send_Ir(void);
void send_rc5_0(void);
void send_rc5_1(void);
void Timer1_Init(void)       //定时器1,定时8.77us,频率11.0592MHZ
{
        AUXR |= 0x40;                       
        TMOD &= 0x0F;                       
        TL1 = 0x9B;                       
        TH1 = 0xFF;                               
        TF1 = 0;                               
        TR1 = 1;       
}
void timer1_delay_8_77us(void)//定时8.77us
{
TF1 = 0;
while(!TF1);
TR1 = 0;
TF1 = 0;
}
void send_Ir(void)//38KHZ的频率   一个周期26.3us
{
       while(i--)
       {
       IR=1;
       timer1_delay_8_77us();
IR=0;
       timer1_delay_8_77us();
       timer1_delay_8_77us();
       }
}
void no_send_Ir(void)
{
       while(i--)
       {
       IR=0;
       timer1_delay_8_77us();
       timer1_delay_8_77us();
       timer1_delay_8_77us();
       }
}
void send_rc5_0(void)//低电平宽度600us
{

        send_Ir();
no_send_Ir();
       
}
void send_rc5_1(void)//高电平宽度600us
{
        send_Ir();
no_send_Ir();
        }
void ir_send_pulse(void)//输出高低一个周期的高低脉冲
{
send_rc5_0();
send_rc5_1();
}

void main()
{
P3M0 &= ~0x0f;
P3M1 &= ~0x0f; //P3.0-3.3引脚为准双向口模式
        P5M0 |=0x30;                //P5.4引脚为推挽输出模式
        P5M1 &= ~0x30;
LED=0;
        output_control=0;
        while(1)
        {
        if(signal_input==0)//判断有没有接收到红外信号
        {
        output_control=1; //输出高电平
        }
        else
        {
        output_control=0; //输出低电平
        }
        if(P32=1)
        {
        LED=1;//开灯
        }
        else
        {
        LED=0; //关灯
        }
        ir_send_pulse();   //发射高低电平
        }
       
}


邮箱 发表于 2024-11-21 23:19:18

      if(P32 == 1)
      {
            LED=1;//开灯
      }
页: [1]
查看完整版本: 请帮忙看看,在600us宽度时里面填数就无法编译,KEIL,应该还是语法不对。请帮忙指正。