微控制器組合語言註釋請給下面程式前20條語句註釋

時間 2021-09-13 18:13:54

1樓:生活如歌

tcnta equ 30h;定義一個變數tcnta,這個變數的地址是30h,後面的一個意思

tcntb equ 31h

sec equ 32h

keycnt equ 33h

sp1 bit p3.5;這裡是定義一個位變數sp1,代表p3.5

org 00h;程式從0000h單元

ljmp start;跳轉到start標號處org 0bh;000bh是定時器0中斷服務程式入口地下ljmp int_t0;直接跳轉到int_t0處start:mov keycnt,#00h;keycnt變數清0mov sec,#00h;sec變數清0(這應該是一個秒計數變數)mov a,sec;sec變數中的值送到a中mov b,#10;b賦值為10

div ab;a/10後十位在a,個位在bmov dptr,#table;段碼錶表頭地址送dptrmovc a,@a+dptr;查表,把a中的數的段碼找出來mov p0,a;段碼送到p0口

mov a,b;剛才的個位數送到a

mov dptr,#table;繼續查表與前同movc a,@a+dptr

mov p2,a

mov tmod,#02h;定時器工作模式設為定時器0工作在定時模式2

setb et0;啟動定時器0

setb ea;開放cpu中斷

wt: jb sp1,wt

lcall dely10ms

jb sp1,wt

inc keycnt

mov a,keycnt

cjne a,#01h,kn1

setb tr0

mov th0,#06h

mov tl0,#06h

mov tcnta,#00h

mov tcntb,#00h

ljmp dkn

2樓:浪花飄零

這個微控制器功能是一個只顯示2位秒值的電子秒錶,最大計數為99秒,有一個按鍵,兼做啟動、停止和復位

按鍵一次,啟動秒錶

按鍵二次,停秒錶

按鍵三次,清初值復位

tcnta equ 30h ;定義一個名為tcnta的變數,它表示為30h的地址,雙位元組10進位制計數器

tcntb equ 31h ;定義一個名為tcntb的變數,它表示為31h的地址

sec equ 32h ;定義一個名為sec的變數,它表示為32h的地址,秒計數

keycnt equ 33h ;定義一個名為keycnt 的變數,它的表示為33h的地址,按鍵計數

sp1 bit p3.5 ;sp1表示p3.5這個位

org 00h ;主程式入口向量,微控制器啟動後從此開始執行

ljmp start ;轉到主程式

org 0bh ;t0中斷向量,發生t0中斷時程式轉入這裡執行

ljmp int_t0 轉移到中斷處理程式

start:mov keycnt,#00h ; 主程式

mov sec,#00h ;取秒值

mov a,sec

mov b,#10 ;b存放除數

div ab ;a/10 a中存放十位數,b中存放個位數

mov dptr,#table ;取7段顯示碼錶首地址

movc a,@a+dptr ;十位數查錶轉換為顯示段碼

mov p0,a ;送顯示

mov a,b ;個位數

mov dptr,#table

movc a,@a+dptr 個位數查錶轉換為顯示段碼

mov p2,a ;送顯示

mov tmod,#02h ;定時器工作模式設為定時器0工作在8位定時模式2

setb et0 ;啟動定時器0

setb ea ;開中斷

wt: jb sp1,wt ;按鈕按下

lcall dely10ms ;延時10ms

jb sp1,wt ;再次測試,按鍵去抖

inc keycnt ;確定有按鈕輸入

mov a,keycnt ;按鈕計數器+1

cjne a,#01h,kn1 ;第一次按下按鈕

setb tr0 ;啟動計數器

mov th0,#06h ;初值=6

mov tl0,#06h ;計數初值=6

mov tcnta,#00h ;清雙位元組10進位制計數器低位

mov tcntb,#00h ;清雙位元組10進位制計數器高位

ljmp dkn ;跳轉到dkn

kn1: cjne a,#02h,kn2 ;第二次按下按鈕

clr tr0 ;關閉定時器

ljmp dkn ;跳轉到dkn

kn2: cjne a,#03h,dkn ;第三次按下按鈕

mov sec,#00h ;秒清0

mov a,sec ;取秒

mov b,#10 ;除數位10

div ab ;a/10,a為十位,b為個位

mov dptr,#table ;

movc a,@a+dptr

mov p0,a

mov a,b

mov dptr,#table

movc a,@a+dptr

mov p2,a

mov keycnt,#00h ;按鈕計數清0

dkn: jnb sp1,$ ;按鈕鬆開?未鬆開,等待

ljmp wt ;已鬆開,轉到等待下一次操作

dely10ms:

mov r6,#20 ;這段程式是10ms延時程式

d1: mov r7,#248

djnz r7,$

djnz r6,d1

retint_t0:

inc tcnta ;tcnta+1

mov a,tcnta ;

cjne a,#100,next ;計數到100否?未到,轉移到next

mov tcnta,#00h ;已到,tcnta=0

inc tcntb ;進位到tcntb

mov a,tcntb ;

cjne a,#4,next ;計數器計滿400個數(到一秒)

mov tcntb,#00h ;tcntb=0

inc sec ;秒+1

mov a,sec ;

cjne a,#100,done ;沒到100秒。轉移到更新顯示

mov sec,#00h ;秒清0

done: mov a,sec ;後面同上,是重新整理顯示

mov b,#10 ;

div ab

mov dptr,#table

movc a,@a+dptr

mov p0,a

mov a,b

mov dptr,#table

movc a,@a+dptr

mov p2,a

next: reti

table: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;數字01234567890七段碼end

3樓:圖圖

org 000h,00h復位入口

ajmp跳轉到主

org 000bh;入口定時器0中斷

ljmp pt0j;。跳過pt0j

org 0100h;主要主程式入口

main:mov tmod,#05h;模式暫存器配置定時器0作為16位計數器,計數器的脈衝輸入p3.4

mov th0 ,#0ffh;配置計數器的初始值0ff9ch,計數100個脈衝,只是在時間溢位,中斷產生

mov tl0,#9ch;

clr f0;明確的共同標誌setb tr0;啟動計數器setb et0;啟用定時器0中斷的

setb ea;總允許中斷

這裡,這裡aj

微控制器組合語言程式設計,全國微控制器組合語言程式設計師

org 0000h main mov dptr,3000h clr r0 clr r1 clr r2 mov r3,100 loop mov a,dptr clr c cjne a,0h,loop1 inc r0 djnz r3,loop loop1 rl a jc fushu inc r1 djn...

組合語言微控制器,組合語言怎麼寫入微控制器

rlc 是帶進位的迴圈左移,rlc a即將a的內容左移一位,將進位位c中的值移到累加器a的最低位,a的最高位移到c裡。譬如說 設a 01000001,c 1 則如果執行rl 則a 10000010,c 1 a所有位左移一位,最低位補零,c不參加移位操作,保持原值不變 如果執行rlc後,則a 1000...

微控制器組合語言的幾個疑問

靈若伊雪 1 r1 20h 不是一條指令,而只是一種說明,表明r1暫存器中的內容是20h。這個20h是地址還是資料,與這個說明無關。2 在指令 mov r1,40h 中,r1 是間接定址方式,表明r1中的內容是地址,指令的功能表明是將立即數40h傳送到r1指定的地址中。3 在指令中容易混淆的是立即數...