① 如何將單片機片內 20H 到 50H 單元賦值
ORG 0000H
LJMP START
START:
MOV R6, #08;學號8號
MOV R5,#80H;作為遞增或遞減結果緩存,初始值80H
MOV R0,#20H;存儲空間的起始地址
MOV R4,#31H;存儲空間中共有31個單元
LOOP1:
MOV A,R5
;先把緩存寫入存儲單元
MOV @R0,A
INC R0
DJNZ R4,INC_INC;每次R4都先會減一,減一之後等於0就執行下一行,否則就跳轉
;賦值完成
SJMP SEARCH_AA
INC_INC:
MOV A,R5
ADD A,R6 ;遞增
CJNE A,#0BBH,NE_BB;與最大值BBH比較,相等就執行下一行指令,不相等就跳轉到NE_BB,同時若A的值大於或者等於BBH,則C=0,否則C=1。
;等於 bbh,直接寫入緩存
LESS_BB:;小於 bbh,也直接寫入緩存
MOV R5,A
SJMP LOOP1
NE_BB:
JC LESS_BB
;大於 bbh,要開始遞減
;MOV R5,#0BBH;從BB開始遞減
;SJMP DEC_DEC
DEC_DEC:
MOV A,R5
SUB A,R6;遞減
CJNE A,#80H,NE_80;與最小值80H比較,相等就執行下一行指令,不相等就跳轉到NE_80,同時若A的值大於或者等於80H,則C=0,否則C=1。
;等於 80h,直接寫入緩存
GREATER_80:;大於 80h,也直接寫入緩存
MOV R5,A
MOV @R0,A
INC R0
DJNZ R4,DEC_DEC;每次R4都先會減一,減一之後等於0就執行下一行,否則就跳轉
;賦值完成
SJMP SEARCH_AA
NE_80:
JNC GREATER_80
;MOV R5,#80H;從80開始遞增
SJMP INC_INC
SEARCH_AA:
MOV R0,#20H;存儲空間的起始地址
MOV R4,#31H;存儲空間中共有31個單元
MOV 51H,#00;先清零
SEARCH_NEXT:
MOV A, @R0
CJNE A,#0AAH,NE_AA;
;有 AAH 這一數據
MOV 51H,#01
SJMP ENDEND
NE_AA:
DJNZ R4,SEARCH_NEXT
SJMP ENDEND
ENDEND:
END
② 單片機中斷程序中為什麼要重新賦值
這個太好理解啦,就像你用一隻桶來裝水,你知道這只桶能裝10公斤水就會溢出。你如果想往桶里裝2公斤水想讓他溢出,你就得先給它裝進8公斤水。溢出以後你知道裝了2公斤他滿啦(滿了以後會自動全部倒掉,是空的啦),下次如果還是需要裝2公斤就讓他溢出,你不是還得先裝進8公斤水嗎?不然2公斤水怎麼會溢出呢?呵呵,簡單吧!
按計數寄存器的原理也是一樣的,一般每秒到65535才會溢出,如果你的單片機根據晶振頻率和預分頻的結果是每秒15625,那麼你就得給計數寄存器先賦值49910,也就是C2F6。溢出後(計數寄存器的數值會自動清0),下次中斷產生也需要在15625的時候,這個時候如果是沒有預先的49910,就不能達到65535的溢出條件,就不會產生中斷,所以每次執行玩這個中斷程序都要給計數寄存器賦值。除非你只用一次溢出中斷,可以不用再賦值。
③ C語言 單片機IO口賦值
首先要弄清楚io口的賦值!!
使用並行輸數據只能八位。所有,oxfffe要取出高八位和低八位!!
因為不存在取單獨某位的問題,所有可以使用簡單的移位語句
p1=(oxfffe<<8);
//左移八位,得p1=oxfe
p2=(oxfffe>>8);
//右移8位,得p2=oxff
你這個程序的錯誤在於,p1口使用並行方法輸送數據只能一次傳輸8位,而oxfffe位十六位,溢出錯誤!!
④ 51單片機賦值
CHRAM:
MOV DPTR,#6000H
MOV R2,#21H
MOV A,#0FH
LOOP:
MOVX @DPTR ,A
INC DPTR
DJNZ R2,LOOP
MOV DPTR,#6000H
MOV R2,#21H
LOOP1:
MOV DPH,#60H
MOVX A,@DPTR
MOV DPH,#50H
MOVX @DPTR,A
INC DPTR
DJNZ R2,LOOP1
RET
⑤ 單片機數組賦值問題!
這個程序我已經調試過可以使用,放到數組中應該為了用數碼管顯示吧
uchar
i=0,j=0,z=0,m=0;
//i-整數位數,j-小數位數
float
a=0,b=0;
//a-整數,b-小數
uint
c=0,d=0;
uchar
k[8]={0};//數組設大一點沒關系的
adval=P1
a=ad_vol;
ad_vol=(float)adval*5.0/255
d=a;
c=a;
while(c)
{
k[i]=c%10;
c=c/10;
i++;
}
for(
m=0;m
評論
0
0
載入更多
⑥ 單片機中th0,tl0賦值什麼用
單片機中,th0、tl0是定時器0的計數單元,實行加計數。對th0、tl0賦值也叫賦初值,目的就是在此基礎上再計數多少次th0、tl0同時等於0(發生溢出)。
⑦ 51單片機的寄存器如何賦值
這要看是寫什麼程序了,用匯編寫程序,用MOV指令,直接定址方式賦值,如
MOV TMOD , #20H
MOV TH0 , #3CH
MOV TL0 , #0B0H
用C語言寫程序就更簡單,也好理解,還是上面三個寄存器賦值
TMOD=0x20;
TH0=0x3c;
TL0=0xb0;
⑧ 單片機賦值問題
這樣說你明白了么
⑨ 51單片機引腳賦值
可以的,P3=0x01;P3<<=1;那麼結果是:P3=0x02;C=0
P3=0x01;_crol_(P3,1);那麼結果是:P3=0x02;C不變。
⑩ 單片機賦值單片機為什麼是拿16進制的值來賦值
首先,賦幾進制的值對單片機來說是一樣的。因為經過編譯之後都是二進制,單片機也只認識二進制。
賦值時使用16進制是為了我們容易看。
因為單片機的寄存器很多都是按位設置的,與之對應的就是二進制。但是二進制第一不容易書寫,第二不容易閱讀,這兩點對於程序來說是致命的。16進制最接近二進制,每一位代表4位二進制,熟練以後一眼就能看出對應的二進制是多少,容易書寫、容易閱讀、又不容易出錯。所以就用16進制了。