找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2810|回复: 2
打印 上一主题 下一主题
收起左侧

求助!求大神帮忙把一段汇编语言翻译为C语言!

[复制链接]
跳转到指定楼层
楼主
ID:50123 发表于 2013-5-8 09:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

这是段直流电机闭环调速的程序,求大神帮忙啊!跪谢!!!

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                 ;  此次直流电机的设计以LCD字符夜晶的
                              ;  显示程序为主程序
DISPLAY: 
SETB   EA                   ;  打开中断总开关
SETB   EX0                  ;  打开外部中断0开关
SETB   IT0                   ;  打开外部中断0下降沿触发
MOV    TMOD,#01H          ;  设置定时工作方式
MOV    TL0,#0FFH           ;  设置定时初值
MOV    TH0,#0FFH
SETB  ET0                   ;  打开定时中断T0开关  
CLR   P0.5        
CLR   P0.6
CLR   P0.7
SETB  TR0                   ;  定时器T0开始定时
MOV   DPTR,#TAB            ;  夜晶显示的字符首地址
MOV   R0,#00H               ;  脉宽的初值
MOV   R1,#16                 ;  "SET SPEED PLEASE"的字符个数
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         ;  中断的标志
MOV   R5,#09H               ;  CURRENT : 的字符个数
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                 ;  使夜晶始终显示当前电机的速度
LP8:                        
CJNE   R7,#00H,LP7           ;  速度不变时等待
LJMP  LP8                    ;  速度变时重新读入速度
LP7:
SJMP  LP4
CHUSHI:                      ;  使夜晶显示的一些初始设置
ACALL BUSY            
MOV   P1,#00000001B         ;  清屏并光标复位
ACALL ENABLE        
ACALL BUSY
MOV   P1,#00111000B         ;  设置显示模式:8位2行5×7点阵
ACALL ENABLE
ACALL BUSY
MOV   P1,#00001111B         ;  显示器开、光标开、光标允许闪烁
ACALL ENABLE
ACALL BUSY
MOV   P1,#00000110B         ;  文字不动,光标自动右移
ACALL ENABLE
ACALL BUSY
MOV   P1,#80H               ;  写入显示起始地址
ACALL ENABLE         
RET
ENABLE:                     ;  写入控制命令的子程序
SETB  E
CLR   RS
CLR   RW
CLR   E
RET
DATAS:                      ;  写入数据子程序
SETB  E
SETB  RS
CLR   RW
CLR   E
RET
BUSY:                       ;  准备写入数据
CLR   E
MOV   P1,#0FFH
CLR   RS
SETB  RW
SETB  E
JB    P1.7,BUSY
RET
ORG 2000H
DINGSHI:                    ;  定时中断服务程序
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               ;  正转操作
CLR  P0.6 
MOV  R2,#2BH                 ;  正转标志 "+"
LCALL DELAY
LCALL DELAY
LCALL DELAY
SETB EX0
SETB  EA
POP  ACC
RETI
FF:    CLR P0.5                 ;  反转操作 
SETB P0.6
MOV  R2,#2DH                  ;  反转标志 "-"
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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2013-5-8 13:07 | 只看该作者

为什么呢?

 

汇编程序的代码效率、执行速度、时间的精确度都不是c语言能比的。

 

但是由于其编写存在一定的难度,没有c语言显得简易。

 

但是既然汇编程序已经编写好了,不存在编写的问题了,为什么要走回头路呢??

 

如果想作为一个模块插入其他工程中,也一点问题都没有!!有人说汇编语言不易实现模块化(甚至有些教程也如是说),那是瞎说!!

 

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

 

其实汇编模块的调用和c语言模块的调用没多少不同。

[此贴子已经被作者于2013-5-8 13:10:48编辑过]
回复

使用道具 举报

板凳
ID:50123 发表于 2013-5-8 13:28 | 只看该作者

 这个程序要给别人看,C语言更直观,别人容易读懂。  大神,求帮忙啊!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表