磁动力电子网-雕刻机DIY论坛,单片机论坛,CNCDIY,DIYCNC

 找回密码
 加入磁动力

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 212|回复: 7

[其它] [原创diy]试验红外遥控小车

[复制链接]
发表于 2018-3-9 22:55:27 | 显示全部楼层 |阅读模式
无线的、蓝牙的、wifi的。。。。。小车
都试验过了
这段时间试验了红外遥控的小车

详见下:
回复

使用道具 举报

 楼主| 发表于 2018-3-9 22:57:17 | 显示全部楼层
外观与电路图:



yk的小车.jpg
yk红外遥控小车.jpg
yk红外小车电图.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-9 22:58:43 | 显示全部楼层
所使用的红外遥控器:


yk红外小车手柄图1.jpg
yk红外小车手柄图2.jpg
回复 支持 反对

使用道具 举报

发表于 2018-3-9 23:05:16 | 显示全部楼层
不错
回复

使用道具 举报

 楼主| 发表于 2018-3-9 23:12:26 | 显示全部楼层
本帖最后由 lxa0 于 2018-3-9 23:15 编辑

参考原代码:
仅供参考
不得用于商业!
违者必究!



;试验红外遥控小车汇编代码  
;2018-3-8晚修改完成
;at89c2051--11.0592MHz晶振
;p17与p10分别驱动左右电机,p37驱动led灯


org 0000h
ajmp mm
org 0013h
ajmp tt1

;主程序*********************************************************
org 0100h
mm:nop
mov p1,#00h
mov p1,#00h        
mov th1,#00h
mov tl1,#00h
mov tmod,#90h        ;T0设方式0,T1方式1并打开门控
mov tcon,#04h         ;T1由外部下降沿触发中断
mov ie,#84h             ;开INT1和总中断
mov ip,#04h             ;INT1外部中断优先
mov sp,#4fh             ;设堆栈入口
mov 08h,#38h          ;开始转换红外波头
mov 09h,#07h          ;转换8位一组波头
mov 10h,#30h          ;读红外波头存放首址
mov 11h,#10h          ;读红外波头16个
mov 20h,#00h          ;所有标志位
mov 21h,#00h          ;存放动作指令码      
clr p3.7   
m0:acall zh            
acall dz      
acall ccc
sjmp m0

;cc动作完成后恢复相关的寄存器<不占区>******************************
ccc:jnb 07h,ccc0
mov 30h,#00h
mov 31h,#00h
mov 32h,#00h
mov 33h,#00h
mov 34h,#00h
mov 35h,#00h
mov 36h,#00h
mov 37h,#00h
mov 38h,#00h
mov 39h,#00h
mov 3ah,#00h
mov 3bh,#00h
mov 3ch,#00h
mov 3dh,#00h
mov 3eh,#00h
mov 3fh,#00h
mov 20h,#00h            ;然后恢复相关单元
mov 21h,#00h
setb ex1                      ;全部动作完成最后开INT1中断
ccc0:ret   

;tt1 T1读红外代码子程序<占用区2>********************************
org 0200h
tt1:push dph          ;保护现场
push dpl
push acc
push psw
jb 01h,t3                ;若正在转换则返回
jb 02h,t3                ;若正在动作则返回
jb 00h,t2                ;收到遥控引导码则进入接收识别模式
mov th1,#00h        ;清T1,为接收做准备
mov tl1,#00h
setb 00h                 ;设接收遥控波头准备好标志位
setb tr1                  ;启动T1
sjmp t3
t2:setb psw.4          ;进入区2
clr psw.3
mov @r0,th1          ;从30h存放读进的红外波头
mov th1,#00h        ;清T1,准备读下一位
mov tl1,#00h
inc r0
djnz r1,t3                ;接收0fh个红外波头完成否?
mov 10h,#30h        ;存放波头首地址
mov 11h,#10h        ;存放波头数量
setb 01h                  ;设读取完成与允许转换标志位
clr tr1                      ;关T1
clr ex1                     ;关外部中断1
clr 00h                    ;恢复接收标致位
t3:pop psw
pop acc
pop dpl
pop dph
reti

;zh转换子程序<占用区1>******************************************
org 0280h
zh:push dph             ;将识别后的遥控信号转换成16位动作代码
push dpl
push acc
push psw
setb psw.3               ;进入区1
clr psw.4
jb 00h,h01              ;若正在接收则返回              
jb 02h,h01              ;若正在动作则返回
jb 01h,h02              ;若允许转换则继续     
h01:mov 08h,#38h
mov 09h,#07h
pop psw
pop acc
pop dpl
pop dph
ret
h02:mov a,30h
jnb acc.2,h01           ;以下8条是判别红外指令的地址码是否正确
mov a,31h               ;正确时应为HHHL LLHL(11100010B)
jnb acc.2,h01
mov a,32h
jnb acc.2,h01
mov a,36h
jnb acc.2,h01
mov a,33h
jnb acc.1,h01
mov a,34h
jnb acc.1,h01
mov a,35h
jnb acc.1,h01
mov a,37h
jnb acc.1,h01
mov 08h,#38h            ;从38h单元开始转换指令码
h03:mov a,@r0           ;地址码正确开始转换指令码
jb acc.2,h04
clr 08h                         ;21h的最低位置0
sjmp h05
h04: setb 08h             ;21h的最低位置1
h05: mov a,21h
rl a
mov 21h,a
inc 08h
djnz r1,h03             ;8位指令码转换完否?
setb 02h                 ;设置允许执行动作标志位                        
clr 01h                    ;清除允许转换标志位
ljmp h01

;dz动作子程序<不占区>**********************************************
org 0300h
dz:push dph
push dpl
push acc
push psw
jb 00h,d01                ;若正在接收则返回
jb 01h,d01                ;若正在转换则返回
jnb 02h,d01              ;允许动作否?
mov a,21h
cjne a,#50h,dz2         ;左转?
mov p1,#00h
nop
setb p1.7
nop
sjmp d00a
dz2:mov a,21h             ;右转?
cjne a,#48h,dz3
mov p1,#00h
nop
setb p1.0
nop                        
sjmp d00a
dz3:mov a,21h             ;前进?
cjne a,#44h,dz4
mov p1,#00h
nop
mov p1,#0ffh
nop
sjmp d00a
dz4:mov a,21h
cjne a,#54h,d00a         ;停止?
mov p1,#00h
mov p1,#00h
d00a:nop
mov 20h,#00h            ;清除全部标志
mov 21h,#00h            ;清除已完成的动作代码
setb 07h                      ;本次动作完成后设置标志
d01:pop psw
pop acc
pop dpl
pop dph
ret


end


回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-9 23:17:52 | 显示全部楼层

明兄这么快就回复了
非常感谢你啊

大头笑.gif
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-2 17:26:59 | 显示全部楼层
本帖最后由 lxa0 于 2018-4-2 17:28 编辑

昨天又把转向改进成点动
并且纠正了当接收红外连码后的错误
原代码见下页
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-2 17:28:21 | 显示全部楼层
本帖最后由 lxa0 于 2018-4-2 17:30 编辑

不得用于商业!
违者必究!


;试验红外遥控小车运行代码  
;2018-4-2修改纠正连发码死机及点动转向
;AT2051/4051----11.0592MHz晶振

org 0000h
ajmp mm
org 0013h
ajmp tt1

;主程序*********************************************************
org 0100h
mm:nop
mov p1,#00h         ;关闭电机        
mov b,#30h          ;延时50uS纠错
mov 08h,#38h        ;开始转换红外波头
mov 09h,#07h        ;转换8位一组波头
mov 10h,#30h        ;读红外波头存放首址
mov 11h,#10h        ;读红外波头16个
mov 20h,#00h        ;所有标志位
mov 21h,#00h        ;存放动作指令码
mov th1,#00h
mov tl1,#00h
mov tmod,#90h       ;T0设方式0,T1方式1并打开门控
setb ea             ;开INT1和总中断
setb px1            ;INT1中断优先
setb it1            ;T1由外部下降沿触发中断  
clr et1             ;T1中断关闭
mov sp,#4fh         ;设堆栈入口      
acall ccc1          ;初始化相关单元
m0:acall ccc        ;动作后初始化相关单元
acall ssd   
acall zh            
acall dz      
sjmp m0

;双闪灯代码<占用区3的r6和r7两个单元>****************************
ssd:nop
clr p3.7            ;Rled双闪发光
acall ys
setb p3.7
acall ys
acall ys
clr p3.7
acall ys
setb p3.7
acall ys
acall ys
acall ys
acall ys
acall ys
acall ys
acall ys
acall ys
acall ys
acall ys
ret
ys:nop
mov 1eh,#00h         ;延时
mov 1fh,#80h
ys1:djnz 1eh,ys1
ys2:djnz 1fh,ys1
ret

;cc动作完成后恢复相关的寄存器<不占区>******************************
ccc:jnb 07h,ccc0
ccc1:setb ex1        ;全部动作完成最后开INT1中断
mov th1,#00h         ;清TH1/TL1
mov tl1,#00h
mov 08h,#38h         ;开始转换红外波头
mov 09h,#07h         ;转换8位一组波头
mov 10h,#30h         ;读红外波头存放首址
mov 11h,#10h         ;读红外波头17个
mov 20h,#00h         ;所有标志位
mov 21h,#00h         ;存放动作指令码
mov 30h,#00h
mov 31h,#00h
mov 32h,#00h
mov 33h,#00h
mov 34h,#00h
mov 35h,#00h
mov 36h,#00h
mov 37h,#00h
mov 38h,#00h
mov 39h,#00h
mov 3ah,#00h
mov 3bh,#00h
mov 3ch,#00h
mov 3dh,#00h
mov 3eh,#00h
mov 3fh,#00h
ccc0:ret     

;tt1 T1读红外代码子程序<占用区2>********************************
org 0200h
tt1:nop
push acc             ;保护现场
push psw
tt2:djnz b,tt2       ;延时50uS纠错
mov b,#30h           ;延时50uS
jb p3.3,ttwm
jb 00h,t2            ;收到遥控引导码则进入接收识别模式
setb 00h             ;设接收遥控波头准备好标志位
setb tr1             ;启动T1
sjmp t3
t2:setb psw.4        ;进入区2
clr psw.3
mov @r0,th1          ;从30h存放读进的红外波头
mov th1,#00h         ;清T1,准备读下一位
mov tl1,#00h
inc r0
djnz r1,t3           ;接收0fh个红外波头完成否?
clr ex1              ;关外部中断1
clr tr1              ;关T1
clr 00h              ;恢复接收标致位
setb 01h             ;设读取完成与允许转换标志位
mov b,#33h
mov 10h,#30h         
mov 11h,#10h
t3:nop
pop psw
pop acc
reti
ttwm:nop             ;误码处理
mov th1,#00h         ;清TH1/TL1
mov tl1,#00h
mov 08h,#38h         ;开始转换红外波头
mov 09h,#07h         ;转换8位一组波头
mov 10h,#30h         ;读红外波头存放首址
mov 11h,#10h         ;读红外波头17个
mov 20h,#00h         ;所有标志位
mov 21h,#00h         ;存放动作指令码
setb ex1         
pop psw
pop acc
reti

;zh转换子程序<占用区1>******************************************
org 0280h
zh:nop
push acc
push psw
setb psw.3            ;进入区1
clr psw.4            
jb 01h,h02            ;若允许转换则继续     
h01:nop
pop psw
pop acc
ret
h02:nop
mov a,30h
jnb acc.2,zhwm        ;以下8条是判别红外指令的地址码是否正确
mov a,31h             ;正确时应为HHHL LLHL(11100010B/E2H)
jnb acc.2,zhwm
mov a,32h
jnb acc.2,zhwm
mov a,36h
jnb acc.2,zhwm
mov a,33h
jnb acc.1,zhwm
mov a,34h
jnb acc.1,zhwm
mov a,35h
jnb acc.1,zhwm
mov a,37h
jnb acc.1,zhwm
mov 08h,#38h
h03:nop
mov a,@r0             ;地址码正确开始转换指令码
jb acc.2,h04
clr 08h               ;21h的最低位置0
sjmp h05
h04: setb 08h         ;21h的最低位置1
h05: mov a,21h
rl a
mov 21h,a
inc 08h
djnz r1,h03           ;8位指令码转换完否?
setb 02h              ;设置允许执行动作标志位                    
clr 01h               ;清除允许转换标志位
mov 08h,#38h         
mov 09h,#07h
ajmp h01
zhwm:acall ccc1       ;误码处理
pop psw
pop acc
ret

;dz动作子程序<不占区>**********************************************
org 0300h
dz:nop
push acc
push psw
jb 02h,dz0            ;允许动作否?
pop psw
pop acc
ret
dz0:mov a,21h
cjne a,#44h,dz1       ;前进?
mov p1,#00h
nop
setb p1.7
setb p1.0
nop
setb 07h              ;本次动作完成后设置标志
pop psw
pop acc
ret
dz1:mov a,21h         ;停止?
cjne a,#54h,dz2
mov p1,#00h
nop                        
setb 07h              ;本次动作完成后设置标志
pop psw
pop acc
ret
dz2:mov a,21h
cjne a,#50h,dz3       ;左转?
mov p1,#00h
nop
setb p1.7
acall ys
acall ys
clr p1.7
setb 07h              ;本次动作完成后设置标志
pop psw
pop acc
ret
dz3:mov a,21h
cjne a,#48h,dz4       ;右转?
mov p1,#00h
setb p1.0
acall ys
acall ys
clr p1.0
dz4:setb 07h          ;本次动作完成后设置标志
pop psw
pop acc
ret

end

;p37是双闪灯ssd,(L)点亮
;p17是左传
;p10是右转
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入磁动力

本版积分规则

QQ|小黑屋|手机版|Archiver|www.cdle.net 磁动力电子网 2001-2017 ( 粤ICP备10098153号

粤公网安备 44040402000001号

GMT+8, 2018-6-25 21:20

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.