回 帖 发 新 帖 刷新版面

主题:[求助]帮忙::把下面的汇编程序翻译成C语言程序

要翻译的汇编程序:
ST_ADDR  EQU  4000H
PORT      EQU  1B20H
           ORG ST_ADDR
           LJMP MAIN
           ORG ST_ADDR+03H           ;外中断0的中断向量
           LJMP INTX0
           ORG ST_ADDR+30H
MAIN:     MOV R0,#50H                 ;存数RAM的首地址
           MOV R1,#8                    ;转换数据的个数
           SETB EA                      ;允许中断
           SETB EX0                     ;允许外中断
           SETB IT0
           MOV DPTR,#PORT
           MOV A,#0                     ;0可以为任意数,取得是这一个动作
           MOVX @DPTR,A               ;启动ADC0809开始转换
LOOP:     NOP
           CJNE R1,#0,LOOP               ;还未转换完8个数据,继续
ST:        SJMP ST                        ;主程序结束
INTX0:    CLR EA                         ;中断服务程序
           MOVX A,@DPTR                ;取出服务程序
           MOV P1,A                      ;送到P1口显示
           MOV @R0,A                    ;存储数据
           INC R0
           DEC R1
           CJNE R1,#0,CON                 
           SJMP EXIT
CON:      MOV A,#0                       ;重新启动
           MOVX @DPTR,A                 ;启动下一次转换
SETB EA                        ;又把中断打开
EXIT:      RETI                            从中断返回
           END

帮帮忙啊



参考:
下面是一个汇编,一个C语言程序,两个是实现同一功能的,希望可以给你一些帮助和提示
实验程序如下(汇编):
ORG  4000H
LJMP  MAIN
ORG  4100H
MAIN :MOV  SP,#60H
      MOV   A,#24H                ;送隔2个亮控制字
      SETB   C
L0:   MOV   P1,A                   ;送P1口
      ACALL  DL                   ;延时
      RRC    A                     ;右移
      AJMP   L0                    ;循环点亮
DL:   MOV   R7,#0A3H              ;延时
DL1:  MOV   R6,#0FFH
DL2:  DJNZ   R6,DL2
      DJNZ   R7,DL1
      RET

与它对应的C语言程序如下:
#pragma db code
#include<reg51.h>

Void delay(void);
Void main()
{
delay() ;
  do{
     P1=0x24;                 /*置P1口状态为00100100*/
     delay();                   /*延时*/
     P1= 0x92;                 /*置P1口状态为10010010*/
     delay();                   /*延时*/
     P1=0x49;                  /*置P1口状态为01001001*/
     delay();                   /*延时*/
     }while(1);                 /*使得永远为真*/
}

Void delay()
{
int x=20000;
  do{x=x-1;
}while(x>1);
}


[em1]

回复列表 (共1个回复)

沙发


高手飘过

我来回复

您尚未登录,请登录后再回复。点此登录或注册