1樓:匿名使用者
flag bit 00h ;定義flag為00h位
org 00h ;以下彙編的程式**從0000h單元開始連續存放
start: jb p1.7,start ;測試等待報警訊號(p1.7為1則等待)
jnb flag,next ;有報警則測flag位,為0轉next,(控制蜂鳴器響和不響的時間長短)
mov r2,#200 ;flag位為1則200送r2(控制迴圈,報警時間)
dv: cpl p1.0 ;p1.0取反(經p1.0輸出一個與上一狀態相反有訊號,控制蜂鳴器發聲)
lcall dely500 ;延時
lcall dely500 ;延時
djnz r2,dv ;r2不為0則轉dv
cpl flag ;flag位變反
next: mov r2,#200 ;200送r2
dv1: cpl p1.0 ;p1.0取反
lcall dely500 ;延時
djnz r2,dv1 ;r2不為0則轉dv
cpl flag ;flag位變反
sjmp start ;轉開始處
dely500: mov r7,#250 ;延時程式(如果主頻12m則延時1.5ms)
loop: nop
djnz r7,loop ;r7不為0轉loop
ret ;r7為0返回
end ;彙編結束
2樓:匿名使用者
flag bit 00h 定義標示位
org 00h ;程式起止地址
start: jb p1.7,start 判斷1。7口是不是,即是高電平還是低電平,如果是低電平,再判斷,直到不為0才往下
jnb flag,next ;如果標示位不為0,轉到next子程式去執行
mov r2,#200 給r2一個值:200dv: cpl p1.0 1。0口取反
lcall dely500 調延時
lcall dely500 調延時
djnz r2,dv r2減1不等於0,轉到dvcpl flag 標示位取反
next: mov r2,#200
dv1: cpl p1.0
lcall dely500
djnz r2,dv1
cpl flag
sjmp start 轉到start
dely500: mov r7,#250
loop: nop 這一步什麼都不做
djnz r7,loop
retend
求會51微控制器的大神幫忙給彙編程式加點註釋!!
各位基於51微控制器彙編大神,我只會c語言程式設計,麻煩各位給幫註釋一下才程式,程式已經寫好了,有財富的哦
3樓:匿名使用者
貌似是一個用定時器中斷方式產生計時、並動態重新整理顯示的計時器程式.
table是數碼管的顯示段碼,tab是數碼管的位碼.
用的似乎是共陰數碼管,估計這樣的接法,亮度不高啊!
微控制器程式求完整註釋,會註釋的幫我一下,謝謝
4樓:匿名使用者
真巧,我今天很閒
loop: mov r2,#20 置1s計數初值
mov r3,#20 紅燈亮20s
mov second1,#25 東西路口計時顯示初值25s
mov second2,#25 南北路口計時顯示初值25s
lcall display
lcall statel1 呼叫狀態1
wait1:jnb tf0,wait1 查詢50ms到否
clr tf0
mov th0,#3ch 恢復t0定時初值50ms
mov tl0,#0b0h
djnz r2,wait1 判斷1s到否?未到繼續狀態1
mov r2,#20 置50ms計數初值
dec secind1 東西路口顯示時間減1
dec second2 南北路口顯示時間減1
lcall display
djnz r3,wait1 狀態1維持20s
mov r2,#5 置50ms計數初值
mov r3,#3 綠燈閃爍3s
mov r4,#4 閃爍間隔200ms
mov second1,#5 東西路口計時顯示初值5s
mov second2,#5 南北路口計時顯示初值5s
lcall display..
.state1: 狀態1
setb led_g1 綠燈1亮 東西路口路燈亮
clr led_y1 黃燈1滅
clr led_r1 紅燈1滅
clr led_g2 綠燈2滅
clr led_y2 黃燈2滅
setb led_r2 紅燈2滅 南北路口紅燈亮
ret...
display: 數碼管顯示(相當於讀秒)兩個顯示器同時顯示秒
mov a,second1 東西路口計時暫存器
mov b,#10
div ab
mov dbuf+3,a
mov a,b
mov dbuf+2,a
mov second2 南北路口計時暫存器
mov b,#10
diy ab
mov dbuf+1,a
mov a,b
mov dbuf,a
mov r0,#dbuf
mov r1,#temp
mov r7,#4
dp10:mov dpotr,#ledmap 查表,讀出對應顯示碼段
mov a,@r0
movc a,@a+dptr
mov @r1,a
inc r0
inc r1
djnz r7,dp10
mov r0,#temp
mov r1,#4
dp12:mov r7,#8
mov a,@r0
dp13:rlc a
mov p3.0,c 這段是硬體介面,送出顯示的碼段
clr p3.1
setb p3.1
djnz r7,dp13
inc r0
djnz r1,dp12
retlenmap:db 3fh,06h,5bh,4fh,66h,6dh 此段為顯示用的真值表(針對不同硬體不一樣)
db 7dh,07h,7fh,6fh
org 0200h
5樓:匿名使用者
給你一個更加完整的程式
second1 equ 30h ;東西路口計時暫存器
second2 equ 31h ;南北路口計時暫存器
led_g1 bit p2.2 ;東西路口綠燈
led_y1 bit p2.3 ;東西路口黃燈
led_r1 bit p2.4 ;東西路口紅燈
led_g2 bit p2.5 ;南北路口綠燈
led_y2 bit p2.6 ;南北路口黃燈
led_r2 bit p2.7 ;南北路口紅燈
org 0000h
ljmp start
org 0100h
start: mov tmod,#01h ;置t0為工作方式1
mov th0,#3ch ;置t0定時初值50ms
mov tl0,#0b0h
clr tf0
setb tr0 ;啟動t0
clr a
mov p1,a ;關閉不相關的led
loop: mov r2,#20 ;置1s計數初值,50ms*20=1s
mov r3,#20 ;紅燈亮20s
mov second1,#25 ;東西路口計時初值25s
mov second2,#25 ;南北路口計時初值25s
lcall display
lcall state1 ;呼叫狀態1
wait1: jnb tf0,wait1 ;查詢50ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值50ms
mov tl0,#0b0h
djnz r2,wait1 ;判斷1s到否?未到繼續狀態1
mov r2,#20 ;置50ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait1 ;狀態1維持20s
mov r2,#5 ;置50ms計數初值 5*4=20
mov r3,#3 ;綠燈閃3s
mov r4,#4 ;閃爍間隔200ms
mov second1,#5 ;東西路口計時初值5s
mov second2,#5 ;南北路口計時初值5s
lcall display
wait2: lcall state2 ;呼叫狀態2
jnb tf0,wait2 ;查詢50ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值50ms
mov tl0,#0b0h
djnz r4,wait2 ;判斷200ms到否?未到繼續狀態2
cpl led_g1 ;東西綠燈閃
mov r4,#4 ;閃爍間隔200ms
djnz r2,wait2 ;判1s到否?未到繼續狀態2
mov r2,#5 ;置50ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait2 ;狀態2維持3s
mov r2,#20 ;置50ms計數初值
mov r3,#2 ;黃燈閃2s
mov second1,#2 ;東西路口計時初值2s
mov second2,#2 ;南北路口計時顯示2s
lcall display
wait3: lcall state3 ;呼叫狀態3
jnb tf0,wait3 ;查詢100ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值100ms
mov tl0,#0b0h
djnz r2,wait3 ;判斷1s到否?未到繼續狀態3
mov r2,#20 ;置100ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait3 ;狀態3維持2s
mov r2,#20 ;置50ms計數初值
mov r3,#20 ;紅燈閃20s
mov second1,#25 ;東西路口計時初值25s
mov second2,#25 ;南北路口計時初值25s
lcall display
wait4: lcall state4 ;呼叫狀態4
jnb tf0,wait4 ;查詢100ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值100ms
mov tl0,#0b0h
djnz r2,wait4 ;判斷1s到否?未到繼續狀態4
mov r2,#20 ;置100ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait4 ;狀態4維持20s
mov r2,#5 ;置50ms計數初值
mov r4,#4 ;紅燈閃20ms
mov r3,#3 ;綠燈閃3s
mov second1,#5 ;東西路口計時初值5s
mov second2,#5 ;南北路口計時初值5s
lcall display
wait5: lcall state5 ;呼叫狀態5
jnb tf0,wait5 ;查詢100ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值100ms
mov tl0,#0b0h
djnz r4,wait5 ;判斷200ms到否?未到繼續狀態5
cpl led_g2 ;南北綠燈閃
mov r4,#4 ;閃爍200ms
djnz r2,wait5 ;判斷1s到否?未到繼續狀態5
mov r2,#5 ;置100ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait5 ;狀態5維持3s
mov r2,#20 ;置50ms計數初值
mov r3,#2 ;紅燈閃2s
mov second1,#2 ;東西路口計時初值2s
mov second2,#2 ;南北路口計時初值2s
lcall display
wait6: lcall state6 ;呼叫狀態6
jnb tf0,wait6 ;查詢100ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值100ms
mov tl0,#0b0h
djnz r2,wait6 ;判斷1s到否?未到繼續狀態6
mov r2,#20 ;置100ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait6 ;狀態6維持2s
ljmp loop ;大迴圈
state1: ;狀態1
setb led_g1 ;東西路口綠燈亮
clr led_y1
clr led_r1
clr led_g2
clr led_y2
setb led_r2 ;南北路口紅燈亮
retstate2: ;狀態2
clr led_y1
clr led_r1
clr led_g2
clr led_y2
setb led_r2 ;南北路口紅燈亮
retstate3: ;狀態3
clr led_g1
clr led_r1
clr led_g2
clr led_y2
setb led_r2 ;南北路口紅燈亮
setb led_y1 ;東西路口綠燈亮
retstate4: ;狀態4
clr led_g1
clr led_y1
setb led_r1 ;東西路口紅燈亮
setb led_g2 ;南北路口綠燈亮
clr led_y2
clr led_r2
retstate5: ;狀態5
clr led_g1
clr led_y1
setb led_r1 ;東西路口紅燈亮
clr led_y2
clr led_r2
retstate6: ;狀態6
clr led_g1
clr led_y1
setb led_r1 ;東西路口紅燈亮
clr led_g2
clr led_r2
setb led_y2 ;南北路口紅燈亮
retledmap:
db 3fh,06h,5bh,4fh,66h,6dh ;0,1,2,3,4,5
db 7dh,07h,7fh,6fh,77h,7ch ;6,7,8,9,a,b
db 58h,5eh,7bh,71h,0,40h ;c,d,e,f, ,-end
彙編程式的問題,一個彙編程式的問題
show str mov ax,0b800h mov es,ax 取得顯示緩衝區的首地址 這裡的10h要改成160,在視訊記憶體裡每一行字元佔用160個位元組 mov al,160 dec dh mul dh mov dh,0 dec dl 這裡還要加一條這個,用來把dl中的數翻倍,也就是乘2 因為...
求人幫我寫一段彙編程式,誰給我寫一個最簡單的組合語言程式
32位數,以十進位制顯示,就太麻煩了。我有用16進位制顯示32位暫存器值的子程式,若需要跟我說。誰給我寫一個最簡單的組合語言程式 上來就是lcd人家看得懂麼.org 0000h ajmp main org 0030h main mov p0,00h mov p1,00h mov p2,00h mov...
一道c語言程式設計題,麻煩幫忙看一下我編的程式錯在哪兒
a沒有初始化 del char裡邊,a沒有初始化,就去判斷a 0 導致記憶體洩露 include stdio.h int del char char old,char n return 0 int link string char n,char link new for i j j b 0 i li...