c语言改为汇编语言简单例题,求大神把汇编语言改成C语言

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

;====================================================

;主程序

;====================================================

ORG 0000H

AJMP MAIN

ORG 000BH

AJMP ITOP

ORG 1000H

MAIN: LCALL AJZCX

LCALL DACJ

LCALL XSZCX

LCALL PIDYS

;====================================================

;按键子程序

;====================================================

AJZCX: MOV DPTR,#BFFF H ;键盘地址BFFFH

MOVX A,@DPTR ;读键盘状态

ANL A,#0FH ;屏蔽高三位

MOV R3,A ;保存键盘状态

LCALL D10ms ;调用10ms子程序消抖

MOVX A,@DPTR ;再读键盘状态

ANL A,#0FH ;屏蔽高三位

CJNE A,R3,PASS ;两次结果不一样说明是抖动,转RETURN

KEY1: CJNE A,#1EH,RETURN ;K1键未按下,转RETURN

LJMP DOKEY1 ;是第1键按下,转键1处理子程序

KEY12: CJNE A,#1CH,KEY13 ;k1 K2键未按下,转KEY1,3处理子程序

LJMP DOKEY12 ;是k1 K2键按下,转k1 K2键处理子程序

KEY13: CJNE A,#1BH,KRETURN 未按下,转RETURN

LJMP PKEY2 ; 是k1 ;K3键按下,转k1 ;K3键处理子程序

KEY4: CJNE A,#07H, ; k1 ;K3键键未按下,转RETURN

RETURN:RET

DOKEY1: INC 00H

MOV R1,OOH

CJNE R1,#01H,CUNCHU

LJMP RETURN

DOKEY12:ADD A,#20H

DA A

DOKEY3:SUB A, #20H

DA A

CUNCHUW:MOV 02H,01H

CUNCHUS:MOV 03H,01H

RET

;====================================================

; 数据采集计算子程序

;====================================================

DRSJ: MOV R1, #06H ;A/D8路循环采样

MOV DPTR, #7FE3H

MOV R7, #08H

LOOP: MOVX @DPTR, A

MOV R6, #0AH

DLAY: NOP

NOP

NOP

DJNZ R6, DLAY

MOVX A, @DPTR

MOVX @R1, A

INC DPTR

INC R1

DJNZ R7, LOOP ;采样结束

ADD 06H, 07H

ADD 06H, 08H

ADD 06H, 09H

MOV R0, #04H

DIV 06H, R0

MOV 04H, 06H

ADD 0AH, 0BH

MOV 0AH, 0CH

MOV 0AH, 0DH

DIV 06H, R0

MOV 04H, 06H

RET

;====================================================

; 显示子程序

;====================================================

XSZCX: SHOW: MOV P2,#0FFH

MOV A,R1 ;R1中存放A/D转换后的数据

MOV B,#100

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P2,#11111011B

MOV P0,A

CALL DELAY

MOV A,B

MOV B,#10

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P2,#11111101B

MOV P0,A

CALL DELAY

MOV A,B

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P2,#11111110B

MOV P0,A

CALL DELAY

MOV P2,#0FFH

SETB P1.4

RET

;====================================================

延时间子程序

;====================================================

DELAY: MOV R3,#30

D1: MOV R4,#50

DJNZ R4,$

DJNZ R3,D1

RET

TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0A7H,0A1H,86H,8EH,0FFH

;====================================================

; PID运算输出控制子程序

;====================================================

GEC1 EQU 00H

GEC2 EQU 00H

MOV R0, #14H

MOV R0, 10%

05H>R0?

MOV GEC1, R0

MOV GEC2, 04H

LCALL A

B: MOV R0, #7FFFH ;D/A把信号转换成矩形波

LP: MOV A, #DATA1

MOVX @R0, A

LCALL DELAY1

MOV A, #DATA2

MOVX @R0, A

LCALL DELAY2

SJMP LP ;D/A信号转换结束

MOV GEC1, R0

MOV GEC2, 05H

LCALL A

LCALL B

RET

A: CONS0 EQU ? ;存放系数a0

CONS1 EQU ? ;存放系数a1

CONS2 EQU ? ;存放系数a2

SUB1 EQU ? ;存放偏差值e(k)

SUB2 EQU ? ;存放偏差值e(k-1)

SUB3 EQU ? ;存放偏差值e(k-2)

MID1 EQU ? ;存放乘积a0e(k)

MID2 EQU ? ;存放乘积a0e(k-1)

OUTP1 EQU ? ;存放U(k-1)

BACK: MOV A, GEC2

SUB A, GEC1 ;计算e(k)

MOV SUB1, A

MOV R1, CONS0 ;取a0

MUL R1, A ;a0e(k)放入R1

MOV MID1, R1 ;a0e(k)放入暂存单元

MOV A, SUB2 ;取e(k-1)

MOV R2, CONS1 ;取a1

MUL R2, A

MOV MID2, R2 ;a1e(k-1)放入暂存单元

MOV A, SUB3

MOV R3, CONS2 ;取a2

MUL R3, A

ADD R3, MID1

SUB R3, MID2

ADD R3, OUTP1

PUSH R3 ;输出量压栈

MOV A, SUB2

MOV SUB3, AL

MOV AL, SUB1

MOV SUB2, AL

JMP BACK

RET

;====================================================

; UC(k)运算子程序

;====================================================

ORG 22D0H

UCKPR: MOV FX, 00ACH

MOV GX, #003CH

MOVX USH,#04H ;设定ET(i)个数

MOV IX,#0004H

MOV TS,#4500H ;数据暂存区清0

MOVX AL,#00H

STB AL,[TS]

STB AL,[TS]

STB AL,[TS]

STB AL,[TS]

LOOP5: ADD FX, IX ;取系数a(i)存放地址

ADD GX, IX ;取ET(i存放地址

MOV BX, GX

LCALL FBMUL ;调用浮点数乘法子程序

MOV UT, #4200H

MOV TS, #4500H

MOV AX, UT

MOV BX, TS

LCALL FBADD ;调用浮点数加法子程序

MOV TS, #4500H

MOV TR, #4000H

MOVX DL, [TR]

STB DL, [TS]

MOVX DL, [TR] ;转移运算结果

STB DL, [TS]

MOVX DL, [TR]

STB DL, [TS]

MOVX DL, [TR]

STB DL, [TS]

DJNZ USH, LOOP5

MOV FX, #00BCH

MOV HX, #0030H

MOVX USH, #03H

MOV IX, #0004H ;设定UC(i)个数

LOOP6: ADD FX, IX ;取系数b(i)存放地址

ADD HX, IX ;取UC(i)存放地址

MOV AX, FX

MOV BX, HX

LCALL FBMUL ;调用浮点数乘法子程序

MOV UT, #4200H

MOV TS, #4500H

MOV AX, UT

MOV BX, TS

LCALL FBSUB ;调用浮点数加法子程序

MOV TS, #4500H

MOV TR, #4100H

MOVX DL, [TR] ;转移运算结果

STB DL, [TS]

MOVX DL, [TR]

STB DL, [TS]

MOVX DL, [TR]

STB DL, [TS]

MOVX DL, [TR]

STB DL, [TS]

DJNZ USH, LOOP6

MOV TS, #4500H

MOVX LL, [TS] ;存UC(i)个数

MOVX LH, [TS]

MOVX ML, [TS]

MOVX MH, [TS]

RET ;返回

;====================================================

; 报警子程序ALARM

;====================================================

ALARM:MOV A , R1

SUBB A , R2

RLC A

JB CY

LCALL FLASHI

LCALL SOUND

NEXT1 MOV A, R1

SUBB A,R5

RLC A

JNB CY,NEXT2

LCALL FLASHI

LCALL SOUND

NEXT2 RET

FLASH SETB P1.0

LCALL DELAY

CLR P1.0

LCALL DELAY

SOUND SETB P1.1

MOV R4 #64H 延时100ms

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值