找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3479|回復(fù): 2
收起左側(cè)

求助!求大神幫忙把一段匯編語言翻譯為C語言!

[復(fù)制鏈接]
ID:50123 發(fā)表于 2013-5-8 09:43 | 顯示全部樓層 |閱讀模式

這是段直流電機閉環(huán)調(diào)速的程序,求大神幫忙!跪謝。!

ORG    0000H
SJMP  DISPLAY
ORG   0003H  
LJMP  BUTTON                ;  外部0中斷入口地址
ORG   000BH
LJMP  DINGSHI                ;  定時中斷T0入口地址
RS    EQU    P3.0
RW    EQU    P3.1
E     EQU    P3.4
ORG    0030H                 ;  此次直流電機的設(shè)計以LCD字符夜晶的
                              ;  顯示程序為主程序
DISPLAY: 
SETB   EA                   ;  打開中斷總開關(guān)
SETB   EX0                  ;  打開外部中斷0開關(guān)
SETB   IT0                   ;  打開外部中斷0下降沿觸發(fā)
MOV    TMOD,#01H          ;  設(shè)置定時工作方式
MOV    TL0,#0FFH           ;  設(shè)置定時初值
MOV    TH0,#0FFH
SETB  ET0                   ;  打開定時中斷T0開關(guān)  
CLR   P0.5        
CLR   P0.6
CLR   P0.7
SETB  TR0                   ;  定時器T0開始定時
MOV   DPTR,#TAB            ;  夜晶顯示的字符首地址
MOV   R0,#00H               ;  脈寬的初值
MOV   R1,#16                 ;  "SET SPEED PLEASE"的字符個數(shù)
MOV   R3,#00H
MOV   R4,#00H
LP9:
LCALL CHUSHI
LP2:
ACALL BUSY
MOV   A,#00H
MOVC  A,@A+DPTR
MOV   P1,A
ACALL DATAS
INC   DPTR 
DJNZ  R1,LP2 
LP3:
CJNE  R3,#00H,LP4
CJNE  R4,#00H,LP4
SJMP  LP3 
LP4:  MOV   R7,#00H         ;  中斷的標(biāo)志
MOV   R5,#09H               ;  CURRENT : 的字符個數(shù)
ACALL BUSY
MOV   P1,#0C0H
ACALL ENABLE
MOV   DPTR,#MMTAB
ACALL BUSY
LP5:   
MOV   A,#00H
MOVC  A,@A+DPTR
MOV   P1,A
INC   DPTR
ACALL DATAS
ACALL BUSY
DJNZ  R5,LP5  
MOV   DPTR,#STAB
MOV   A,R2
MOV   P1,A
ACALL DATAS
ACALL BUSY
MOV   A,R3                  ;  顯示速度的十位
MOVC  A,@A+DPTR
MOV   P1,A
ACALL DATAS
ACALL BUSY
MOV   A,R4                   ;  顯示速度的個位
MOVC  A,@A+DPTR
MOV   P1,A
ACALL DATAS                 ;  使夜晶始終顯示當(dāng)前電機的速度
LP8:                        
CJNE   R7,#00H,LP7           ;  速度不變時等待
LJMP  LP8                    ;  速度變時重新讀入速度
LP7:
SJMP  LP4
CHUSHI:                      ;  使夜晶顯示的一些初始設(shè)置
ACALL BUSY            
MOV   P1,#00000001B         ;  清屏并光標(biāo)復(fù)位
ACALL ENABLE        
ACALL BUSY
MOV   P1,#00111000B         ;  設(shè)置顯示模式:8位2行5×7點陣
ACALL ENABLE
ACALL BUSY
MOV   P1,#00001111B         ;  顯示器開、光標(biāo)開、光標(biāo)允許閃爍
ACALL ENABLE
ACALL BUSY
MOV   P1,#00000110B         ;  文字不動,光標(biāo)自動右移
ACALL ENABLE
ACALL BUSY
MOV   P1,#80H               ;  寫入顯示起始地址
ACALL ENABLE         
RET
ENABLE:                     ;  寫入控制命令的子程序
SETB  E
CLR   RS
CLR   RW
CLR   E
RET
DATAS:                      ;  寫入數(shù)據(jù)子程序
SETB  E
SETB  RS
CLR   RW
CLR   E
RET
BUSY:                       ;  準(zhǔn)備寫入數(shù)據(jù)
CLR   E
MOV   P1,#0FFH
CLR   RS
SETB  RW
SETB  E
JB    P1.7,BUSY
RET
ORG 2000H
DINGSHI:                    ;  定時中斷服務(wù)程序
CPL P0.7    
JNB P0.7,Z1                  ;  周期一定
MOV A,#0FFH
SUBB A,R0      
MOV TH0,A
SETB TR0
RETI
Z1:  MOV TH0,R0             ;  脈寬
SETB TR0
RETI  
BUTTON:                     ;  從控制鍵盤中讀取操作命令
PUSH ACC          
CLR EX0
CLR EA
INC  R7   ;
MOV A,#0FFH
MOV P2,A
MOV A,P2
JNB ACC.0,AA0   
JNB ACC.1,KK0
JNB ACC.2,ZZ
JNB ACC.3,FF
JNB ACC.4,WW0
AJMP QQ
AA0:   CJNE R0,#0FFH, AA1     ;  加速操作
AJMP QQ 
AA1:   MOV A,R0
ADD A,#5
MOV R0,A
AJMP QQ
KK0:   CJNE R0,#00,MM        ;  減速操作
AJMP QQ 
MM:    MOV A,R0
SUBB A,#5
MOV R0,A
AJMP QQ
QQ:    MOV A,R0         
MOV B,#5         
DIV AB
MOV B,#10
DIV AB
MOV R3,A
MOV R4,B
SETB EX0
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
SETB  EA
POP  ACC
RETI
ZZ:    SETB P0.5               ;  正轉(zhuǎn)操作
CLR  P0.6 
MOV  R2,#2BH                 ;  正轉(zhuǎn)標(biāo)志 "+"
LCALL DELAY
LCALL DELAY
LCALL DELAY
SETB EX0
SETB  EA
POP  ACC
RETI
FF:    CLR P0.5                 ;  反轉(zhuǎn)操作 
SETB P0.6
MOV  R2,#2DH                  ;  反轉(zhuǎn)標(biāo)志 "-"
LCALL DELAY
LCALL DELAY
LCALL DELAY
SETB EX0
SETB  EA
POP  ACC
RETI
WW0:    CLR P0.5               ;  停止操作
CLR P0.6
LCALL DELAY
LCALL DELAY
LCALL DELAY
SETB EX0
SETB  EA
POP  ACC
RETI
DELAY:                          ;  延時子程序
MOV R5,#0E0H
MM0:   MOV R6,#30H   
MM1:   DJNZ R6,MM1
DJNZ R5,MM0
RET
TAB:   DB  53H,45H,54H,20H   
DB  53H,50H,45H,45H              ;  "SET SPEED PLEASE" 代碼
DB  44H,20H,50H,4CH
DB  45H,41H,53H,45H
STAB:   DB  30H,31H,32H,33H
DB  34H,35H,36H,37H              ;  "0,1,2,3,4,5,6,7"  代碼
DB  38H,39H,41H,42H              ;  "8,9,A,B,C,D,E,F"
DB  43H,44H,45H,46H
MMTAB:   DB  43H,4FH,52H,52H
DB  45H,4EH,54H,20H              ;  " CURRENT : "  代碼
DB  3AH
END

回復(fù)

使用道具 舉報

ID:7485 發(fā)表于 2013-5-8 13:07 | 顯示全部樓層

為什么呢?

 

匯編程序的代碼效率、執(zhí)行速度、時間的精確度都不是c語言能比的。

 

但是由于其編寫存在一定的難度,沒有c語言顯得簡易。

 

但是既然匯編程序已經(jīng)編寫好了,不存在編寫的問題了,為什么要走回頭路呢??

 

如果想作為一個模塊插入其他工程中,也一點問題都沒有!!有人說匯編語言不易實現(xiàn)模塊化(甚至有些教程也如是說),那是瞎說!

 

看看有些工程包含的.A51或.asm就知道了。

 

其實匯編模塊的調(diào)用和c語言模塊的調(diào)用沒多少不同。

[此貼子已經(jīng)被作者于2013-5-8 13:10:48編輯過]
回復(fù)

使用道具 舉報

ID:50123 發(fā)表于 2013-5-8 13:28 | 顯示全部樓層

 這個程序要給別人看,C語言更直觀,別人容易讀懂。  大神,求幫忙。

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表