完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
l 主程序 定时器脉冲的输出程序 ORG 0000H AJMP MAIN ORG 0013H AJMP INT1 ORG 100H MAIN: MOV TMOD,#11H ;设置T0,T1为定时方式1 MOV TL0,#1AH ;置计数初值 MOV TH0,#FCH MOV TL1,#1AH MOV TH1,#FCH MOV IE , #8EH ;设置中断允许 MOV IP , #0AH ;设置中断优先级 SETB TR0 ;启动中断 SETB TR1 LOOP: JB TF0,LOOP1 ;中断查询 JB TF1,LOOP2 AJMP LOOP LOOP1: MOV TL0,#1AH ;重新置计数初值 MOV TH0,#FCH CLR TF0 CPL P1.0 ;取反输出 AJMP LOOP LOOP2: MOV TL1,#1AH MOV TH1,#FCH CLR TF1 CPL P1.2 AJMP LOOP l 中断服务程序 INT1: MOV R1,#00H MOV R2,#04H TEST: MOV A, P2 JNB P3.3,TEST ;检测是否有中断 SETB EX1 ;开外部中断 CH: DJNZ R2,MWC ;检查清扫状况 CLR TF0 CLR TF1 MWC: INC R1 JB P2.3,LP1 ;是否悬空 JNB P2.2,TEST ;是否碰撞 MOV A,R1 JNB D0H,OS ;判断碰撞类型,偶数转 JB P2.1,LP3 LP2: MOV A,R2 JNB D0H,OS1 ACALL HH OS1: ACALL Zzw ;左转弯90度 ACALL Zxqx ;直线前进20cm ACALL Zzw ;左转弯90度 AJMP TEST LP3: DEC R2 MOV A,R2 JNB D0H,CH ;连续两次转弯不可行,转 ACALL YDHZW AJMP TEST OS: JB P2.0,LP4 LP5: MOV A,R2 JNB D0H,OS2 ACALL HH OS2: ACALL Yzw ;右转弯90度 ACALL Zxqx ;直线前进20cm ACALL Yzw ;右转弯90度 AJMP TEST LP4: DEC R2 MOV A,R2 JNB D0H,CH ;连续两次转弯不可行,转 ACALL YDHZW AJMP TEST HH: INC R1 RET l 服务子程序: Zzw: MOV R0,#20H ;正转控制字首址 MOV R3,#7846 ;转90度的脉冲数 ACALL YLKZ MOV R0,#27H ;反转控制字首址 MOV R3,#7846 ;转90度的脉冲数 ACALL ZLKZ RET Zxqx: MOV R0,#20H ;正转控制字首址 MOV R3,#7500 ;前进20cm的脉冲数 ACALL YLKZ ACALL ZLKZ RET Yzw: MOV R0,#20H ;正转控制字首址 MOV R3,#7846 ;转90度的脉冲数 ACALL ZLKZ MOV R0,#27H ;反转控制字首址 MOV R3,#7846 ;转90度的脉冲数 ACALL YLKZ RET YDHZW: MOV R0,#20H ;正转控制字首址 MOV R3,#15692 ;转90度的脉冲数 ACALL YLKZ MOV R0,#27H ;反转控制字首址 MOV R3,#15692 ;转90度的脉冲数 RET l 右轮控制程序: YLKZ: PUSH A ;保护现场 MOV A,@R0 MOV P1.1,A ;输出控制脉冲 ACALL DLY ;调用延时程序 INC R0 ;控制字存储地址增1 MOV A,#00H ORL A,@R0 ;是结束标志转移 JZ TPL LOOP1: DJNZ R3,LOOP ;步数不为0,转移 POP A RET TPL: MOV A,R0 ;恢复控制字首址 SUBB A,#06H MOV R0,A AJMP LOOP1 DLY: MOV R4,#M ;通过改变M,M1的值调整转速 DLY1:MOV A,#M1 LOOP2: DEC A JNZ LOOP2 DJNZ R4,DLY1 RET l 左轮控制程序: ZLKZ: PUSH A ;保护现场 MOV A,@R0 MOV P1.3,A ;输出控制脉冲 ACALL DLY ;调用延时程序 INC R0 ;控制字存储地址增1 MOV A,#00H ORL A,@R0 ;是结束标志转移 JZ TPL LOOP1: DJNZ R3,LOOP ;步数不为0,转移 POP A RET TPL: MOV A,R0 ;恢复控制字首址 SUBB A,#06H MOV R0,A AJMP LOOP1 DLY: MOV R4,#M ;通过改变M,M1的值调整转速 DLY1:MOV A,#M1 LOOP2: DEC A JNZ LOOP2 DJNZ R4,DLY1 RET |
|
相关推荐
1个回答
|
|
一个清扫机器人的行走程序
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
3337 浏览 3 评论
4640 浏览 1 评论
4918 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
6628 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1186 浏览 0 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-3 00:13 , Processed in 0.697897 second(s), Total 76, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号