长汀无线电厂交流论坛

 找回密码
 注册
查看: 890|回复: 2
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-4-17 17:41:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
无线的、蓝牙的、wifi的。。。。。小车
都试验过了
这段时间试验了红外遥控的小车

详见下:
回复

使用道具 举报

沙发
 楼主| 发表于 2018-4-17 17:46:16 | 只看该作者
外观与电路图:


回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2018-4-17 17:47:57 | 只看该作者
不得用于商业!
违者必究!


;试验红外遥控小车运行代码  
;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|长汀无线电厂交流论坛  

GMT+8, 2024-4-27 03:49 , Processed in 0.726710 second(s), 19 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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