sbit Irf=P3^2; //红外线输入引脚,可自定义 sbit PWM=P3^3; //PWM控制输出脚 sbit Led1=P3^7; //LED个位控制 sbit Led2=P3^5; //LED十位控制
/*******************红外线查询子程序*******************/ void Irda(void) { #pragma asm MOV R6,#10; SB: MOV R4,#19 ;//延时880微秒 D1: MOV R5,#19; DJNZ R5,$; DJNZ R4,D1;
JB P3.2,EXIT ;//延时882微秒后判断P3.2脚是为1 DJNZ R6, SB ;//在8820微秒内如P3.2为1就退出 JNB P3.2, $ ;//等待高电平避开9毫秒低电平引导脉冲
MOV R4,#10 ;//延时4740微秒 D2: MOV R5,#218; DJNZ R5,$; DJNZ R4,D2;//延时4.74毫秒避开4.5毫秒的结果码
MOV R1,#1AH ;//设定1AH为起始RAM区 MOV R2,#4 ;//接收从1AH到1DH,用于存放操作码和操作反码 PP: MOV R3,#8 ;//每组数据为8位
SS: JNB P3.2,$ ;//等待地址码第一位的高电平信号 MOV R4,#19 ;//延时880微秒 D5: MOV R5,#19; DJNZ R5,$; DJNZ R4,D5 ;//高电平开始后882微秒判断信号的高低电平 MOV C,P3.2 ;//将P3.2引脚此时的电平状态0或1存入C中 JNC TT ;//如果为0就跳转到TT
MOV R4,#2 ;//延时1000微秒 D6:MOV R5,#248; DJNZ R5,$; DJNZ R4,D6;//检测到高电平1的话延时1毫秒等待脉冲高电平结束 TT: MOV A,@R1 ;//将R1中地址的给A RRC A ;//将C中的值0或1移入A中的最低位 MOV @R1,A ; DJNZ R3,SS ;//接收满8位换一个内存 INC R1 ;//对R1中的值加1,换下一个RAM DJNZ R2,PP ;//接收完所有数据 EXIT: #pragma endasm }
/*延时程序,由x参数确定延迟时间*/ void msec(int x) // @ 11.0592 MHz { int j="0"; while(x>=0) { for (j=0;j<1350;j++); x--; if(!Irf) break; } }
void main(void)//主程序 { P1=0x41; Led1=0; Led2=0;
while(1) { if(!Irf) Irda(); } }
出错信息如下
compiling 风扇.c... 风扇.C(17): error C272: 'asm/endasm' requires src-control to be active 风扇.C(62): error C272: 'asm/endasm' requires src-control to be active |