
**
*************************************
ORG 0000H程序执行起始地址
LJMP START 跳至START
ORG 0003H外中断0入口
LJMP INTEX0 跳至INTEX0中断服务程序
ORG 000BH定时器T0中断入口
RETI 中断返回
ORG 0013H外中断1入口
LJMP INTEX1 跳至INTEX1中断服务昌毁程序
ORG 001BH定时器T1中断入口
LJMP INTT1 跳至INTT1中断服务程序
ORG 0023H串口锋迅毁中断入口
RETI 中断返回
ORG 002BH定时器T2中断入口
RETI 中断返回
***************************
* *
*初始化程序 *
* *
****************************
CLEARMEMIO: MOVR0, #70H 清70H-76H显示单元
MOVR7, #07H 循环次数
ML0: MOV@R0, #00H 清0
INCR0 下一地址
DJNZ R7, ML0未完再循环
MOVTMOD,#10H T1为16位定时器
MOVR4,#14H1秒定时用(50毫秒20次)
MOVTL1,#0B0H 50毫秒定时用初值
MOVTH1,#3CH
MOV 20H,#00H 清0 *** 作
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV 24H,#00H
CLR 30H 清停车标志
SETB ET1 开银备T1中断
SETB EX1 开外中断1
SETB IT1 外中断1采用边沿触发
SETB IT0 外中断0优先级为1(最高)
SETB EX0 开外中断0
SETBEA 开总中断允许
SETBTR1 开启定时器T1
RET 子程序返回
*************************************
**
*主 程 序*
**
*************************************
START: LCALLCLEARMEMIO 上电初始化
SETB P1.6 选择7.5V输出
CLR P1.7 选择7.5V输出
SETB P3.7 前进状态
CLR P3.6 前进状态
CLR P1.0 电机供电开始
;MAIN:LCALLDISP LED显示一次
LJMP MAIN 转MAIN循环
NOP PC值出错处理
NOP
LJMP START 重新初始化
*************************************
**
*外中断0服务程序,用作跑道位置处理 *
*23H作跑道计数器 *
*************************************
INTEX0:PUSH ACC 堆栈保护
PUSH PSW
CLR EX0 关中断
LCALLDISP LED显示一次(延时抗干扰)
JB P3.2,IN0RET P3.2为1退出(干扰)
INC 23H 跑道计数器加1
MOV A,23H 数据入A
CJNE A,#06H,JUDGE1 不是第6道转JUDGE1
LCALLSTOP 是第6道,停车
LJMP IN0RET 转中断退出
JUDGE1:CJNE A,#03H,JUDGE2 不是第3道转JUDGE2
LCALLSTOPSLOW 是第3道,变慢车
LJMP IN0RET 转中断退出
JUDGE2:CJNE A,#04H,JUDGE3 不是第4道转JUDGE3
LCALLFAST 是第4道,变快车
LJMP IN0RET 转中断退出
JUDGE3:CJNE A,#05H,IN0RET 不是第5道转INORET退出
LCALLSTOPSLOW 是第5道,变慢车
IN0RET:CLR IE0 清外中断0中断标志
POP PSW 恢复现场
POP ACC
LCALLDL7MS 延时7毫秒(抗干扰)
SETB EX0 开外中断0
RETI 中断返回
************************************
* 慢车控制子程序 *
************************************
STOPSLOW: CLR P1.6 关7.5V电源
CPL P3.6 反向驱动(刹车)
CPL P3.7 反向驱动
LCALLDS50MS 刹车时间(可根据试车情况调整)
LCALLDS50MS
LCALLDS50MS
CPL P3.6 正向驱动
CPL P3.7 正向驱动
SETB P1.7 开4.3V电源
RET 返回
************************************
* 快车控制子程序*
************************************
FAST: CLR P1.7 关4.3V电源
SETB P1.6 开7.5V电源
RET 返回
************************************
* 停车控制程序 *
************************************
STOP: MOV 23H,#00H 跑道计数单元清0
CPL P3.6 反向驱动(刹车)
CPL P3.7 反向驱动(刹车)
LCALLDS50MS 刹车时间
LCALLDS50MS 刹车时间(可调整)
SETBP1.0 关电机电源
SETBPT1 定时器T1为高优先级
LCALLDS10S 停车10秒
CLR PT1 恢复T1为低优先级
SETB P1.6 开7.5V电源(高速)
CLR P1.7 关4.3V
CLR P1.0 电机电源开
CPL 30H 停车点位置判断标志取反
JB 30H,STREN 为1(中途停车)转STREN
LCALLCLR00 是终点,调复0程序
STREN:RET 返回
楼主这活我也玩过。1、对于传感器不听话,很大可能是你的检测阈值设置得不是很好。
2、一般来说你的传侍裤感器个数应该比较多,可能6~10个吧,如此多的信号不应该都进入中断,再说单片机也没那么多外部中断可给你用,建议所有信号加或门进入外部中断高慎(可分为左边一组,右边一戚谈敬组,两个中断)。否则在主函数(更好的是,定时器)判断,这个信号最好连接到同一个端口上,如P0端口,通过位判断当前信号值。
3、L298N功率芯片,如果要调速且是直流电机,一般是对其控制使能脚施加占空比变化的信号,以达到不同的驱动效果。如果是步进电机,则控制方式有所不同,请查阅相应文献。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)