导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51编程:再次请教混合编程问题[windowswp98]

 *第2293篇: C51编程:再次请教混合编程问题

  
楼 主:windowswp98 2002年2月8日14:04
 C51编程:再次请教混合编程问题
上次经过大虾门的热心帮助,受益非浅,但是我在进行软件防真时,程序会死机。再次请各位大
虾指点一、二,谢谢了
程序在调用汇编子程序时会死机,
死机时执行代码为:003EH F6     MOV   @R0, A
                  003FH D8FD   DJNZ  R0, 003EH
主程序:
#include "reg51.h"
#define uint unsigned int
extern uint Left(uint temp); //申明函数头
void Delay(uint i) //延时程序
{ uint j;
for(;i>0;i--)
for(j=0;j<120;j++)
{;}
}
void main()
{ uint led=0x55;
while(1)
{ P1=Left(led);//调用函数,实现左移
Delay(100); //延时
}
}
汇编子程序:
PUBLIC _Left
_Left: MOV A,R7 ;第一个参数在R7中
RL A
MOV R7,A ;返回值也在R7中
RET
END
主程序汇编代码:
0000H 02003B LJMP  003BH
0003H 22     RET
0004H D3     SETB  C
0005H EF     MOV   A, R7
0006H 9400   SUBB  A, #00H
0008H EE     MOV   A, R6
0009H 9400   SUBB  A, #00H
000BH 4015   JC    0022H
000DH E4     CLR   A
000EH FD     MOV   R5, A
000FH FC     MOV   R4, A
0010H 0D     INC   R5
0011H BD0001 CJNE  R5, #00H, 0015H
0014H 0C     INC   R4
0015H ED     MOV   A, R5
0016H 6478   XRL   A, #78H
0018H 4C     ORL   A, R4
0019H 70F5   JNZ   0010H
001BH EF     MOV   A, R7
001CH 1F     DEC   R7
001DH 70E5   JNZ   0004H
001FH 1E     DEC   R6
0020H 80E2   SJMP  0004H
0022H 22     RET
0023H 750800 MOV   08H, #00H
0026H 750955 MOV   09H, #55H
0029H AF09   MOV   R7, 09H
002BH AE08   MOV   R6, 08H
002DH 120000 LCALL 0000H
0030H 8F90   MOV   P1, R7
0032H 7F64   MOV   R7, #64H
0034H 7E00   MOV   R6, #00H
0036H 120004 LCALL 0004H
0039H 80EE   SJMP  0029H
003BH 787F   MOV   R0, #7FH
003DH E4     CLR   A
003EH F6     MOV   @R0, A
003FH D8FD   DJNZ  R0, 003EH
0041H 758109 MOV   SP, #09H
0044H 020023 LJMP  0023H
0047H FF     MOV   R7, A
  
2楼:zhengxiaming 2002年4月27日16:26
 混合编程
兄弟,目前我必须在C51中调用汇编程序,可是是一段中断服务程序,外部中断收发数据,
待发送的数据在发送中断前已经组织好,我怎么将这些数据给调用的汇编程序?接收来的数
据我怎么取出?
比如被调用的汇编程序名为:PLC,那么我首先要在汇编文件的开头作如下说明:
PUBLIC _PLC
_PLC:汇编语句
(请问这部分有无错误?)
然后我在C51程序开头做申明extern void PLC;
接着做如下调用:
void int1(void) interrupt 2 using 1
{
     PLC();
    (其他相关工作,如数据处理等)
}
(请问这部分有无错误?)
本人十分急,请各位高手朋友赐教,小弟在此先谢谢了!
  
3楼:zhengxiaming 2002年4月27日17:03
 程序死掉
按照这样做编译通过,但是程序运行死掉
 死时执行:1511H F4   CLR A
           1512H F6   MOV @R0,A
           1513H D8FD DJNZ R0,1512H
     请赐教,谢谢!

>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:初学者:请大家介绍一些较好的外国论坛

[下一篇主题]:硬件:寻找MC145447