循迹小车源程序,用汇编语言写。

循迹小车源程序,用汇编语言写。,第1张

程序和中断程序入口 *

**

*************************************

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功率芯片,如果要调速且是直流电机,一般是对其控制使能脚施加占空比变化的信号,以达到不同的驱动效果。如果是步进电机,则控制方式有所不同,请查阅相应文献。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8259939.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存