微控制器程式解釋,微控制器程式解釋

2021-12-21 15:30:48 字數 4414 閱讀 2521

1樓:袁輝是

222222222222222222222222222222222222

2樓:匿名使用者

cnta equ 30h ;定義cnta為暫存器30h

count equ 31h ;定義count為暫存器31h

org 00h ;程式開始

ljmp start ;開始程式入口

org 0bh ;定時器t0中斷程式入口地址,不過最好用org 000bh

ljmp t0x ;t0中斷程式入口

org 0030h ;主程式開始地址,初始化開始

start: mov cnta,#00h ;

mov count,#00h

mov tmod,#01h ;定時器t0工作方式1

mov th0,#(65536-1000) / 256 ;這是c的方式,不知道彙編支援不支援?

mov tl0,#(65536-1000) mod 256

setb tr0 ;t0計時開始

setb et0 ;開t0中斷

setb ea ;開總中斷(你這邊最好按 setb ea

setb et0

setb tr0的順序)

wt: jb p2.0,wt ;判斷p2.0,如果是高,等待。

mov r6,#5 ;如果p2.0為低,延時開始

mov r7,#248 ;這個延時是為了消抖

d1: djnz r7,$ ;以防誤判

djnz r6,d1

jb p2.0,wt ;延時結束,繼續判斷p2.0的狀態,如果不為低,繼續等待

inc count ;如果為低,count加1

mov a,count ;判斷count的數值

cjne a,#03h,next ;如果count不等於3,轉到 next執行

mov count,#00h ;如果是3,清count為0

next: jnb p2.0,$ ;等待p2.0為高

sjmp wt ;如果p2.0釋放,迴圈

t0x: nop ;t0中斷服務程式

mov th0,#(65536-1000) / 256 ;重灌初值

mov tl0,#(65536-1000) mod 256

mov dptr,#tab ;把表的基址賦予dptr

mov a,cnta ;把變址給a

movc a,@a+dptr ;查表

mov p3,a ;把查出的表值給p3口

mov dptr,#graph ;把graph賦予dptr

mov a,count ;把count值給a

mov b,#8 ;

mul ab ;ab相乘,值放a裡

add a,cnta ;a加cnta的值放a裡做變址

movc a,@a+dptr ;查表

mov p1,a ;查表值給p1口

inc cnta ;連續查

mov a,cnta

cjne a,#8,nex ;不到8次,中斷返回,下次接著上個地址查表

mov cnta,#00h ;8次到了,從頭開始

nex: reti ;中斷返回指令

tab: db ;表0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh,07fh

graph: db 12h,14h,3ch,48h,3ch,14h,12h,00h

db 00h,00h,38h,44h,44h,44h,38h,00h

db 30h,48h,44h,22h,44h,48h,30h,00hend

3樓:無所不問

你電路圖dq接的p3.7

main: ;初始化

lcall rst_ds18b20 ;調入程式rst——ds18b20

lcall get_temper ;調入程式get_temper

mov a,20h ;寫ds18b20的程式mov c,08h

rrc a

mov c,09h

rrc a

mov c,10h

rrc a

mov c,11h

rrc a

mov 20h,a

lcall display

ajmp main ;返回初始化main程式;讀ds18b20的程式,從18b20中讀出1個位元組的資料rst_ds18b20:

setb p3. 7 ;定時入口

nop ;空操作指令

clr p3. 7

mov r1, #3

rst1:mov r0, #110

djnz r0, $

djnz r1,rst1

setb p3. 7

nopnop

mov r0, #25h

rst2:jnb p3. 7,rst3

djnz r0,rst2

ljmp rst4

rst3: setb flag

ljmp rst5

rst4:clr flag

ljmp rst7

rst5:mov r0, #115

rst6:djnz r0, $

rst7: setb p3. 7

ret;寫ds18b20的程式

wr_ds18b20: ;寫資料子程式mov r2, #8

clr c

wr1: clr p3. 7

mov r3, #6

djnz r3, $

rrc a

mov p3. 7,c

mov r3, #25

djnz r3, $

setb p3. 7

nopdjnz r2,wr1

setb p3. 7

ret;讀ds18b20的程式,從18b20中讀出2個位元組的溫度資料rd_ds18b20: ;讀資料子程式mov r4, #2 ;將溫度高位和溫度低位從ds18b20中讀出

mov r1, #20h ;低位存入20h,read1:

mov r2, #8

read2:

clr c

setb p3. 7

nopnop

clr p3. 7

nopnop

nopsetb p3. 7

mov r3, #9

read3:

djnz r3,read3

mov c, p3. 7

mov r3, #23

read4:

djnz r3,read4

rrc a

djnz r2,read2

mov @r1,a

inc r1

djnz r4,read1

ret2. 主要程式

外中斷int0的部分中斷響應程式如下:

org 0003h

intd0:

push acc

push psw

push dph

push dpl

setb 24h.0

mov a, 5fh

jz ting1

dec a

mov 5fh,a

ljmp fan2

ting1: …

fan2:

mov a, 5bh

jz ting2

dec a

mov 5bh, a

ljmp zong

ting2:…

zong:

mov a, 59h

jz kai

dec a

mov 59h, a

ljmp exit

kai:

clr 24h.0

jb 26h.0, kai2

kai2:

mov a, 66h

jz exit1

exit1:

mov 5fh,5ah

mov 5bh,66h

mov 59h,#100

exit:

pop dpl

pop dph

pop psw

pop acc

reti

你這個程式太雜亂

我得能力只能寫這麼多

微控制器程式問題,微控制器程式問題

其實現在有部分高階的微控制器都有flash儲存區,不過我們一般是作為儲存程式用的,但其實也可以作為少量的資料區使用。但一般普通的51系列微控制器是不能的,只能外部擴充套件加eeprom,或者flash。只不過現在很多微控制器是內部由eeprom,擴充套件的資料flash,按照晶片的公司提供的data...

微控制器程式註釋

iint1 push acc push psw push dph push dpl 保護 acc psw dptr 內容 clr ea 關中斷 mov a,40h mov dptr,5fffh movx dptr,a 將 40h送5fffh mov dptr,5effh movx a,dptr mo...

微控制器大神請進,51微控制器彙編程式,程式可發至

1 p1口做輸出口,編寫程式,使p1口接的8個發光二極體l1 l8按16進位制加一方式點亮發光二極體。程式如下 org 0540h ha1s mov a,00h a初值為0 ha1s1 jb p3.3,ha1s1 如果p3.3為1則等待 有脈衝變0一次 mov r2,20h r2賦值為20 lcal...