已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序清单 以下是用汇编语言编写的超声波测距控制源程序: 采用 AT89S51 12z 晶振 显示缓冲单元在,使用内存 44H、45H、46H 用于计算距离 20H 用于标志 VOUT EQU P1.0 ;脉冲输出端口 *中断入口程序* ORG 0000H LJMP START ORG 0003H LJMP PINT0 ORG 000BH LJMP INTT0 ORG 0013H RETI ORG 001BH LJMP INTT1 ORG 0023H RETI ORG 002BH RETI *主程序* START: MOV SP, #4FH MOV R0, #40H ;4043H 为显示数据存放单元(40 为最高位) MOV R7,#0BH CLEARDISP:MOV R0, #00H INC R0 DJNZ R7, CLEARDISP MOV 20H, #00H MOV TMOD, #21H ;T1 为 8 位自动重装模式,T0 为 16 位定 时器 MOV TH0, #00H ;65ms 初值 MOV TL0, #00H ;40KHz 初值 MOV TH1, #0F2H MOV TL1, #0F2H MOV P0, #0FFH MOV P1, #0FFH MOV P2, #0FFH MOV P3, #0FFH MOV R4, #04H ;超声波脉冲个数控制(为赋值的一半) SETB PX0 SETB ET0 STEB EA CLR 00H SETB TR0 ;开启测距定时器 START1: LCALL DISPLAY JNB 00H, START1 ;收到反射信号时标志位为 1 CLR EA LCALL WORK ;计算距离子程序 SETB EA CLR 00H SETB TR0 ;重新开启测距定时器 MOV R2, #64H ; 测量间隔控制(约 4*100=400ms) LOOP: LCALL DISPLAY DJNZ R2, LOOP SJMP START 1 *中断程序* ;T0 中断,65ms 中断一次 INTT0: CLR EA CLR TR0 MOV TH0, #00H MOV TL0, #00H SETB ET1 SETB EA SETB TR0 ;启动计时器 T0,用以计算超声波 来回时间 SETB TR1 ;开启发超声波用定时器 T1 OUT: RETI ;T1 中断,发超声波用 INTT1: CPL VOUT DJNZ R4,RETIOUT CLR TR1 ;超声波发送完毕,关 T1 CLR ET1 MOV R4,#04H SETB EX0 ;开启接收回波中断 RETIOUT: RETI ;外中断 0,收到回波时进入 PINT0: CLR TR0 ;关计数器 CLR TR1 CLR ET1 CLR EA CLR EX0 MOV 44H, TL0 ;将计数值移入处理单元 MOV 45H, TH0 SETB 00H ;接收成功标志 RETI *延时程序* DL1MS: MOV R6, #14H DL1: MOV R7, #19H DL2: DJNZ R6, DL2 DJNZ R6, DL1 RET *显示程序* ;40H 为最高位,43H 为最低位,先扫描高位 DISPLAY:MOVR1, #40H;G MOVR5,#0F7H;G PLAY:MOVA, R5 MOVP0, #0FFH MOVP2, A MOVA, R1 MOVDPTR, #TAB MOVC A, A+DPTR MOVP0, A LCALL DLIMS INCR1 MOVA, R5 JNBACC.0, ENDOUT;G RRA MOVR5, A AJMPPLAY ENDOUT;MOVP2, #0FFH MOVP0, #0FFH RET TAB; DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH ;共阳数码管 0 ,1, 2,3,4,5,6,7,8,9,不亮,A, *距离计算程序(=计算值17/1000cm) 近似 WORK:PUSHACC PUSHPSW PUSHB MOVPSW, #18H MOVR3, 45H MOVR2, 44H MOVR1, #00D MOVR0, #17D LCALL MUL2BY2 MOVR3, #03H MOVR2, #0E8H LCALLDIV4BY2 LCALLDIV4BY2 MOV40H, R4 MOVA, 40H JNZJJ0 MOV40H, #0AH ;最高位为 0,不点亮 JJ0:MOVAR0 MOVR4, A MOVAR1 MOVR5 A MOV R3, #00D MOVR2, #100D LCALLDIV4BY2 MOV41H, R4 MOVA, 41H JNZJJ1 MOVA, 40H ;此高位为 0,先看最高位是否为不 亮 SUBB A, #0AH JNZJJ1 MOV41H, #0AH ; 最高位不亮,次高位也不亮 JJ1:MOVA, R0 MOVR4, A MOVA, R1 MOVR5, A MOVR3, #00D MOVR2, #10D LCALL DIV4BY2 MOV42H, R4 MOVA42H JNZJJ2 MOVA, 41H ;次高位为 0,先看次高位是否为不亮 SUBB A, #0AH JNZJJ2 MOV42H, #0AH ;次高位不亮,次高位也不亮 JJ2:MOV43H, R0 POPB POPPSW POPACC RET *两字节无符号数乘法程序 MUL2BY2:CLRA MOVR7, A MOVR6, A MOV R5, A MOVR4, A MOV46H, #10H MULLOOP1:CLRC MOVA, R4 RLCA MOVR4, A MOVA, R5 RLCA MOVR5, A MOVA, R6 RLCA MOVR6, A MOVA, R7 RLCA MOV R7, A MOV A, R0 RLC A MOVR0, A MOVA, R1 RLCA MOVR1, A JNCMULLOOP2 MOVA, R4 ADDA, R2 MOVR4, A MOVA, R5 ADDC A, R3 MOVR5, A MOVA, R6 ADDC A, #00H MOVR6, A MOVA, R7 ADDC A, #00H MOVR7, A MULLOOP2:DJNZ46H, MULLOOP1 RET *四字节/两字节无符号数除法程序* DIV4BY2:MOV46H, #20H MOVR0, #00H MOVR1, #00H DIVLOOP1: MOVA, R4 RLCA MOVR4, A MOVA, R5 RLCA MOVR5, A MOVA, R6 RLCA MOVR6, A MOVA, R7 RLCA MOVR7, A MOVA, R0 RLCA MOVR0, A MOVA, R1 RLCA MOVR1, A CLRC MOVA, R0 SUBB A, R2 MOVB, A MOV A, R1 SUBB A, R3 JCDIVLOOP2 MOVR0, B MOVR1, A DIVLOOP2:CPLC DJNZ46H, DIVLOOP1 MOVA, R4 RLCA MOVR4, A MOVA, R5 RLCA MOVR5, A MOVA, R6 RLCA MOVR6, A MOVA, R7 RLCA MOVR7, A RET ; END 附 C51 程序 #INCLUDE #DEFINE UCHAR UNSIGNED CHAR #DEFINE UINT UNSIGNED INT #DEFINE ULONG UNSIGNED LONG EXTERN VOID CS_T(VOID); EXTERN VOID DELAY(UINT); EXTERN VOID DISPLAY(UCHAR*); /DATA UCHAR DISPLAY(UCHAR*); DATA UCHAR TESTOK; VOID MAIN (VOID) DATA UCHAR DISPRAM5; DATA UINT I; DATA ULONG TIME; P0=0XFF; P2=0XFF; TMOD=0X11; IE=0X80; WHILE (1) CS_T(); DELAY(1); TESTOK=0; EX0=1; ET0=1; WHILE(! TESTOK) DISPLAY(DISPRAM); IF (1=TESTOK) TIME=TH0; TIME=(TIME8)| TL0; TIME*=172; TIME/=10000; DISPRAM0=(UCHAR) (TIME%10); TIME/=10; DISPRAM1=(UCHAR) (TIME%10); TIME/=10; DISPRAM2=(UCHAR) (TIME%10); DISPRAM3=(UCHAR) (TIME/10); IF (0=DISPRAM3) DISPRAM3=17; ELSE DISPRAM 0=16; DISPRAM 1=16; DISPRAM 2=16; DISPRAM 3=16; FOR (I=0;I300;I+) DISPLAY(DISPRAM); VOID CS_R(VOID) INTERRUPT 0 TR0=0; ET0=0; EX0=0; TESTOK=1; VOID OVERTIME(VOID) INTERRUPT 1 EX0=0; TR0=0; ET0=0; TESTOK=2; NAME CS_T ?PR?CS_T?CS_T SEGMENT CODE PUBLIC CS_T RSEG ?PR?CS_T?CS_T CS_T: PUSH ACC MOV TH0, #00H MOV TL0, #00H MOV A, #4D SETB TR0 CS_T1: CPL p1.0 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP DJNZ ACC,CS_T1 POP ACC RET ; END NAME DELAY ?PR?_DELAY?DELAY SEGMENT CODE PUBLIC _DELAY RSEG ?PR?_DELAY?DELAY _DELAY: PUSH ACC MOV A,R7 JZ DELA1 INC R6 DELA1: MOV R5,#50D DJNZ R5, $ DJNZ R7,DELA1 DJNZ R6,DELA1 POP ACC RET END NAME DISPLAY ?PR?_DISPLAY?DISPLAY SEGMENT CODE ?CO?_DISPLAY?DISPLAY SEGMENT DATA EXTRN CODE (_DELAY) PUBLIC _DISPLAY RSEG ?CO?_DISPLAY?DISPLAY ?_DISPLAY?BYTE: DISPBIT: DS 1 DISPNUM: DS 1 RSEG ?PR?_DISPLAY?DISPLAY _DISPLAY: PUSH ACC PUSH DPH PUSH DPL PUSH PSW INC DISPNUM MOV A,DISPNUM CJNE A,#4D,DISP1 DISP1: JC DISP2 MOV DISPNUM,#00H MOV DISPBIT,#0FEH DISP2: MOV A,R1 ADD A,DISPNUM MOV R0,A MOV A,R0 MOV DPTR,#DISPTABLE MOVC A,A+DPTR MOV P0,A MOV A,DISPNUM CJNE A,#2D,DISP3 CLR P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 疏浚工程社会稳定风险评估报告
- 三只松鼠面试试题及答案
- 一线运维工考试题及答案
- 招聘人工智能产品经理面试题及答案
- 招聘房地产经纪人面试题及答案
- 数字化转型创新路径
- 舞弊案例测试题及答案
- 企业管理-数字化转型顾问工作流程SOP
- 拉泥车合同协议
- 自请工合同协议
- 教育数字化应用案例
- 小学四年级上册道德与法治期末测试卷及一套完整答案
- QB/T 2660-2024 化妆水(正式版)
- DCS集散控制系统课件
- 艾滋病的血常规报告单
- JJG 443-2023燃油加油机(试行)
- 国家开放大学-传感器与测试技术实验报告(实验成绩)
- 建筑基桩地基静载检测试验培训
- 机动车驾驶员体检表
- GB/Z 18620.2-2002圆柱齿轮检验实施规范第2部分:径向综合偏差、径向跳动、齿厚和侧隙的检验
- GB/T 9853-2008化学试剂无水硫酸钠
评论
0/150
提交评论