自动往返小车程序.docVIP

  • 9
  • 0
  • 约5.85千字
  • 约 12页
  • 2023-08-13 发布于湖北
  • 举报
自动往返小车程序 ;************************************* ;* * ;* 自 动 往 返 小 汽 车 * ;* 2001年9月 * ;************************************* ; ; ; ;************************************* ;* * ;* 主程序和中断程序入口 * ;* * ;************************************* ; 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: MOV R0, #70H ;清70H-76H显示单元 MOV R7, #07H ;循环次数 ML0: MOV @R0, #00H ;清0 INC R0 ;下一地址 DJNZ R7, ML0 ;未完再循环 MOV TMOD,#10H ;T1为16位定时器 MOV R4,#14H ;1秒定时用(50毫秒20次) MOV TL1,#0B0H ;50毫秒定时用初值 MOV TH1,#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 SETB EA ;开总中断允许 SETB TR1 ;开启定时器T1 RET ;子程序返回 ; ;************************************* ;* * ;* 主 程 序 * ;* * ;************************************* ; START: LCALL CLEARMEMIO ;上电初始化 SETB P1.6 ;选择7.5V输出 CLR P1.7 ;选择7.5V输出 SETB P3.7 ;前进状态 CLR P3.6 ;前进状态 CLR P1.0 ;电机供电开始 MAIN: LCALL DISP ;LED显示一次 LJMP MAIN ;转MAIN循环 NOP ;PC值出错处理 NOP LJMP START ;重新初始化 ; ;************************************* ;* * ;*外中断0服务程序,用作跑道位置处理 * ;* 23H作跑道计数器 * ;************************************* INTEX0: PUSH ACC ;堆栈保护 PUSH PSW ; CLR EX0 ;关中断 LCALL DISP ;LED显示一次(延时抗干扰) JB P3.2,IN0RET ;P3.2为1退出(干扰) INC 23H ;跑道计数器加1 MOV A,23H ;数据入A CJNE A,#06H,JUDGE1 ;不是第6道转JUDGE1 LCALL STOP ;是第6道,停车 LJMP IN0RET ;转中断退出 JUDGE1: CJNE A,#03H,JUDGE2 ;不是第3道转JUDGE2 LCALL STOPSLOW ;是第3道,变慢车 LJMP IN0RET ;转中断退出 JUDGE2: CJNE A,#04H,JUDGE3 ;不是第4道转JUDGE3 LCALL FAST ;是第4道,变快车 LJMP IN0RET ;转中断退出 JUDGE3: CJNE A,#05H,IN0RET ;不是第5道转INORET退出 LCALL STOPSLOW ;是第5道,变慢车 IN0RET: CLR IE0 ;清外中断

文档评论(0)

1亿VIP精品文档

相关文档