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...