主题:[求助]帮忙::把下面的汇编程序翻译成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]
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]