- ;======================================================================
- ;编写者:兰建文 时间:2009-7-24 地点:源点IC嵌入式培训机构
- ;多功能小车 (小车能寻迹、壁障、无线遥控、电机调速)
- ;使用ATMEL89C2051单片机
- ;P1.7控制后轮前进方向 P1.3----循迹左
- ;P1.6控制后轮后退方向 P1.2----循迹右
- ;P1.5控制前轮左转方向 P3.1----蜂鸣器
- ;P1.4控制前轮右转方向 P3.5----左转指示灯
- ;P3.2壁障红外检测 P3.4----右转指示灯
- ;P3.0无线遥控检测 P3.3控制555产生38KHZ红外线
- ;定时器中断0用于调节电机速度,调节PWM
- ;===========================系统程序===================================
- ORG 0000H
- JMP START
- ORG 000BH
- JMP IN_T1
- ORG 0030H
- ;===========================程序开始===================================
- START:
- MOV P1,#0FFH ;端口初始化
- MOV P3,#0FFH
- MOV TMOD,#01H ;定时器0工作方式1
- MOV TL0,#0D4H ;定时0.9ms 设定时初值
- MOV TH0,#0FEH
- MOV IE,#82H ;开总中断与定时器中断
- SETB TR0 ;开定时器
- MOV R1,#3 ;设置占空比
- SETB F0 ;节拍标志位
- MAIN:
- JNB P1.2,NEXT1 ;判断是否左转,光电对管出轨迹,就继续判断。
- JNB P1.3,NEXT2 ;判断是否右转,光电对管出轨迹,就右转。
- ;=========================== 小车直走===================================
- NEXT4:
- SETB P1.6 ;二个光电对管都在轨迹内,小车就向前直走。
- SETB P1.5
- SETB P1.4
- SETB P3.5
- SETB P3.4
- JMP MAIN1
-
- NEXT1:
- JB P1.3,NEXT3
- ;=========================== 小车后退===================================
- SETB P1.7 ;两个光电对管都出了轨迹就后退。
- CLR P1.6
- SETB P1.5
- SETB P1.4
- CLR P3.5 ;亮后退指示灯
- CLR P3.4
- ;=========================== 小车左转 ==================================
- NEXT3:
- SETB P1.6
- CLR P1.4
- SETB P1.5
- SETB P3.5
- CLR P3.4 ;亮左转指示灯
- JMP MAIN1
- ;=========================== 小车右转 ==================================
- NEXT2:
- SETB P1.6
- SETB P1.4
- CLR P1.5
- CLR P3.5 ;亮右转指示灯
- SETB P3.4
- JMP MAIN1
- ;=============================调节PWM==================================
- MAIN1:
- JNB F0,MAIN
- CLR F0
- DJNZ R1,LL
- MOV R1,#3
- SETB P1.7
- SETB P1.6
- JMP MAIN
- LL:
- CLR P1.7
- SETB P1.6
- JMP MAIN
- ;==========================定时器中断0服务子程序=======================
- ;输入: TL0、TH0
- ;输出:无
- ;实现的功能:影响标志位F0
- ;======================================================================
- IN_T1:
- MOV TL0,#0D4H ;定时0.9MS
- MOV TH0,#0FEH
- SETB F0
- RETI
- ;==========================延时子程序==================================
- ;输入: 无
- ;输出:无
- ;实现的功能:延时一段时间
- ;======================================================================
- DELAY:
- MOV R7,#200
- L:
- MOV R6,#200
- DJNZ R6,$
- DJNZ R7,L
- RET
- ;===========================程序结束===================================
- END
复制代码
|