共2条
1/1 1 跳转至页
这是我编的用光电编码器作传感器的控制实验板程序,请大家指教

问
我是一个初学者,我在做一个用光电编码器作传感器的控制实验板,我的想法是:单片机的运行速度要比物体位置变化的速度快得多,所以每隔一定时间读一下和编码器相连接的I/O口的状态,根据这次状态与前面状态的比较进行辨向计数。实验板中,P1.7P1.6是控制手柄的编码器接口,对应的计数器是R2,P1.5P1.4是舵机的编码器接口,对应的计数器是R3,P1.3=1舵机正转,P1.2=1舵机反转,我的这个程序有语法错误,不能通过汇编,请各路英雄斧正。
;************************************************************************
实验板程序
;************************************************************************
ORG 0000H
RESET:AJMP MAIN
MAIN:MOV SP,#60H ;堆栈指针SP=60H
MOV R2,#7FH ;以下各舵机置初值
MOV R3,#7FH
JB P1.7, PA1 ; 20H=P1.7
CLR 20H
AJMP PA2
PA1: SETB 20H
PA2: JB P1.6, PA3 ; 21H=P1.6
CLR 21H
AJMP PA4
PA3: SETB 21H
PA4: JB P1.5, PA5 ; 22H=P1.5
CLR 22H
AJMP PA6
PA5: SETB 22H
PA6: JB P1.4, PA7 ; 23H=P1.4
CLR 23H
AJMP WZJC
PA7: SETB 23H
WZJC:MOV 01H,R2 ;R1=R2 (控制手柄)
MOV C,20H
MOV 2CH,C ;2CH=20H
MOV C,21H
MOV 2DH,C
JB P1.7, PB1 ; 2EH=P1.7
CLR 2EH
AJMP PB2
PB1: SETB 2EH
PB2: JB P1.6, PB3 ; 2FH=P1.6
CLR 2FH
AJMP PB4
PB3: SETB 2FH
PB4: ACALL BXJS ;调用子程序BXJS
MOV R2,01H
MOV C,2CH
MOV 20H,C
MOV C,2DH
MOV 21H,C
SB2:MOV 01H,R3 ;R1=R3 (舵机位检)
MOV C,22H
MOV 2CH,C ;2CH=22H
MOV C,23H
MOV 2DH,C
JB P1.5, PB5 ; 2EH=P1.5
CLR 2EH
AJMP PB6
PB5: SETB 2EH
PB6: JB P1.4, PB7 ; 2FH=P1.4
CLR 2FH
AJMP PB8
PB7: SETB 2FH
PB8: ACALL BXJS ;调用子程序BXJS
MOV R3,01H
MOV C,2CH
MOV 22H,C
MOV C,2DH
MOV 23H,C
KZ:MOV A,R2
CJNE A,R1,BJ ;A不等于R1则转到BJ(比较)
CLR P1.3
CLR P1.2 ;停转
AJMP AG
BJ:SUBB A,R1 ;A—R1
JNC ZHENG ;A>R1则转到ZHENG
CLR P1.3
SETB P1.2 ;反转
AJMP AG
ZHENG:CLR P1.2
SETB P1.3 ;正转
AG:AJMP WZJC ;跳转到WZJC
BXJS子程序
功能:1、四倍频辨向计数:根据2CH,2DH,2EH,2FH内容辨别转动方向并计数,每项变化可以使计 数器(0区R1)加1或减1.
入口条件:指针(位变量)装入2CH,2DH,P口状态(位变量)装入2EH,2FH,位置数据装入0区R1,
出口信息:变化后的指针在2CH,2DH,位置数据在0区R1,
影响资源:位变量2CH,2DH,2EH,2FH, 0区R1,A。
BXJS;JB 2CH,Z1 ;2CH=1则转到Z1
JB 2DH,Z3 ;
JB 2EH,PK1
JNB 2FH,TC ;2FH=0则转到TC
DEC R1 ;R1—1
SETB 2DH ;2DH=1
AJMP TC ;跳转到TC
Z1:JB 2DH,Z2
JB 2FH,PK3
JB 2EH,TC
DEC R1
CLR 2CH ;2CH=0
AJMP TC
Z2:JNB 2EH,PK4
JB 2FH,TC
DEC R1
CLR 2DH
AJMP TC
Z3:JNB 2FH,PK2
JNB 2EH,TC
DEC R1
SETB 2CH
AJMP TC
PK1:INC R1 ;R1+1
SETB 2CH
AJMP TC
PK2:INC R1 ;R1+1
CLR 2DH
AJMP TC
PK3:INC R1 ;R1+1
SETB 2DH
AJMP TC
PK4:INC R1 ;R1+1
CLR 2CH
TC:RET ;子程序返回
END
答 1: 仔细看看逗号逗号用英文输入状态下的逗号输入,不要用中文输入法状态下输入
我看你贴出的程序里面的逗号有一些是在中文输入法状态下输入的... 答 2: 用计数器中断比较好 不会丢失脉冲。
;************************************************************************
实验板程序
;************************************************************************
ORG 0000H
RESET:AJMP MAIN
MAIN:MOV SP,#60H ;堆栈指针SP=60H
MOV R2,#7FH ;以下各舵机置初值
MOV R3,#7FH
JB P1.7, PA1 ; 20H=P1.7
CLR 20H
AJMP PA2
PA1: SETB 20H
PA2: JB P1.6, PA3 ; 21H=P1.6
CLR 21H
AJMP PA4
PA3: SETB 21H
PA4: JB P1.5, PA5 ; 22H=P1.5
CLR 22H
AJMP PA6
PA5: SETB 22H
PA6: JB P1.4, PA7 ; 23H=P1.4
CLR 23H
AJMP WZJC
PA7: SETB 23H
WZJC:MOV 01H,R2 ;R1=R2 (控制手柄)
MOV C,20H
MOV 2CH,C ;2CH=20H
MOV C,21H
MOV 2DH,C
JB P1.7, PB1 ; 2EH=P1.7
CLR 2EH
AJMP PB2
PB1: SETB 2EH
PB2: JB P1.6, PB3 ; 2FH=P1.6
CLR 2FH
AJMP PB4
PB3: SETB 2FH
PB4: ACALL BXJS ;调用子程序BXJS
MOV R2,01H
MOV C,2CH
MOV 20H,C
MOV C,2DH
MOV 21H,C
SB2:MOV 01H,R3 ;R1=R3 (舵机位检)
MOV C,22H
MOV 2CH,C ;2CH=22H
MOV C,23H
MOV 2DH,C
JB P1.5, PB5 ; 2EH=P1.5
CLR 2EH
AJMP PB6
PB5: SETB 2EH
PB6: JB P1.4, PB7 ; 2FH=P1.4
CLR 2FH
AJMP PB8
PB7: SETB 2FH
PB8: ACALL BXJS ;调用子程序BXJS
MOV R3,01H
MOV C,2CH
MOV 22H,C
MOV C,2DH
MOV 23H,C
KZ:MOV A,R2
CJNE A,R1,BJ ;A不等于R1则转到BJ(比较)
CLR P1.3
CLR P1.2 ;停转
AJMP AG
BJ:SUBB A,R1 ;A—R1
JNC ZHENG ;A>R1则转到ZHENG
CLR P1.3
SETB P1.2 ;反转
AJMP AG
ZHENG:CLR P1.2
SETB P1.3 ;正转
AG:AJMP WZJC ;跳转到WZJC
BXJS子程序
功能:1、四倍频辨向计数:根据2CH,2DH,2EH,2FH内容辨别转动方向并计数,每项变化可以使计 数器(0区R1)加1或减1.
入口条件:指针(位变量)装入2CH,2DH,P口状态(位变量)装入2EH,2FH,位置数据装入0区R1,
出口信息:变化后的指针在2CH,2DH,位置数据在0区R1,
影响资源:位变量2CH,2DH,2EH,2FH, 0区R1,A。
BXJS;JB 2CH,Z1 ;2CH=1则转到Z1
JB 2DH,Z3 ;
JB 2EH,PK1
JNB 2FH,TC ;2FH=0则转到TC
DEC R1 ;R1—1
SETB 2DH ;2DH=1
AJMP TC ;跳转到TC
Z1:JB 2DH,Z2
JB 2FH,PK3
JB 2EH,TC
DEC R1
CLR 2CH ;2CH=0
AJMP TC
Z2:JNB 2EH,PK4
JB 2FH,TC
DEC R1
CLR 2DH
AJMP TC
Z3:JNB 2FH,PK2
JNB 2EH,TC
DEC R1
SETB 2CH
AJMP TC
PK1:INC R1 ;R1+1
SETB 2CH
AJMP TC
PK2:INC R1 ;R1+1
CLR 2DH
AJMP TC
PK3:INC R1 ;R1+1
SETB 2DH
AJMP TC
PK4:INC R1 ;R1+1
CLR 2CH
TC:RET ;子程序返回
END
答 1: 仔细看看逗号逗号用英文输入状态下的逗号输入,不要用中文输入法状态下输入
我看你贴出的程序里面的逗号有一些是在中文输入法状态下输入的... 答 2: 用计数器中断比较好 不会丢失脉冲。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 |