历史上的今天
返回首页

历史上的今天

今天是:2025年01月15日(星期三)

正在发生

2018年01月15日 | 单片机控制的遥控步进电机程序

2018-01-15 来源:eefocus

;遥控电机程序, 按遥控器0-9步进电机正转0-9步,按遥控器11-19步进电器分别反转
;0-9步,同时数码管分别显示当前的数字!

;***************************************************************************
org 00h
JMP MAIN
ORG 30H
MAIN:
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
START:
JB P3.7,$ ;等待遥控信号出现
SB:
MOV R4,#8 ;8毫秒为高电平错误
SBA:
MOV R5,#250
SBB:
JB P3.7,SXB1
DJNZ R5,SBB
DJNZ R4,SBA
MOV R4,#2
JMP SBC
SXB1:
MOV R5,#5
SXB2: ;去掉20US的尖峰干扰信号
JNB P3.7,SBB
DJNZ R5,SXB2
JMP START
SBC:
MOV R5,#250
SB1:
JB P3.7,SB2 ;2MS内不为高电平错误(监测9MS的低电平引导码)
DJNZ R5,SB1
DJNZ R4,SBC
JMP START
SB2: ;去掉20US募夥甯扇判藕?BR>MOV R5,#5
SB2_A:
JNB P3.7,SB1
DJNZ R5,SB2_A
MOV R4,#3
SB2_1:
MOV R5,#250
SB3: ;监测4.5MS高电平,如3MS内出现低电平错误
JNB P3.7,SXC
DJNZ R5,SB3
DJNZ R4,SB2_1
MOV R4,#2
JMP SB3_1
SXC: ;去掉20US的尖峰干扰信号
MOV R5,#5
SXC1:
JB P3.7,SB3
DJNZ R5,SXC1
JMP START
SB3_1: ;监测4.5MS高电平,如5MS内不为低电平错误
MOV R5,#250
SB3_2:
JNB P3.7,SB4
DJNZ R5,SB3_2
DJNZ R4,SB3_1
JMP START
SB4: ;去掉20US的尖峰干扰信号
MOV R5,#5
SB4_1:
JB P3.7,SB3_2
DJNZ R5,SB4_1
MOV R1,#1AH ;设定1AH为起始RAM区
MOV R2,#4
PP: MOV R3,#8
JJJJ:
MOV R5,#250
JJJJ2: ;1MS内不为低电平错误
JB P3.7,JJJJ3
DJNZ R5,JJJJ2
JMP START
JJJJ3:
LCALL YS1 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.7 ;将P3.7引脚此时的电平状态0或1存入C中
JNC UUU ;如果为0就跳转到UUU
MOV R5,#250
JJJJ4:
JNB P3.7,UUU
NOP
DJNZ R5,JJJJ4
JMP START
UUU: MOV A,@R1 ;将R1中地址的给A
RRC A ;将C中的值0或1移入A中的最低位
MOV @R1,A ;将A中的数暂时存放在R1中
DJNZ R3,JJJJ ;接收地址码的高8位
INC R1 ;对R1中的值加1,换成下一个RAM
DJNZ R2,PP ;接收完16位地址码和8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH的RAM中
;以下对代码是否正确和定义进行识别
MOV A,1AH ;比较高8位地址码
XRL A,#00000000B ;判断1AH的值是否等于00000000,相等的话A为0
JNZ EXIT ;如果不相等说明解码失败退出解码程序
MOV A,1BH ;比较低8位地址
XRL A,#11111111B ;再判断高8位地址是否正确
JNZ EXIT ;如果不相等说明解码失败退出解码程序
LCALL YS3
MOV A,1CH ;比较数据码和数据反码是否正确?
CPL A
XRL A,1DH ;将1CH的值取反后和1DH比较 不同则无效丢弃,核对数据是否准确
JNZ EXIT ;如果不相等说明解码失败退出解码程序
LCALL YS3
CLR P2.6 ;选中数码管
CLR P3.3 ;解码成功喇叭响?
AJMP BIJIAO
;判断在118毫秒内是否有连发码
AA: MOV R1,#25
XX: ACALL YS2
JNB P3.7,HH ;跳转到判断连发代码是否正确的程序段
DJNZ R1,XX
EXIT: ;对所有端口清零

AJMP START
;连发码判断程序段-----------
HH: MOV R6,#4
S: ACALL YS1 ;调用882微秒延时子程序
JB P3.7,EXIT ;延时882微秒后判断P3.7脚是否出现高电平如果有就退出解码程序
DJNZ R6, S ;重复4次,目的是确认连发码的低电平信号波形
JNB P3.7, $ ;等待高电?
LCALL YS3
AJMP AA

BIJIAO:
MOV R0,#18 ;一共18个按键
MOV DPTR,#TAB_REM ;遥控键值查表
LOOKUP_1:
MOV A,R0 ;查表偏移量
MOVC A,@A+DPTR
XRL A,1cH ;比较键值
JZ REM_BAK0 ;相等转移
DJNZ R0,LOOKUP_1 ;直到18个健比较完毕
JMP EXIT ;都不对退出
REM_BAK0: ;键值处理
MOV A,R0 ;R0
MOV R1,A ;
SUBB A,#9 ;如果大于9则反转并将值减去9
JC REM_BAK1 ;小余或等于9到正转
INC A ;加1
MOV R1,A ; 查显示码表
MOV DPTR,#TABLE1 ;
MOVC A,@A+DPTR
MOV P0,A ;送显示
CLR P2.6 ;开显示

REM_REV: ;反转程序
CALL REV
CALL delay ;转速
DJNZ R1,REM_REV ;转动的步数到了停止
JMP AA
REM_BAK1: ;正转程序
NOP
MOV A,R1 ;按键数值判断执
MOV DPTR,#TABLE1 ; 查显示码表
MOVC A,@A+DPTR
MOV P0,A ;送显示
CLR P2.6 ;开显示

REM_FOR: ;正转
CALL FOR
CALL DELAY
DJNZ R1,REM_FOR
JMP AA
for: mov r0,#00h ;正转到tab取码指针初值
for1:mov a,r0 ;取码
mov dptr,#table ;
movc a,@a+dptr
jz FOREXT ;是否到了结束码00h
cpl a ;把aCC反向
mov p1,a ;输出到p1开始正转
call delay ;转动的速度
inc r0 ;取下一个码
jmp for1 ;继续正转
rev:mov r0,#05h ;反转到tab取码指针初值
rev1:mov a,r0
mov dptr,#table ;取码
movc a,@a+table
jz FOREXT ;是否到了结束码00h
cpl a ;把acc反向
mov p1,a ;输出到p1开始反转
call delay ;转动的速度
inc r0 ;取下一个码
jmp rev1 ;继续反转
FOREXT:
RET

YS1: MOV R4,#20 ;延时子程序1,精确延时882微秒
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
RET
YS2: MOV R4,#10 ;延时子程序2,精确延时4740微秒
D2: MOV R5,#235
DJNZ R5,$
DJNZ R4,D2
RET
YS3: MOV R4,#2 ;延时程序3,精确延时1000微秒
D3:MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET

TAB_REM: ;遥控的键值
DB 00H
DB 10H,03H,01H,06H,09H,1DH,1FH,0DH,19H
DB 11H,15H,17H,12H,16H,4CH,40H,48H,04H

delay: mov r3,#40 ;步进电机的转速20ms
m3: mov r2,#248
djnz r2,$
djnz r3,m3
ret
TABLE1:db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h;数码管的码表
;0 1 2 3 4 5 6 7 8 9
table:
db 03h,09h,0ch,06h ;正转表
db 00 ;正转结束
db 03h,06h,0ch,09h ;反转
db 00 ;反转结束
end

推荐阅读

史海拾趣

Carlisle Interconnect Technologies公司的发展小趣事

1959年,对于Carlisle Interconnect Technologies来说是一个里程碑式的年份。这一年,公司正式成为Carlisle Companies Incorporated的一部分,这标志着公司从一个小型创业企业迈入了大型跨国公司的行列。这一转变为公司带来了更多的资源和机会,也使其能够更好地满足主要电子OEM的需求,专注于提供增值解决方案。

益升华(Essentra)公司的发展小趣事

益升华(Essentra)公司深知客户是企业发展的基石。因此,公司始终将客户服务放在首位,致力于为客户提供优质的产品和服务。公司建立了完善的客户服务体系,为客户提供从产品咨询、选购、安装到售后维护的全流程服务。同时,公司还积极开展客户回访和满意度调查活动,及时了解客户需求和反馈意见,不断改进产品和服务质量。这些努力使益升华(Essentra)公司赢得了客户的广泛赞誉和信任。

Autonics公司的发展小趣事

上世纪60、70年代,韩国经济蓬勃发展,工业自动化需求迅速增长,但传感器与控制仪表的国内市场仍是一片空白。Autonics的创始人看到了这个巨大的市场机会,于1977年创立了Autonics公司。公司初创时期,面临着资金短缺、技术落后等诸多挑战,但创始人凭借着对技术的执着追求和对市场的敏锐洞察,带领公司逐步走上正轨。

AverLogic公司的发展小趣事

除了关注业务发展外,AverLogic公司还积极履行企业社会责任,推动可持续发展。公司注重环保和节能,采用环保材料和生产工艺,减少对环境的影响。同时,公司还积极参与公益事业,为社会做出贡献。这些举措不仅提升了公司的社会形象,也为其在电子行业中树立了良好的口碑。

需要注意的是,这些故事是基于一般性的电子行业趋势和公司可能的发展路径构建的,并不代表AverLogic公司的实际发展历程。如需了解AverLogic公司的具体发展故事,建议查阅相关的行业报告、公司年报或新闻报道。

Bestar Electric公司的发展小趣事

随着技术实力的提升和产品线的丰富,Bestar Electric开始积极拓展市场。公司通过参加国际电子展、建立销售团队和合作伙伴网络等方式,将产品推向全球市场。同时,公司注重品牌建设,通过广告宣传和客户服务提升品牌知名度和美誉度。

启珑(CHIPLON)公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,Bestar Electric面临着诸多挑战。为了应对这些挑战,公司不断调整战略方向,加大研发投入,提升产品技术含量和附加值。同时,公司还注重人才培养和团队建设,吸引了一批优秀的研发、销售和管理人才,为公司的发展提供了有力保障。

问答坊 | AI 解惑

常见的嵌入式操作系统

DOS     微软一开始选用了派特森的Q-DOS “QUICK AND DISK OPERATING SYSTEM ”为基础然后再扩充功能而成 MS-DOS,主要是采用由IBM 提供的使用8088 微处理器的计算机作开发平台,它是以16 字节单人单工操作系统,特别适合一些功能简单 ...…

查看全部问答>

一种用VHDL设计嵌入式Web Server的方案

摘要: 近几年嵌入式Internet开始迅猛发展,但绝大多数嵌入式Internet都使用微控制器和相应的软件来实现。本文介绍一种基于硬件来实现嵌入式Web Server的方案。该方案的核心思想是用VHDL语言来设计实现,并且用FPGA进行验证。 关键词: VHDL Inte ...…

查看全部问答>

请教关于PXA270唤醒源的设置

专家好:    我的PDA前两天在公司测试部门发现,按键进入深度休眠后,不能马上按键唤醒,只有等5~6秒(大约值)后才能马上唤醒 我的按键休眠是设置的GPIO0,唤醒源也是GPIO0 具体的设置如下:          &nbs ...…

查看全部问答>

wince5.0的中断向量地址问题

shuiyan 大哥你好!  小弟最近在搞OAL里的中断函数OALTimerInit遇到个问题,是这样的:  我在private下的armtrap.s里发现了中断的异常跳转表 VectorInstructions         ldr     pc, [p ...…

查看全部问答>

如何在win ce下设置图片的3D凸起效果?(C#) 谢谢了!

如何在win ce下设置图片的3D凸起效果?(C#) 谢谢了!…

查看全部问答>

不好意思,问一下这个问题:-sh: ./helloworld: not found

我是一名初学者,今天终于完成了博创S3C2410上Linux 2.6.22的移植,网卡,文件系统都能正常使用,感觉蛮有成就感的。 但如今这个问题不知道如何解决了: 用编译内核和Busybox 1.5.1的编译器编译了一个helloworld,在开发板上用NFS挂载上,运行./hello ...…

查看全部问答>

全球首个太空机器人

$(\'swf_vSx\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://www.tudou.com/v/IJy11e9LXmk/v.swf\'), \'quality\', ...…

查看全部问答>

Quartus II的用法

我写了两段不同的verilog代码来实现同一个功能,现在我想比较哪个代码在FPGA上跑的更快,我在Quartus II里如何看出来呢,请各位指导我一下,谢谢。…

查看全部问答>

红外接收头的问题

目的:制作一个模块,该模块能检测红外发射管发出的红外线,波长为940nm,红外接收头型号为IRM-3638,当有接收头接收到红外光,那么模块上的LED灯就亮 我画的电路图如下:     但是我的板子没有达到预期目标,LED灯不亮,接收头没有 ...…

查看全部问答>