微控制器程式設計 將位元組的數乘以10。3種方法考場中急

2022-09-26 00:05:14 字數 4742 閱讀 7608

1樓:匿名使用者

c://sol為結果,var為變數

1、sol=0;for(i=0;i<10;i++) sol+=var;

2、sol = var<<3 + var<<1;

3、sol = var*10;

彙編:sol暫存器儲存結果,var為變數,假設1個位元組的數為無符號數,乘積結果不超過256

1、xor a

mov r1,#10

loop:add a,#var

djnz r1,loop

mov sol,a

ret2、mov a,#var

rl a

rl a

rl a

mov r1,a

mov a,#var

rl a

add a,r1

mov sol,a

ret3、mov a,#var

mov b,#10

mul ab

mov sol,aret

2樓:匿名使用者

一 一個位元組的數是0-256 還是ask碼的一個數?

二 用匯編還是c?

3樓:匿名使用者

i<<3 + i<<1;

i*10;

4樓:匿名使用者

1樓典型的**一個位元組是8位,最大的值蠻是255吧,總共256個數,還0-256.我呸,還彙編還是c。

微控制器組合語言。編寫對一個多位元組數乘以10的運運算元程式

5樓:匿名使用者

其實這個可以分解為:x*10=x*8+x*2,相當於x<<3+x<<1;即,這個數左移三位加左移一位。

輸入:r0,n,即首位元組地址和位數

mul10:

mov a,r0

mov b,a

add a,#10h

mov r1,a

mov a,@r0

mov r2,#n

mov r3,#3

clr 00h

mul100:

clr c

mul101:

rlc a

mov @r0,a

jb 00h,mul1011

mov @r1,a

inc r1

mul1011:

inc r0

djnz r2,mul101

clr a

rlc a

mov @r0,a

mov @r1,a

mov a,b

mov r0,a

add a,#10h

mov r1,a

setb 00h

djnz r3,mul100

mov r2,#(n+1)

clr c

mul102:

mov a,@r0

addc a,@r1

mov @r0,a

inc r0

inc r1

djnz r2,mul102ret

6樓:無線開發工程師

x*10=x*(8+2);沒乘法指令的這樣最快。

求一個微控制器的程式設計題

7樓:晏有情

用匯編比較簡單,可以直接定址。mov a,30h,再判斷正負,正數:mov 40h,a;負數:mov 50h,a。

用c的話,先定義指標指向30h,40h及50h的單元,比如

char *pi=0x0030;char *zheng=0x0040;char *fu=0x0050;char i=0;

while(i<10) //再判斷正負

汗,不知不覺寫出來了,本來只是想提示一下。。。

判斷方法:首先負數在記憶體中儲存的是補碼,這樣我們就可以直接判斷第7位是否為1,為1表示該ram裡存的是負數,反之則為正數。

8樓:蒼莽塞外

org 0000h

sjmp main

org 0040h

main:mov r2,#40h ;r2用作計量正數的地址

mov r3,#50h ;r3用作計量負數的地址

mov r0,#30h ;r0用作計量陣列的地址

lp4: cjne @r0,#00h,lp0 ;這十個數中為零的數,不儲存,接著判斷下一個數

sjmp lp1

lp0:mov 22h,@r0 ;不為零的數放在記憶體地址為22h的單元中,通過判斷最高位來判斷正負

jb 17h,lp2 ;如果最高位為1,則為負數,在lp2程式段中把負數依次儲存;

sjmp lp3 ;如果最高位為0,則為正數,在lp3程式段中把正數依次儲存。

lp2:mov a,r3

mov r1,a

mov @r1,22h

inc r3 ;存取負數的單元地址依次加一

sjmp lp1

lp3:mov a,r2

mov r1,a

mov @r1,22h

inc r2 ;存取正數的單元地址依次加一

lp1:inc r0 ;存放陣列的單元地址依次加一

cjne r0,#3ah,lp4end

在微控制器中怎麼把一個位元組的最高位賦給一個變數?

9樓:

uchar dat, a;

a = (dat & 0x80) >> 7 ;

10樓:

引用樓上的

uchar dat, a;

a=dat<<1;

c語言中怎樣讀取一個8位位元組某一位的簡單

11樓:匿名使用者

這個我對微控制器的程式設計不算很瞭解,不過這條語句的執行時間已經很少很少了,似乎沒有必要改進了,這只是我的看法

12樓:幽黯之林

bit a;

a=(adcpsra)&(0x08);

比如adcpsra=11011000,和

00001000位與一下,就可以把該位取出來,結果是1,如果adcpsra=11010000,位與一下就是0,我說的對嗎

13樓:匿名使用者

哈哈!還沒有這種函式的

14樓:匿名使用者

優化一下

if((adcsra>>4) & 1)

4是位置,可修改

求微控制器組合語言怎樣程式設計才能實現將一個十六進位制數轉換為十進位制數 20

15樓:匿名使用者

用除法例如 0xff 轉換成十進位制數,百位十位個位分別存在r1、r2、r3中

在51微控制器中暫存器a中的數除以暫存器b中的數,商存在a,餘數存在bmov a,#0ffh

mov b,#100

mul a,b

mov r1,a //存百位mov b,a

mov b,#10

mul a,b

mov r2,a //存十位mov r3,b //存個位

16樓:

mov r6,#00h;存轉化後的數的低位mov r5,#00h;存轉化後的數的高位mov r7,#0ffh;為要轉化的

mov a,r7

cjne a,#00h,loop;判斷要轉化的數是否為0ajmp loop1

loop;mov a,r6

add a,#01h

da a

mov r6,a

addc a,#00h

da a

mov r5,a

djnz r7,loop

loop1:sjmp $

17樓:做而論道

一樓的,是在什麼地方抄的吧?文字註釋,看著眼熟。

呵呵,原來是我以前寫的答案。

18樓:匿名使用者

你確定你要的是十六進位制轉換成十進位制的程式?不是二進位制轉成十進位制的嗎?微控制器中的資料可都是二進位制的,只是通常用十六進位制表示罷了,我以前也犯過這個錯誤

51微控制器程式設計如何把一個字串裡的數字提取出來並轉化成浮點數?

19樓:匿名使用者

這個的話是可以的

內。容#include

#define uchar unsigned charuchar code table="abcd12.5";

main()

微控制器程式設計題:有三個無符號單位元組數分別存在於40h,41h,42h中找出最大的數,並存於43h中。

20樓:匿名使用者

第一個:

mov r0,#30h

mov b,#0

lp:mov a,@r0

cjne a,b,lp1

lp1:

jc,lp2

mov b,a

lp2:

inc r0

cjne r0,#3ah,lp

mov a,bret

51微控制器最簡單的C語言程式設計求教

你把裡面的數字轉換成二進位制,比如table 0 0x3f 00111111b 由於你這個是共陰極數碼管,高電平有效,所以寫一的地方對應的led都點亮 至於那七根數碼管以及一個小數點和二進位制位數對應關係你可以上網上查一下,簡單的說小數點也就是dp是最高位,其他的那七根數碼管從最上面那個開始順時針一...

PC機將千位數(如5142)傳送到微控制器中,怎麼在微控制器裡將他還原成原來的千位數。或者別的整體辦法

if temp 0 m 分離資料 turnh 0 turnh temp 1 0x30 turnh 10 turnh temp 2 0x30 turnh 10 turnh temp 3 0x30 turnh 10 turnh temp 4 0x30 send char tmp 5142就是0x1416...

微控制器裡面的暫存器的位元組地址是用來幹什麼的,怎麼用

首先,地址的作用只有一個,就是用來定址。其次,51微控制器的的片內暫存器都 版是可以位元組定址的。權 位元組地址就是用來定址一個位元組的內容,和位地址相對應,位地址就只能定址一個位 bit 在微控制器指令中定址任何一個位元組都需要位元組地址,定址任何一個位都需要位地址。所謂的ip ie不過是我們給這...