<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 51單片機超聲波測距程序C調匯編

51單片機超聲波測距程序C調匯編

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò ) 收藏
#include

#include //絕對地址存取

本文引用地址:http://dyxdggzs.com/article/201611/318300.htm

#include

#pragma NOREGPARMS //固定單元參數傳遞,以減少C與匯編在寄存器Rn參數傳

#define f DBYTE[0x40] //cm

#define g DBYTE[0x41] //dm

#define h DBYTE[0x42] //m

#define i DBYTE[0x43]

unsigned data a _at_ 0x32; // #define a DWORD(雙字節)[0x32]/ DBYTE(1個(gè)字節),這兩種做法都不行?定義錯

//誤導致數據傳送不過(guò)來(lái),導致不能進(jìn)行計算,顯示0000。高字節TH0存放于32h,低字節TL0存放

//于33h,在c語(yǔ)言中只定義高字節即可,運算時(shí),將高字節低字節看作一個(gè)整體進(jìn)行運

//算,見(jiàn)《混合編程》20頁(yè);此為無(wú)符號整型,兩個(gè)字節,可以存放高低16位。。

unsigned data a0 _at_ 0x52; //第一個(gè)數存儲單元

unsigned data a1 _at_ 0x54; //第二個(gè)數存儲單元

unsigned data a2 _at_ 0x56;

void count() //被匯編調用的子程序

{

unsigned long int temp; //中間變量定義

a0=a/10;

a1=a0*17;

a2=a1/100;

f=a2%10;

temp=a2/10;

g=temp%10;

temp=temp/10;

h=temp%10;

i=temp/10;

}

EXTRN CODE(COUNT)

ORG 0000H

JMP MAIN

ORG 0003H

LJMP EXT0

MAIN: MOV TMOD,#01H ;設置為定時(shí)器且為方式為1

CLR P3.1 ;為了使系統穩定,P3.1硬件須接地,軟件須清零

SETB P3.2

SETB EA ;開(kāi)總中斷

CLR IT0 ;設置為電平觸發(fā)方式,為低電平則會(huì )觸發(fā)外部零中斷 MOV SP,#60H

START:MOV R6,#0 ;進(jìn)入中斷的標識

MOV R7,#4

MOV 40H,#00H ;存放厘米位的數字

MOV 41H,#00H ;存放分米位的數字

MOV 42H,#00H ;存放米位的數字

MOV 43H,#00H ;存放十米位的數字

MOV TL0,#00H ;設置定時(shí)時(shí)間為65536微秒

MOV TH0,#00H

CLR TF0 ;溢出標志位清0

SETB P3.0 ;從此處開(kāi)始到下一個(gè)高電平到來(lái)的時(shí)間必須在*12--13 ;微秒*之間,保證頻率為40khz,若頻率范圍相差太大 ;則導致接收器接收不到信號 ;/*要注意程序運行時(shí)時(shí)間帶來(lái)的影響*/

INT: CPL P3.0 ;40KHZ超聲波發(fā)射子程序 1個(gè)

LCALL DELAY1

DJNZ R7,INT ;超聲波發(fā)送完畢

CALL DELAY2 ;延時(shí)0.1MS避免錯誤

SETB EX0

SETB TR0 ;開(kāi)始計時(shí)

LOOP2:JBC TF0,LOOP3 ;檢查是否有溢出,若為1則跳到LOOP3,并清零

CJNE R6,#0,LOOP4

JMP LOOP2

LOOP4:

LCALL COUNT

LCALL dis

LJMP START

LOOP3:CLR TR0

CLR EX0

MOV 40H,#09H

MOV 41H,#09H

MOV 42H,#09H

MOV 43H,#09H

LCALL dis

LJMP START

EXT0: CLR TR0 ;進(jìn)入外部中斷后,一般所做的工作為:關(guān)閉定時(shí)器/計數器,關(guān)閉外部 ;中斷,保護當前的值

CLR EX0 ;改動(dòng)1

PUSH ACC

PUSH PSW

MOV 32H,TH0

MOV 33H,TL0 ;改動(dòng)2

MOV R6,#1

POP PSW

POP ACC

RETI

dis: MOV R0,#250 ;目前顯示時(shí)間為1S

D0: MOV A,40H

MOV P2, A

ACALL DELAY

MOV A, 41H

ADD A, #10H

MOV P2, A

ACALL DELAY

MOV A, 42H

ADD A, #20H

MOV P2, A

ACALL DELAY

MOV A, 43H

MOV P2, A

ADD A, #30H

MOV P2, A

ACALL DELAY

DJNZ R0,D0

RET

DELAY: MOV R1,#02 ;1MS

D1: MOV R2,#248

DJNZ R2,$

DJNZ R1,D1

RET

DELAY1:MOV R3,#2 ;1US

D3: DJNZ R3,D3 ;6*2=12US+1=13US

RET

DELAY2:MOV R4,#50

D4: DJNZ R4,D4 ;50*2=100US=0.1MS

RET

END



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>