无线电爱好网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2605|回复: 0

[原创]请高手多多指点哦

[复制链接]
发表于 2004-11-24 21:22:06 | 显示全部楼层

[原创]请高手多多指点哦

我是一个单片机的初学者,这是我编写的一个程序,主要用来控制直流电动机的正转,反转以及加速,现在没发试验,不知道是否合理,望高手指点。
ORG    0000H
AJMP   MAIN
ORG    30H

MAIN:
MOV    P1,        #0FFH
MOV  SP,#5FH
LOOP:
ACALL  BUTTON
JNB    F0,        LOOP;如果无键按下继续
ACALL  DBUTTON        ;否则调用按钮处理程序
AJMP   LOOP
DELAY:
MOV    R7,         #100
D1:  MOV   R6,#100
DJNZ      R6,$
DJNZ      R7,D1
RET;     延时子程序
BDUTTON:
MOV    A,B
JB     ACC.2,  BUTTON1;分析按下的按钮,某位被按下,则该位为1
JB     ACC.3,  BUTTON2
JB     ACC.4,  BUTTON3
JB     ACC.5,  BUTTON4
RET


BUTTON:
CLR  F0
ORL  P1,#00111100B
MOV  A,P1
ORL  A,#11000011B
CPL  A
JZ   K_RET
ACALL  DELAY
ORL  P1,#00111100B
MOV  A,P1
ORL  A,#11000011B
CPL  A
JZ   K_RET
MOV  B,A
SETB  F0
RET


K_RET:
ORL  P1,#00111100B
MOV   A,B
ORL   A,#11000011B
CPL   A
JZ    K_RET1
AJMP  K_RET
K_RET1:
RET
RET


BOTTON1:
MOV    DPTR,#9000H;假设DAC0832的输入寄存器的地址为9000H
MOV    A,#80H
MOVX   @DPTR,A
ACALL   DELAY1
MOV   A,#0FFH
MOVX  @DPTR,A
ACALL   DELAY2
AJMP  BUTTON1
RET

BOTTON2:
MOV    DPTR,#9000H;假设DAC0832的输入寄存器的地址为9000H
MOV    A,#80H
MOVX   @DPTR,A
ACALL   DELAY3
MOV   A,#0FFH
MOVX  @DPTR,A
ACALL   DELAY4
AJMP  BUTTON2
RET

BOTTON3:
MOV    DPTR,#9000H;假设DAC0832的输入寄存器的地址为9000H
MOV    A,#80H
MOVX   @DPTR,A
ACALL   DELAY3
MOV   A,#00H;电动机反转
MOVX  @DPTR,A
ACALL   DELAY4
AJMP  BUTTON3
RET


DUTTON4:
RET
RET


DELAY1:
MOV R7,#10  
D1: MOV R6,#250    
D2: DJNZ R6,D2    
  DJNZ R7,D1     
  RET

DELAY2:
MOV R7,#20  
D1: MOV R6,#250    
D2: DJNZ R6,D2    
  DJNZ R7,D1     
  RET  

DELAY3:
MOV R7,#30 
D1: MOV R6,#250    
D2: DJNZ R6,D2    
  DJNZ R7,D1     
  RET
 
DELAY4:
MOV R7,#40 
D1: MOV R6,#250    
D2: DJNZ R6,D2    
   DJNZ R7,D1     
   RET  
       

END

发表于 2004-11-28 16:59:46 | 显示全部楼层

回复:[原创]请高手多多指点哦

思路清晰,还不错啊
发表于 2004-12-2 00:15:41 | 显示全部楼层

回复:[原创]请高手多多指点哦

请问一下:您这段程序中的“ORG direct "的这条指令是什么意思啊?多谢指点?
发表于 2004-12-2 10:25:23 | 显示全部楼层
     1.你的编译通过了吗?你要注意相关程序的编写必须在英文输入法下,编译器无法识别中文输入法下的符号,因为它占了两个字节,比如说逗号,冒号。还有不要在写程序时一下用英文输入一下用中文输入,有些双字节字符你看不到,但是并不表示它不存在,计算机同样会编译它并提示出错。
    2.还有就是重复定义,D1跟D2出现太多了吧,这都看不到?还有标识符要前后一致,是button还是botton?这样的问题太多了。
    3.你知道ORL这条指令的用途吗?从头到尾你的P1口都是高电平。
    4.你的程序中并未开中断,你干吗要设置SP?
    5.你的注释太少,人家又不知道硬件的结构,很难看懂你的程序写什么啦,不过不会达到你期望的结果。建议你重写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于本站|小黑屋|Archiver|手机版|无线电爱好网 ( 粤ICP备15040352号 ) 无线电爱好技术交流5 无线电爱好技术交流1无线电爱好技术交流9开关电源讨论群LED照明应用、电源无线电爱好技术交流4无线电爱好技术交流8无线电爱好技术交流10无线电爱好技术交流11

粤公网安备 44030702001224号

GMT+8, 2024-5-20 03:08 , Processed in 0.109200 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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