难搞。。。。 2021-12-10 22:13 采纳率: 0%
浏览 36

(汇编)用proteus仿真做单片机的追光系统,现遇到了关于用ADC0832进行AD转换汇编代码太长,导致步进电机不能很好的转动的问题

请大家帮忙看下,我的程序和仿真有什么问题以及可以改进的地方,谢谢了

这个是仿真原理图

img

代码如下,主要问题就是由于我写的AD转换汇编代码太长,导致我无法减小定时器0的定时时间,导致定时器0的中断程序控制下的步进电机无法实现正常转动,就是反转的时候只能反转零点几度,然后就又正转了。晶振是12MHz的,步进电机准备使用28BYJ-48。


   org   0000h
      jmp   MAIN
      ORG    000BH
      LJMP    QU


      org   0030h
MAIN:MOV        TMOD,#22H
     MOV         TH0,#038H
     MOV         TL0,#038H
     MOV        TH1,#0ECH
     MOV        TL1,#0ECH
     SETB        ET0
     SETB        EA
     SETB        TR1
     SETB        TR0
ACT:MOV        A,#00H
     CLR        C
     MOV        R0,#8
     SETB        TR0
     CLR        P1.0
     SETB        P1.1
     SETB        P1.2
     JNB        TF1,$
     CLR        P1.1
     JNB        TF1,$
     SETB        P1.1
     JNB        TF1,$
     CLR        P1.1
     CLR        P1.2
     JNB        TF1,$
     SETB        P1.1
     JNB        TF1,$
     CLR        P1.1
     SETB        P1.2
QU1: JNB        TF1,$
     SETB        P1.1
     MOV        C,P1.3
     RLC        A
     JNB        TF1,$
     CLR        P1.1
     DJNZ        R0,QU1
     SETB        P1.0
     CLR        TR1
     MOV        R1,A
     MOV        A,#00H
     MOV        R0,#8
     MOV        R5,#3
     SETB        TR1
     CLR        P1.0
     SETB        P1.1
     SETB        P1.2
QU2: JNB        TF1,$
         CLR        P1.1
     JNB        TF1,$
     SETB        P1.1
     DJNZ        R5,QU2
QU3: SETB        P1.1
         MOV        C,P1.3
     RLC        A
     JNB        TF1,$
     CLR        P1.1
     DJNZ        R0,QU3
     SETB        P1.0
     CLR        TR1
     MOV        R2,A
     MOV        P2,R2
     MOV        P3,R1
     MOV        B,R1
     MOV        A,R2
     CLR        C;1
     SUBB        A,B;1
     JZ            TON;2
     JNC        BIG;2
     JC            SAM;2
     MOV        R3,#2
TON: MOV        R3,#0;1
    JNB            TF0,$
     LCALL        ACT    ;2
BIG:     MOV        R3,#1;1
     JNB        TF0,$
     LCALL        ACT    ;2
SAM:MOV        R3,#2;1
     JNB        TF0,$
     LCALL        ACT    ;2



     

QU:   MOV        A,#00H
     MOV        R0,#00H
          CJNE        R3,#1,BBB                
          MOV         DPTR,#STEP1                    
          SJMP         CCC            
BBB:  CJNE        R3,#2,EEE
       MOV         DPTR,#STEP2           
CCC:  MOVC         A,@A+DPTR                
          MOV         P0,A                    
      INC        A
          INC         R0                            
          CJNE         R0,#8,CCC            
          CLR          A                             
     RETI                 
EEE:  CJNE        R3,#0,RETURN
     JB            P1.4,$
RETURN:RETI
    
    
STEP1:  DB  01H,03H,02H,06H,04H,0CH,08H,09H 

STEP2:  DB  09H,08H,0CH,04H,06H,02H,03H,01H
  • 写回答

1条回答 默认 最新

  • 老皮芽子 2021-12-11 08:51
    关注

    不是汇编代码太长,
    整个主代码问题比较多
    1:MAIN 没有初始化栈,就不能调用子程序和中断
    2:ACT 不是子程序入口,该代码没有 RET ,就不能用 LCALL 调用。比如你的代码中的 80,83,86 这 3 行代码执行会出错。
    3:中断程序没有保护中断用到的寄存器。会使主程序出现混乱。
    你的代码偶尔能执行是巧合,能正常多执行一段时间是侥幸。中断间隔短会更容易出错。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月10日

悬赏问题

  • ¥15 QT+Gstreamer框架开发视频采集,无法将waylandsink视频绑定qt窗口
  • ¥15 vs2010开发 WFP(windows filtering platform)异常
  • ¥30 8*8*25的矩阵和1*8*25的矩阵相乘
  • ¥15 Ubuntu20.04主机有两个网口,如何配置将其中一个网口用来接入外网,另一个网口用来给其他设备上网
  • ¥15 ml307r-dl如何实现录音功能
  • ¥15 付费100元 悬赏iphone 15pm 链接watch s7 移动一号双终端 下载不了esim文件解决办法?
  • ¥60 云南移动网络无法访问网站,但联通电信可正常访问
  • ¥15 寻找有过Qt加载网页项目经验的人
  • ¥15 我的电脑在最近一次windows更新后彻底打不开了,一按电源键只有这个提示,如何解决
  • ¥15 烝救者笔记本然后刷thinkbook笔记本的bios