打印

汇编嵌入C语言的程序为何编译出错?

[复制链接]
3986|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ningling_21|  楼主 | 2009-7-7 07:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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

相关帖子

沙发
lbx_00| | 2009-7-7 11:37 | 只看该作者

设置src模式

使用特权

评论回复
板凳
ningling_21|  楼主 | 2009-7-8 08:01 | 只看该作者

能否说的详细点

SRC是什么模式?

使用特权

评论回复
地板
zyboy| | 2009-7-8 08:53 | 只看该作者

解决方法

解决方法:在 Files Toolbar 中选中当前C51文件,点右键查看文件选项,将 Generate Assembler SRC File 与 Assemble SRC File 的勾选由灰色变为黑色

使用特权

评论回复
5
ningling_21|  楼主 | 2009-7-10 07:32 | 只看该作者

感谢楼上两位,但问题仍未解决

以前出现的那两个错误,变成了另外的很多个错误....

    MOV      P1,#0FEH
    SETB     PWM
    CLR      A
    MOV      e2,A
    MOV      e1,A
    LJMP     ?C0009

风扇.src(489): error A37: OPERATION INVALID IN THIS SEGMENT
风扇.src(490): error A37: OPERATION INVALID IN THIS SEGMENT
风扇.src(491): error A37: OPERATION INVALID IN THIS SEGMENT
风扇.src(492): error A37: OPERATION INVALID IN THIS SEGMENT
风扇.src(493): error A37: OPERATION INVALID IN THIS SEGMENT

好像每行都是错的....

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5013

主题

17744

帖子

51

粉丝