找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[求助][讨论]我是菜鸟刚入门,请高手翻译下以下程序汇编代码。怎么样用c语言编译

[复制链接]
跳转到指定楼层
楼主
ID:11125 发表于 2009-4-13 05:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

老师发了个题目《基于单片机的远程控制系统的设计》
我在网上找了篇
好像是毕业论文很完整(原文地址——http://blog.sina.com.cn/s/blog_4cc9241a0100ba00.html)

1.1 单片机初始化

单片机的存储系统的分配利用在其工作过程中起非常大的作用,所以就必须对其进行必要的初始化。

程序代码:

(1)片内RAM初始化子程序

IBCLR: MOV  A,R0

MOV  R1,A

CLR  A

IBC1 :  MOV  @R1,A

INC  R1

DJNZ  R7,IBC1

RET

(2)片外RAM初始化子程序

EBCLR1: MOV  A,ADDPL

MOV  DPL,A

MOV  A,ADDPH

MOV  DPH,A

CLR  C

EBC11:   MOVX  @DPTR,A

INC  DPTR

DJNZ  R7,EBC11

RET

(3)片外RAM初始化子程序(双字节单元)

EBCLR2: MOV  A,ADDPL

MOV  DPL,A

MOV  A,ADDPH

MOV  DPH,A

MOV  A,R7

JZ  EBC21

INC  R6

EBC21:   CLR  A

MOVX  @DPTR,A

INC  DPTR

DJNZ  R7,EBC21

DJNZ  R6,EBC21

RET

1.2 振铃计数模块

本单元是通过计数器T0的外部中断方式来计数的。

程序代码:

ORG  0090H

TT0: SETB 7DH

RETI

1.1 语音提示模块

本功能模块主要是产生信号提示音,方便不同的使用者。根据普通人耳的反应频率为20Hz至20KHz的范围,而CCITT规定的电话话音信号的频率范围是300Hz至3400Hz,所以在本功能单元的发声频率定为500Hz和1000Hz两种。

主要分为五种提示音:

1、一声低音,表示装置已经摘机,请输入密码,其参数:频率f=500Hz,延时t=0.5秒/声;

2、两声低音,表示密码已经通过,请选择电器,其参数:频率f=500Hz,延时t=0.5秒/声;

3、三声低音,表示电器已经选定,请控制(开/关),其参数:频率f=500Hz,延时t=0.5秒/声;

4、三声高音,表示密码输入错误,其参数:频率f=1000Hz,延时t=0.3秒/声;

5、一声高音,表示控制已经完成,其参数:频率f=1000Hz,延时t=0.3秒/声;

提示音发生是使用有限循环,反复使单片机的RXD口的电平反转,从而形成方波信号 。

子程序代码:

ORG 1100H

RING10:MOV  R6,#20           ;请输入密码,

RING11:MOV  R7,#20           ;500Hz,

RING12:LCALL  DL10            ;发出提示音,1

CPL  P3.0                ;延时0.5s

DJNZ  R7,RING12

DJNZ  R6,RING11

CLR  P3.0

RET

ORG  1150H

RING20:MOV R3,#03

RING21:MOV  R6,#20           ;选择电器,

RING22:MOV  R7,#20           ;500Hz,

RING23:LCALL  DL20            ;发出提示音2,

CPL  P3.0                ;延时0.3s

DJNZ  R7,RING23

DJNZ  R6,RING22

CLR  P3.0

MOV  R7,#200

RING24:LCALL  DL10

DJNZ  R7,RING24

DJNZ  R3,RING21

CLR  P3.0

RET

ORG  1200H

RING30:MOV  R3,#02

RING31:MOV  R6,#20           ;电器控制,

RING32:MOV  R7,#20           ;500Hz,

RING33:LCALL  DL10            ;发出提示音3,

CPL  P3.0                ;延时0.3s

DJNZ  R7,RING33

DJNZ  R6,RING32

CLR  P3.0

MOV  R7,#200

RING34:LCALL  DL10

DJNZ  R7,RING34

DJNZ  R3,RING31

CLR  P3.0

RET

ORG  1250H

RING40:MOV  R3,#03

RING41:MOV  R6,#20           ;输入的密码错误,

RING42:MOV  R7,#20           ;1000Hz,

RING43:LCALL  DL10            ;发出提示音4,

CPL  P3.0                ;延时0.3s

DJNZ  R7,RING43

DJNZ  R6,RING42

CLR  P3.0

MOV  R7,#100

RING44:LCALL  DL10

DJNZ  R7,RING44

DJNZ  R3,RING41

CLR  P3.0

RET

ORG  1300H

RING50:MOV  R6,#40            ;操作完成,

RING51:MOV  R7,#20            ;1000Hz,

RING52:LCALL  DL20             ;发出提示音5,

CPL  P3.0                 ;延时0.3s

DJNZ  R7,RING52

DJNZ  R6,RING51

CLR  P3.0

RET

ORG  1500H

DL10: MOV  R5,#25;delay=1.25ms,f=500HZ,fosc=12MHz

DL12: MOV  R4,#2

DL11: DJNZ  R4,DL11

DJNZ  R5,DL12

RET

ORG  1600H

DL20: MOV  R5,#12;delay=0.625ms,f=1000HZ,fosc=12MHz

DL22: MOV  R4,#25

DL21: DJNZ  R4,DL21

DJNZ  R5,DL22

RET

ORG  1650H

DL30:MOV  R5,#50               ;delay=20ms

DL32:MOV  R4,#200

DL31:DJNZ  R4,DL31

DJNZ  R5,DL32

RET

 

1.1 密码检测模块

本系统密码校验的基本原理是:在系统初始化的时候把原始密码写入地址为30H开始的存储空间内,密码的位数“5”赋给R7。当系统摘机时,要求输入密码,单片机把解码后的数据(使用者输入的密码)存储在38H开始的存储空间内。然后单片机对两个存储地址的内容逐位进行比较,直到完全相等才能转到下一进程,有一位不同,程序就跳转到出错提示的子程序。

子程序代码:

ORG  0150H

HOKE:CLR  7DH

SETB  P3.1                     ;自动摘机

CLR  TR0                      ;启动中断T0

MOV  R2,#03H                ;输入密码三次错误

LCALL  RING10                ;请输入密码

IN:    CLR  7EH                      ;7EH置零

DTMF:MOV  R7,#5H                 ;输入密码位数5到R7

MOV  R1,#38H                 ;信号音

SETB  P1.4

SETB  P1.5

SETB  P1.6

SETB  P1.7

WAIT:JBC  7EH,CC                   ;等待中断INT0

LJMP  WAIT

CC:  MOV  R7,#5H                   ;输入的5位密码*****

MOV  R0,#30H                  ;调出原始密码

MOV  R1,#38H                  ;信号音

CMP:MOV  A,@R1

MOV  R4,A

CLR  C

MOV  A,@R1

SUBB  A,@R0                   ;比较密码

INC  R0

INC  R1

JZ  AAA                          ;OK,一位密码通过

LJMP  QQ

AAA:DJNZ  R7,CMP                  ;R7-1!=0

LJMP  LL                        ;密码通过

QQ: DJNZ  R2,IN1                   ;密码错误&R2!=0

LCALL  RING20

LJMP  STOP

IN1: LCALL  RING20                  ;密码错误,请重试!

LJMP  IN

 

1.1 密码修改模块

本系统是通过在线输入密码而改变特定存储器中的密码值的。

程序代码:

ORG  1700H

KEYIN:SETB  RS1                    ;当前工作寄存器第二工作区

CLR  RS0

ANL  A,#00H                  ;清零A寄存器

MOV  B,#05H

LCALL  RING10                 ;发提示音:输入密码***

MOV  R7,#5H

MOV  R1,#38H

WPIN:  JBC  7EH,READ                ;等待INT0中断

LJMP  WPIN

READ: MOV  R1,#38H

MOV  R0,#40H

MOV  R7,#05H

READ1:MOV  A,@R1

MOV  @R0,A

INC  R0

INC R1

DJNZ  R7,READ1              ;判断输入密码是否为5位,否

;跳转READ1

LCALL  RING10                 ;满5位,发提示音:再输入

;新密码

MOV  R7,#5H

MOV  R1,#38H

WRE:  JBC  7EH,KEYCMP             ;等待中断INT1

LJMP  WRE

KEYCMP:MOV  R6,#05H

MOV  R0,#40H

MOV  R1,#38H

KEYCP:MOV  A,@R0

CLR  C

SUBB  A,@R1                 ;A减((R1))

INC  R1

INC  R0

JZ  BBB                       ;A的内容如果为0,则跳转BBB

LJMP  LL

BBB:   DJNZ R6,KEYCP            ;R6减1不为0,则跳转KEYCP,

;即循环比较密码的五位

MOV  R1,#38H

MOV  R0,#30H

MOV  R6,#5H

KEYREIN:MOV  A,@R1

MOV  @R0,A

INC  R1

INC  R0

DJNZ:R6,KEYREIN                 ;R6减1不为0,则跳转,即循

;环比较密码的五位

LCALL  RING50               ;发提示音:新密码已经设置

LJMP  STOP

RET





汇编还没学过。就学了点C++麻烦高手们给看看
怎么用c语言来编译。。
谢谢啦
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:11125 发表于 2009-4-14 00:21 | 只看该作者
ziji dingge
回复

使用道具 举报

板凳
ID:14636 发表于 2009-6-24 15:13 | 只看该作者
ziji gaoding
回复

使用道具 举报

地板
ID:14775 发表于 2009-6-30 21:18 | 只看该作者
工程够大了,建议直接找c的例子
回复

使用道具 举报

5#
ID:16415 发表于 2009-8-26 17:12 | 只看该作者
哈哈偶原来一直用汇编,现在才开始用c,无能为力哦!
回复

使用道具 举报

6#
ID:15970 发表于 2009-8-26 19:12 | 只看该作者
学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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