⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chao.asm

📁 超声波测距仪的简单设计的源代码打开方式 使用DSP或者DXP2004
💻 ASM
字号:
;********************************************
;4位共阴LED数码管
;千位      p2.3
;百位      p2.4
;十位      p2.5
;个位      p2.6
;定时溢出  p1.1
;接收中断  p1.7
;超声发射  p2.0
;可供选择信号指示:p1.1/p1.5/p1.6/p1.7
;注:此程序为方便学习理解,末进行优化
;***********************************************
ORG  0000H
AJMP  START
ORG  0003H; 定时器0外中断向量地址
AJMP  TIME1
ORG  000BH;定时器0的溢出中断向量地址
AJMP  TIME0;跳转到定时器程序出
ORG  36H

START:
      MOV TMOD,#00000001B;记数器0工作于方式1
      SETB EA;开总中断

 LOOP:MOV R0,#01H
      MOV 14H,#0AH;超声波发射持续200us
      MOV TH0,#0B1H
      MOV TL0,#0E0H;赋值定时器定时20ms
      SETB ET0;开定时/记数器0溢出中断
      SETB TR0;定时/记数器0开始
HERE:CPL P2.0;输出40K方波
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     DJNZ 14H,HERE
     NOP
     NOP
     MOV R7,#200
     DJNZ R7,$
     MOV R7,#200
     DJNZ R7,$
     MOV R7,#200
     DJNZ R7,$
     MOV R7,#200
     DJNZ R7,$
     MOV R7,#200
     DJNZ R7,$
     MOV R7,#200
     DJNZ R7,$
     MOV R7,#200
     DJNZ R7,$;超声波谐振等待
     MOV R4,0030H
     MOV R5,0031H
     SETB EX0;开定时器0外中断
DENG:MOV A,R0;外中断R0为0, 溢出中断r0为0
     JNZ DENG;累加器非0转移
     MOV A,R1;煌庵卸蟁1为0,溢出中断R1为1;
     JNZ DPLOP;累加器非0转移,超量程显示,
     MOV R6,#1H
     MOV R7,#54H
     MOV R2,30H
     MOV R3,31H
ACALL MULD
     MOV R6,#4EH
     MOV R7,#20H
ACALL DIVD
     MOV A,R3
     MOV R7,A
     MOV A,R2
     MOV R6,A
     JNZ AAA1;
     MOV A,R7
     CJNE A,#28H,RT;
     AJMP RT
  RT:JC EEP;
     AJMP AAA1
  EEP:MOV A,#0BBH;
     MOV 33H,A
     MOV 34H,A
     AJMP DDR
AAA1:ACALL HB2
DDR:ACALL AEE
      AJMP LOOP;程序结束返回
      RET
AEE:MOV DPTR,#TAB
     MOV R6,#255;显示255次
DPLOP:MOV A,33H;*************千位显示
     SWAP A
     ANL A,#0FH;
     MOVC A,@A+DPTR
     MOV P0,A
     CLR P2.3
     ACALL DIMS;********如不需要千位显示可删掉
     MOV A,33H
     ANL A,#0FH;屏蔽A中的高四位
     MOVC A,@A+DPTR;查代码
     SETB P2.3
     MOV P0,A;送出百位的7段代码
     CLR P2.4;开百位显示
     ACALL DIMS;显示1ms
     MOV A,34H
     SWAP A
     ANL A,#0FH
     MOVC A,@A+DPTR
     SETB P2.4
     MOV P0,A
     CLR P2.5;开十位显示
     ACALL DIMS
     MOV A,34H
     ANL A,#0FH;屏蔽A中的高四位
     MOVC A,@A+DPTR;查个位数的7段代码
     SETB P2.5
     MOV P0,A;送出个位的7段代码
     CLR P2.6;开个位显示
     ACALL DIMS;
     SETB P2.6
     DJNZ R6,DPLOP;循环
     RET
DIMS:MOV R7,#80;(按12M)
     DJNZ R7,$
     RET
;MULD 功能:双字节无符号数乘法
;入口条件:被乘数在R2.R3中乘数在R6.R7中
;出口信息:乘积在R2.3.4.5中
;影响资源:PSW.A B R2---7
MULD:MOV A,R3;计算R3乘R7
     MOV B,R7
     MUL AB
     MOV R4,B;崭存部分积
     MOV R5,A
     MOV A,R3;计算R3乘R6
     MOV B,R6
     MUL AB
     ADD A,R4; 累加器部分积
     MOV R4,A
     CLR A
     ADDC A,B
     MOV R3,A
     MOV A,R2;计算R2乘R7
     MOV B,R7
     MUL AB
     ADD A,R4;累加部分积
     MOV R4,A
     MOV A,R3
     ADDC A,B
     MOV R3,A
     CLR A
     RLC A
     XCH A,R2;计算R2乘R6
     MOV B,R6
     MUL AB
     ADD A,R3; 累加部分积
     MOV R3,A
     MOV A,R2
     ADDC A,B
     MOV R2,A
     RET
;****************************************
;DIVD功能:双字节无符号数除法
;入口条件:被除数在R2.3.4.5中,除数在R6.7中
;出口信息:OV=0时,双字节商在R2.3 中,OV=1时溢出。
;影响资源:PSW,A,B,R1--7
DIVD: CLR C;比较被被除数和除数
      MOV A,R3
      SUBB A,R7
      MOV A,R2
      SUBB A,R7
      JC DVD1
      SETB OV;溢出
      RET
;*****************************************
DVD1:MOV B,#10H;计算双字节商
DVD2:CLR C;部分商和余数同时左移一位
     MOV A,R5
     RLC A
     MOV R5,A
     MOV A,R4
     RLC A
     MOV R4,A
     MOV A,R3
     RLC A
     MOV R3,A
     XCH A,R2
     RLC A
     XCH A,R2
     MOV F0,C;保存溢出位
     CLR C
     SUBB A,R7;计算(R2.3--R6.7)
     MOV R1,A
     MOV A,R2
     SUBB A,R6
     ANL C,/F0;结果判断
     JC DVD3
     MOV R2,A;够减,存新的余数
     MOV A,R1
     MOV R3,A
     INC R5;商的低位置一
DVD3:DJNZ B,DVD2;计算完十六位商(R4R5)
     MOV A,R4;将商移到R2·R3
     MOV R2,A
     MOV A,R5
     MOV R3,A
     CLR OV;设立成功标志
     RET
;*****************************************
;HB2功能:双字节十六进制整数转换成双字节BCD码整数
;入口条件:待转换的双字节十六进制整数在R6R7中
;出口信息:转换后的三字节BCD码整数在R3.4.5中
;影响资源: PSW, A .R2--7
HB2:CLR A;BCD;码初始化
    MOV R3,A
    MOV R4,A
    MOV R5,A
    MOV R2,#10H;转换双字节十六进制整数
HB3:MOV A,R7;从高端移出待转换数的一位到CY
    RLC A
    MOV R7,A
    MOV A,R6
    RLC A
    MOV R6,A
    MOV A,R5;BCD码带进位自身相加,相当于乘2
    ADDC A,R5
    DA A;十进制调整
    MOV R5,A
    MOV A,R4
    ADDC A,R4
    DA A
    MOV R4,A
    MOV A,R3 
    ADDC A,R3
    MOV R3,A;双字节十六进制数的万位数不超过6,不用调整
    DJNZ R2,HB3;处理完16bit
    MOV 32H,R3
    MOV 34H,R5
    RET
;*******************************************
;T定时器0的溢出中断
TIME0:PUSH ACC;定时器0的溢出中断
      PUSH PSW;将PSW和ACC入浅
      CLR TR0;关定时器
      CLR EX0;关外中断
      MOV A,#0AAH
      MOV 32H,A
      MOV 33H,A
      MOV 34H,A
      MOV R0,#00H
      MOV R1,#01H
      CPL P1.1
      POP PSW
      POP ACC
;      RET1
;*****************************************
;T定时器0的外中断
TIME1:PUSH ACC
      PUSH PSW;将PSW和ACC入浅
      CLR TR0;关定时器
      CLR EX0;关外中断
      CLR ET0
      CPL P1.7
      MOV A,TH0;高位
      SUBB A,#0B3H;0B1H
      MOV 0030H,A
      MOV A,TL0
      SUBB A,#6FH;0E0H
      MOV 0031H,A
      MOV R0,#00H
      MOV R1,#00H
      POP PSW
      POP ACC
;      RET1
;***************************************
;TAB:0EBH,00AH,067H,06EH,08EH,0ECH,0EDH
;    02AH,0EFH,0EEH,014H,074H,;0123456789
;    一。三。
    END
    
      
     

    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -