求給下面這個程式加個詳細註釋,是1 99s的倒計時程式

2021-09-21 09:06:27 字數 4473 閱讀 6245

1樓:想當諸侯的小螞蟻

org 00h ;程式起始地址

ajmp main ;跳轉main

org 03h ;程式起始地址

ajmp nt0 ;跳轉in0

org 30h ;

main: mov p1,#00h;00h送到p1

setb p3.5;p35高電平

clr p3.6;p36低電平

clr p3.0;p30低電平

clr p3.1;p31低電平

clr 00h;地址00h低電平

clr 01h;地址01h低電平

mov 34h,#09h ;09h送到34h

mov 35h,#09h;09h送到35h

mov r1,#04h;04h送到r1

mov r2,#05h;05h送到r2

mov r3,#0f8h;f8h送到r3

mov dptr,#table;陣列送到dptr

mov tmod,#01h;定時器0 方式一

mov ie,#81h;總中斷開 ea=1,外部中斷int0允許中斷 ex0=1;

loop: jnb 01h,loop;01h等於0 跳轉到loop

mov a,r4;r4送到a

mov b,#10;10送到b

div ab;a/b

mov r0,a;a送到r0

mov r1,b;b送到r1

acall disp;呼叫disp

djnz r3,loop; r3減一不等於零 跳轉到loop

mov r3,#0f8h;f8h送到r3

dec r4;r4減一

cjne r4,#00,loop;r4不等於零 跳轉到loop

setb p3.6;p36高電平

acall delay1s;呼叫delay1s

clr p3.6;p36低電平

mov r4,24h;24h送到r4

ajmp loop;跳轉到loop

disp: mov a,r1;r1送到a

movc a,@a+dptr;a+dptr定址程式到a

mov p1,a;a送到p1

setb p3.0;p30高電平

acall delay;呼叫delay

clr p3.0;p30低電平

mov a,r0;r0送到a

movc a,@a+dptr;a+dptr定址程式到a

mov p1,a;a送到p1

setb p3.1;p31高電平

acall delay;呼叫delay

clr p3.1;p31電平

ret;返回

nt0: clr ex0;關外部中斷

clr et0 ; 關中斷

clr 01h;01h低電平

push acc;acc入棧

push psw;psw入棧

acall dis1 ; 呼叫dis1

key: jb p3.2,return;p32高電平 跳轉return

key0: acall dis1;呼叫dis1

jnb p3.2,key0 ;p32低電平 跳轉到key0

key2: jb p3.3,key3 ;p33高電平 跳轉到key3

acall dis1;呼叫dis1

inc 34h ; 34h加一

mov a,34h;34h送到a

cjne a,#0ah,key22;a不等於0ah 跳轉到key22

mov 34h,#00h;00h鬆動34h

key22: acall dis1;呼叫dis1

jnb p3.3,key22;p33高電平 跳轉到key22

ajmp key2;跳轉到key2

key3: acall dis1;呼叫dis1

jb p3.4,key1 ;p34到電平 跳轉到key1

inc 35h ; 35h加一

mov a,35h;35h送到a

cjne a,#0ah,key33;a不等於0ah 跳轉到key33

mov 35h,#00h;00h送到35h

key33: acall dis1;呼叫dis1

jnb p3.4,key33;

ajmp key3;跳轉到key3

key1: acall dis1;呼叫dis1

jb p3.2,key2 ;p32高電平 跳轉到key2

key10: acall dis1 ; 呼叫dis1

jnb p3.2,key10;p32低電平 跳轉到key10

acall bcdbin ; 呼叫bcdbin

setb 01h ; 01h高電平

return: setb ex0;關定時器0外部中斷

setb et0;定時器0 中斷相應

mov r3,#0f8h;

pop psw;psw出棧

pop acc;acc出棧

reti;中斷返回

bcdbin: mov b,#10;10送到b

mov a,34h;34h送到a

mul ab;a*b

add a,35h;35h送到a

mov 24h,a;a送到24h

mov r4,24h;24h送到r4

ret;返回

dis1: mov r0,#34h;34h送到r0

mov dptr,#table;將陣列放入dptr

mov a,@r0;r0間接送到a

movc a,@a+dptr;a+dptr定址程式到a

mov p1,a ;a送到p1

setb p3.1;p31高電平

clr p3.0;p30低電平

acall delay;呼叫delay

clr p3.1;p31低電平

inc r0;r0加一

mov a,@r0;r0間接送到a

movc a,@a+dptr;a+dptr定址程式送到a

mov p1,a ; a送到p1

setb p3.0;p30高電平

acall delay;呼叫delay

clr p3.0;p30低電平

ret;返回

delay: mov r7,#19 ;19送到r7

d1: mov r6,#25 ;25送到r6

d2: djnz r6,d2 ;r6減一 不為零 跳到d2

djnz r7,d1 ;r7減一 不為零 跳到d1

ret;返回

delay1s:mov r7,#20;20送到r7

del1: mov r6,#100;100送到r6

del2: mov r5,#248;248送到r5

djnz r5,$;r5減一 直到為零順序知行

djnz r6,del2;r6減一 不為零 跳到edl2

djnz r7,del1;r7減一 不為零 跳到edl1

ret;返回

table: db 0c0h,0f9h,0a4h,0b0h,99h,92h, 82h ,0f8h,80h,90h;陣列0-9

end;

2樓:匿名使用者

彙編寫的東西可維護性很差,還是c好一點

這個程式實現了什麼,求給加個備註!

3樓:小心心贏贏

這個程式實現了什麼?我看不到你的問題,相親幫不到你,不好意思。

4樓:凌雷雨

這個函式比較亂,我也不懂它想表達什麼!不過你可以帶入引數進行實驗,這樣可以簡單地算出它的輸出值!

5樓:傻子歡兒

可以查詢網上介紹的。

一般都可以查詢到。

想用51微控制器編個倒計時的c程式,要求用兩位數碼管顯示分鐘的,並用一個按鍵

6樓:手機使用者

並用一個按鍵啥? 51微控制器我沒設計過電路,用的學習板是現成的,對著電路圖。 那個學習板上沒有鎖存器啥的,只能靠掃描來顯示2個數字(就是兩個數碼管輪流顯示數字,因為輪流速度非常快人眼看不出來一次其實只有一個在顯示) 思路的話,按鍵和計時器都用中斷控制會比較方便, 1個全域性變數代表當前剩餘秒數,一個全域性變數代表當前剩餘分鐘數(或者你要一個16位變數代表秒數也行) 因為計時器無法定時1秒所以還要一個變數來輔助計時器實現每1秒引發一次事件的操作。

加上按鍵,這樣就有2個事件:一個是1秒引發一次,一個是按鈕引發 按鈕作用是什麼我不知道,你自己看著辦 計時器就是全域性變數的秒數減去1 這兩個事件實現以後,主程式邏輯就是一開始啟用中斷、啟用定時器、初始化全域性變數, 然後就開始死迴圈,迴圈裡的功能是把全域性變數裡的數字顯示到數碼管上,只管顯示不管別的的話還是很容易的,別的(計時、按鈕)全部交給中斷去完成,即可。

兩個c語言小程式求大蝦給詳細解釋

9 if s1 s2 這個條件是沒有問題的,因為等號表示式返回的是賦值後的值!賦值後的值只要不為0 對於字元型的話就是 0 也就是字串的結束符 即為真,當這個值為真的時候,這個函式遞迴呼叫,一直到將需要複製的字串複製完為止。所以,if s1 s2 這個語句等價於這兩個語句 s1 s2 if s1 判...

問一下下面的這個圖形的面積怎麼求詳細講解

就是補圖 將有bai 方的兩邊du延長想交。得到一個大等腰zhi直角三dao角形和一個小的等腰直角回三答角形 再用大等腰直角三角形的面積減去小的等腰直角三角形的面積設小的等腰直角三角形的邊長x 得 2 4 2 x 10得出x 求的面積 4 2 x 的平方的1 2 x平方的1 2你應該在圖上標上字母 ...

求大神幫忙看看這個琥珀怎麼樣是真的嗎詳細點最好是不是越

你這個是藍珀 看上去像緬甸產的藍珀 因為我不是很瞭解 我也無法確定 琥珀是越透明越好嗎?不是的 琥珀也好 蜜蠟也罷 其實都是一樣的 看各人喜好 其實 蜜蠟 和金珀是一樣的好 幫忙看看這個表,查好多查不到,希望大神幫忙,越詳細越好。20 卡地亞 cartier mtwtfss 系列抄的,在4.2萬元b...