導航:首頁 > 源碼編譯 > u2 wcmov

u2 wcmov

發布時間:2024-05-11 20:51:23

Ⅰ 以AT89C51單片機和DS18B20實現溫度檢測顯示並報警的程序和電路圖,顯示用M016L液晶模塊顯示

匯編語言程序:

;*********************************************************************

;程序適合單個DS18B20和MCS-51單片機的連接,晶振為12MHz

;測量的溫度范圍-55℃~+99℃,溫度精確到小數點後一位

;*********************************************************************

TEMPER_L EQU 30H ;存放從DS18B20中讀出的高、低位溫度值

TEMPER_H EQU 31H

TEMPER_NUM EQU 32H ;存放溫度轉換後的整數部分

TEMPER_POT EQU 33H ;存放溫度轉換後的小數部分

FLAG0 EQU 34H ;FLAG0存放溫度的符號

DQ EQU P1.0 ;DS18B20數據線

RS BIT P1.7 ;LCD1602控制線定義

RW BIT P1.6

E BIT P1.5

SkipDs18b20 EQU 0CCH ;DS18B20跳過ROM命令

StartDs18b20 EQU 44H ;DS18B20溫度變換命令

ReadDs EQU 0BEH ;DS18B20讀暫存器命令

ORG0000H

SJMPMAIN

ORG0040H

MAIN:MOVSP,#60H

ACALL LCD_INIT

MOV A,#80H ;lcd第1行第1列開始顯示temperature:

ACALL WC51R

MOV A,#'t'

ACALL WC51DDR

MOV A,#'e'

ACALL WC51DDR

MOV A,#'m'

ACALL WC51DDR

MOV A,#'p'

ACALL WC51DDR

MOV A,#'e'

ACALL WC51DDR

MOV A,#'r'

ACALL WC51DDR

MOV A,#'a'

ACALL WC51DDR

MOV A,#'t'

ACALL WC51DDR

MOV A,#'u'

ACALL WC51DDR

MOV A,#'r'

ACALL WC51DDR

MOV A,#'e'

ACALL WC51DDR

MOV A,#':'

ACALL WC51DDR

REP:LCALLGET_TEMPER ;讀出轉換後的溫度值

LCALLTEMPER_COV

MOV A,#0c6H ;lcd第2行第7列開始顯示溫度

ACALL WC51R

MOV A,FLAG0 ;顯示符號

ACALL WC51DDR

MOV A,TEMPER_NUM ;溫度整數拆分成十位和個位顯示

MOV B,#10

DIV AB

ADD A,#30H

CJNE A,#30H,REP1 ;如果十位為0不顯示

MOV A,#20H

REP1:ACALL WC51DDR

MOV A,B

ADD A,#30H

ACALL WC51DDR

MOV A,#'.' ;顯示小數點

ACALL WC51DDR

MOV DPTR,#TABLE

MOV A,TEMPER_POT ;顯示小數部分

MOVC A,@A+DPTR

ACALL WC51DDR

LJMPREP

;DS18B20復位程序

DS18B20_INIT:SETB DQ

NOP

NOP

CLR DQ

MOVR7,#9

INIT_DELAY:CALL DELAY60US

DJNZ R7,INIT_DELAY

SETB DQ

CALL DELAY60US

CALL DELAY60US

MOV C,DQ

JC ERROR

CALL DELAY60US

CALL DELAY60US

CALL DELAY60US

CALL DELAY60US

RET

ERROR:CLR DQ

SJMP DS18B20_INIT

RET

;讀DS18B20一個位元組到累加器A程序

READ_BYTE: MOV R7,#08H

SETB DQ

NOP

NOP

LOOP:CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R6,#07H

DJNZ R6,$

MOV C,DQ

CALL DELAY60US

RRC A

SETB DQ

DJNZ R7,LOOP

CALL DELAY60US

CALL DELAY60US

RET

;累加器A寫到DS18B20程序

WRITE_BYTE:MOV R7,#08H

SETB DQ

NOP

NOP

LOOP1:CLR DQ

MOV R6,#07H

DJNZ R6,$

RRC A

MOV DQ,C

CALL DELAY60US

SETB DQ

DJNZ R7,LOOP1

RET

DELAY60US:MOV R6,#1EH

DJNZ R6,$

RET

;讀溫度程序

GET_TEMPER:CALL DS18B20_INIT ;DS18B20復位程序

MOV A,#0CCH ;DS18B20跳過ROM命令

CALL WRITE_BYTE

CALL DELAY60US

CALL DELAY60US

MOV A,#44H ;DS18B20溫度變換命令

CALL WRITE_BYTE

CALL DELAY60US

CALL DS18B20_INIT ;DS18B20復位程序

MOV A,#0CCH ;DS18B20跳過ROM命令

CALL WRITE_BYTE

CALL DELAY60US

MOV A,#0BEH ;DS18B20讀暫存器命令

CALL WRITE_BYTE

CALL DELAY60US

CALL READ_BYTE ;讀溫度低位元組

MOV TEMPER_L,A

CALL READ_BYTE ;讀溫度高位元組

MOV TEMPER_H,A

RET

;將從DS18B20中讀出的溫度拆分成整數和小數

TEMPER_COV:

MOV FLAG0,#'+' ;設當前溫度為正

MOV A,TEMPER_H

SUBB A,#0F8H

JC TEM0 ;看溫度值是否為負?不是,轉

MOV FLAG0,#'-' ;是,置FLAG0為'-'

MOV A,TEMPER_L

CPL A

ADD A,#01

MOV TEMPER_L,A

MOV A,TEMPER_H

CPL A

ADDC A,#00

MOV TEMPER_H,A

TEM0:

MOV A,TEMPER_L ;存放小數部分到TEMPER_POT

ANL A,#0FH

MOV TEMPER_POT,A

MOV A,TEMPER_L ;存放小數部分到TEMPER_NUM

ANL A,#0F0H

SWAP A

MOV TEMPER_NUM,A

MOV A,TEMPER_H

SWAP A

ORL A,TEMPER_NUM

MOV TEMPER_NUM,A

RET

;LCD初始化子程序

LCD_INIT:MOV A,#00000001H ;清屏

ACALL WC51R

MOV A,#00111000B ;使用8位數據,顯示兩行,使用5×7的字型

LCALL WC51R

MOV A,#00001100B ;顯示器開,游標關,字元不閃爍

LCALL WC51R

MOV A,#00000110B ;字元不動,游標自動右移一格

LCALL WC51R

RET

;檢查忙子程序

F_BUSY:PUSH ACC ;保護現場

MOV P2,#0FFH

CLR RS

SETB RW

WAIT: CLR E

SETB E

JB P2.7,WAIT ;忙,等待

POP ACC ;不忙,恢復現場

RET

;寫入命令子程序

WC51R: ACALL F_BUSY

CLR E

CLR RS

CLR RW

SETB E

MOV P2,ACC

CLR E

RET

;寫入數據子程序

WC51DDR:ACALL F_BUSY

CLR E

SETB RS

CLR RW

SETB E

MOV P2,ACC

CLR E

RET

TABLE:DB 30H,31H,31H,32H,33H,33H,34H,34H

DB 35H,36H,36H,37H,38H,38H,39H,39H ;小數溫度轉換表

END

C語言程序:

//程序適合單個DS18B20和MCS-51單片機的連接,晶振為12MHz

//測量的溫度范圍-55℃~+99℃,溫度精確到小數點後一位

#include<REG52.H>

#defineucharunsignedchar

#defineuintunsignedint

sbit DQ=P1^0; //定義埠

sbit RS=P1^7;

sbit RW=P1^6;

sbit EN=P1^5;

union{

ucharc[2];

uintx;

}temp;

ucharflag;//flag為溫度值的正負號標志單元,"1"表示為負值,"0"時表示為正值。

uintcc,cc2;//變數cc中保存讀出的溫度值

floatcc1;

ucharbuff1[13]={"temperature:"};

ucharbuff2[6]={"+00.0"};

//檢查忙函數

void fbusy()

{

P2=0xff;

RS=0;

RW=1;

EN=1;

EN=0;

while((P2&0x80))

{

EN=0;

EN=1;

}

}

//寫命令函數

void wc51r(uchar j)

{

fbusy();

EN=0;

RS=0;

RW=0;

EN=1;

P2=j;

EN=0;

}

//寫數據函數

void wc51ddr(uchar j)

{

fbusy(); //讀狀態;

EN=0;

RS=1;

RW=0;

EN=1;

P2=j;

EN=0;

}

void init()

{

wc51r(0x01); //清屏

wc51r(0x38); //使用8位數據,顯示兩行,使用5*7的字型

wc51r(0x0c); //顯示器開,游標開,字元不閃爍

wc51r(0x06); //字元不動,游標自動右移一格

}

voiddelay(uintuseconds) //延時程序

{

for(;useconds>0;useconds--);

}

ucharow_reset(void) //復位

{

ucharpresence;

DQ=0; //DQ低電平

delay(50); //480ms

DQ=1; //DQ高電平

delay(3); //等待

presence=DQ; //presence信號

delay(25);

return(presence); //0允許,1禁止

}

ucharread_byte(void) //從單匯流排上讀取一個位元組

{

uchari;

ucharvalue=0;

for(i=8;i>0;i--)

{

value>>=1;

DQ=0;

DQ=1;

delay(1);

if(DQ)value|=0x80;

delay(6);

}

return(value);

}

voidwrite_byte(ucharval) //向單匯流排上寫一個位元組

{

uchari;

for(i=8;i>0;i--) //一次寫一位元組

{

DQ=0;

DQ=val&0x01;

delay(5);

DQ=1;

val=val/2;

}

delay(5);

}

voidRead_Temperature(void) //讀取溫度

{

ow_reset();

write_byte(0xCC); //跳過ROM

write_byte(0xBE); //讀

temp.c[1]=read_byte();

temp.c[0]=read_byte();

ow_reset();

write_byte(0xCC);

write_byte(0x44); //開始

return;

}

voidmain() //主程序

{

uchar k;

delay(10);

EA=0;

flag=0;

init();

wc51r(0x80); //寫入顯示緩沖區起始地址為第1行第1列

for(k=0;k<13;k++) //第一行顯示提示信息"currenttempis:"

{wc51ddr(buff1[k]);}

while(1)

{

delay(10000);

Read_Temperature(); //讀取雙位元組溫度

cc=temp.c[0]*256.0+temp.c[1];

if (temp.c[0]>0xf8){flag=1;cc=~cc+1;}elseflag=0;

cc1=cc*0.0625; //計算出溫度值

cc2=cc1*100; //放大100倍,放在整型變數中便於取數字

buff2[1]=cc2/1000+0x30;if(buff2[1]==0x30)buff2[1]=0x20;//取出十位,轉換成字元,如果十位是0不顯示。

buff2[2]=cc2/100-(cc2/1000)*10+0x30;//取出個位,轉換成字元

buff2[4]=cc2/10-(cc2/100)*10+0x30;//取出小數點後一位,轉換成字元

if(flag==1)buff2[0]='-';elsebuff2[0]='+';

wc51r(0xc5); //寫入顯示緩沖區起始地址為第2行第6列

for(k=0;k<6;k++) //第二行顯示溫度

{wc51ddr(buff2[k]);}

}

}

python代碼運行助手怎麼打開

python代碼運行助手是能在網頁上運行python語言的工具。因為python的運行環境在很多教程里都是用dos的,黑乎乎的界面看的有點簡陋,所以出了這python代碼運行助手,作為ide。

實際上,python代碼運行助手界面只能算及格分,如果要找ide,推薦使用jupyter。jupyter被集成到ANACONDA里,只要安裝了anacoda就能使用了。

回到這個問題:

1、要打開這運行助手首先要下載一個learning.py,如果找不到可以復制如下代碼另存為「learning.py」,編輯器用sublime、或者notepad++。

#!/usr/bin/envpython3
#-*-coding:utf-8-*-

r'''
learning.py

APython3tutorialfromhttp://www.liaoxuefeng.com

Usage:

python3learning.py
'''

importsys

defcheck_version():
v=sys.version_info
ifv.major==3andv.minor>=4:
returnTrue
print('Yourcurrentpythonis%d.%d.PleaseusePython3.4.'%(v.major,v.minor))
returnFalse

ifnotcheck_version():
exit(1)

importos,io,json,subprocess,tempfile
fromurllibimportparse
fromwsgiref.simple_serverimportmake_server

EXEC=sys.executable
PORT=39093
HOST='local.liaoxuefeng.com:%d'%PORT
TEMP=tempfile.mkdtemp(suffix='_py',prefix='learn_python_')
INDEX=0

defmain():
httpd=make_server('127.0.0.1',PORT,application)
print('ReadyforPythoncodeonport%d...'%PORT)
httpd.serve_forever()

defget_name():
globalINDEX
INDEX=INDEX+1
return'test_%d'%INDEX

defwrite_py(name,code):
fpath=os.path.join(TEMP,'%s.py'%name)
withopen(fpath,'w',encoding='utf-8')asf:
f.write(code)
print('Codewroteto:%s'%fpath)
returnfpath

defdecode(s):
try:
returns.decode('utf-8')
exceptUnicodeDecodeError:
returns.decode('gbk')

defapplication(environ,start_response):
host=environ.get('HTTP_HOST')
method=environ.get('REQUEST_METHOD')
path=environ.get('PATH_INFO')
ifmethod=='GET'andpath=='/':
start_response('200OK',[('Content-Type','text/html')])
return[b'<html><head><title>LearningPython</title></head><body><formmethod="post"action="/run"><textareaname="code"style="width:90%;height:600px"></textarea><p><buttontype="submit">Run</button></p></form></body></html>']
ifmethod=='GET'andpath=='/env':
start_response('200OK',[('Content-Type','text/html')])
L=[b'<html><head><title>ENV</title></head><body>']
fork,vinenviron.items():
p='<p>%s=%s'%(k,str(v))
L.append(p.encode('utf-8'))
L.append(b'</html>')
returnL
ifhost!=HOSTormethod!='POST'orpath!='/run'ornotenviron.get('CONTENT_TYPE','').lower().startswith('application/x-www-form-urlencoded'):
start_response('400BadRequest',[('Content-Type','application/json')])
return[b'{"error":"bad_request"}']
s=environ['wsgi.input'].read(int(environ['CONTENT_LENGTH']))
qs=parse.parse_qs(s.decode('utf-8'))
ifnot'code'inqs:
start_response('400BadRequest',[('Content-Type','application/json')])
return[b'{"error":"invalid_params"}']
name=qs['name'][0]if'name'inqselseget_name()
code=qs['code'][0]
headers=[('Content-Type','application/json')]
origin=environ.get('HTTP_ORIGIN','')
iforigin.find('.liaoxuefeng.com')==-1:
start_response('400BadRequest',[('Content-Type','application/json')])
return[b'{"error":"invalid_origin"}']
headers.append(('Access-Control-Allow-Origin',origin))
start_response('200OK',headers)
r=dict()
try:
fpath=write_py(name,code)
print('Execute:%s%s'%(EXEC,fpath))
r['output']=decode(subprocess.check_output([EXEC,fpath],stderr=subprocess.STDOUT,timeout=5))
exceptsubprocess.CalledProcessErrorase:
r=dict(error='Exception',output=decode(e.output))
exceptsubprocess.TimeoutExpiredase:
r=dict(error='Timeout',output='執行超時')
exceptsubprocess.CalledProcessErrorase:
r=dict(error='Error',output='執行錯誤')
print('Executedone.')
return[json.mps(r).encode('utf-8')]

if__name__=='__main__':
main()

2,再用一個記事本寫如下的代碼:

@echooff
pythonlearning.py
pause

另存為『運行.bat』

3、把「運行.bat」和「learning.py」放到同一目錄下,

Ⅲ 初級單片機綜合題求解答,請用匯編語言

地址低8位有u2鎖存後提供,高3位由p2口的低3位提供,共11bit地址,E端接P26,所以

  1. 6116在64k地址范圍的地址為, 最基本地址是,4000h-47ffh 共 2k byte

    但由於P2.7,P2.6,P2.5,P2.5懸空,可以是任意值,都可讀寫到6116,所以6116有多重地址. 即0000h-ffffh的64k中,除了p2.6=0,的地址,其他地址均可分成多個2k的塊,每個2k的塊都可讀寫到同一個6116的數據。

2. mov A,#5ah

MOV DPH,#40H

MOV DPL,#0

movx @DPTR,A

MOV A,#0A5H

MOV DPH,#47H

MOV DPL,#0FFH

movx @DPTR,A

3. MOV A,#0

MOV DPH,#40H

MOV DPL,#0

MOV R0,#7h

LOOP1:

MOV R1,#0ffh

loop2:

movx @dptr,a

inc dptr

djnz R1,LOOP2

djnz R0,LOOP1

閱讀全文

與u2 wcmov相關的資料

熱點內容
中銘機器人怎麼編程 瀏覽:812
把字母變為數字的加密法 瀏覽:523
噬血狂襲第三季哪個app能看 瀏覽:421
江蘇螺桿壓縮機 瀏覽:980
android底部彈出對話框 瀏覽:501
怎麼查伺服器同行fc號 瀏覽:999
什麼伺服器雲鳥最便宜 瀏覽:220
vs編譯器反匯編 瀏覽:570
程序員直播做項目創業 瀏覽:403
linux下samba配置 瀏覽:797
程序員面試銀行崗位會有編制嗎 瀏覽:414
ex表怎麼加密碼保護 瀏覽:173
小孩上編程課用哪款好 瀏覽:559
如何製作伺服器商店 瀏覽:734
壓縮氣管閥門 瀏覽:464
pdf推文 瀏覽:359
69程序員 瀏覽:581
阿里雲伺服器鏡像如何遷移到騰訊 瀏覽:989
安卓如何顯示日期在狀態欄 瀏覽:805
cadsplt這個命令用不了 瀏覽:468