㈠ 單片機加法類指令
CLR
A
並不清理進位
帶進位與0相加時,就把進位(只可能是0或1)放進A
中
了
然後再傳送出去
53單元也只能是0或1
㈡ 怎樣用單片機編程。兩個獨立按鍵,控制數碼管的加減
這個很容易嘛,你先設置一個寄存器,然後一直掃描兩個按鍵(假設K1按下為加,K2按下為減),假設檢測到K1被按下,寄存器就加1,如果檢測到K2被按下,寄存器就減1;然後再調用顯示函數就OK了。、 ORG 0000H
LJMP START
ORG 0030H
START:
MOV R2, #1
LOOP:
CALL DISP
JB P1.6, NEXT
CALL DL10MS
JB P1.6, NEXT
JNB P1.6, $
DJNZ R2, NEXT
MOV R2, #10
NEXT:
JB P1.7, LOOP
CALL DL10MS
JB P1.7, LOOP
JNB P1.7, $
INC R2
CJNE R2, #11, LOOP
JMP START
;----------------------------------------
DISP:
MOV A, R2
DEC A
MOV DPTR, #TAB
MOVC A, @A + DPTR
MOV P2, A
RET
DL10MS:
MOV R6, #20
DJNZ R7, $
DJNZ R6, $ - 2
RET
;----------------------------------------
TAB:
DB 0C0H, 0F9H, 0A4H, 0B0H, 99H
DB 92H, 82H, 0F8H, 80H, 90H
;----------------------------------------
END
㈢ 單片機 機械周期 加減乘除
以51單片機為例:
加法:ADD 1個機器周期(12個時鍾周期)
減法:SUBB 1個機器周期(12個時鍾周期)
乘法:MUL 4個機器周期(48個時鍾周期)
除法:DIV 4個機器周期(48個時鍾周期)
㈣ PIC單片機的減法指令和加法指令是怎樣影響STATUS中的進位位的
PIC單片機執行加法指令時,計算結果如果沒有進位,狀態寄存器STATUS中的標志位「C」等於0,有進位時等於1。
PIC單片機執行減法指令時,計算結果如果沒有借位,狀態寄存器STATUS中的標志位「C」等於1,有借位時等於0。
㈤ 51單片機按鍵加法運算,求教
這是一個簡易的計算器,有加減乘除運算。
#include<reg51.h>
#define uchar unsigned char;
uchar LED1,LED2,LED3,LED4;
uchar keyval,calflag,s_dat,d_dat;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
unsigned int number,r_dat;
void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;i<a;i++)
for(j=0;j<1000;j++);
}
void dealdat()
{
switch(calflag)
{
case 0:
r_dat=s_dat+d_dat;
break;
case 1:
r_dat=s_dat-d_dat;
break;
case 2:
r_dat=s_dat*d_dat;
break;
case 3:
r_dat=s_dat/d_dat;
break;
default:break;
}
LED1=(r_dat/1000)%10;
LED2=(r_dat/100)%10;
LED3=(r_dat/10)%10;
LED4=r_dat%10;
}
uchar kbscan(void)
{
unsigned char sccode,recode;
P3=0x0f; //發0掃描,列線輸入
if ((P3 & 0x0f) != 0x0f) //有鍵按下
{
delay(20); //延時去抖動
if ((P3&0x0f)!= 0x0f)
{
sccode = 0xef; //逐行掃描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return 0; //無鍵按下,返回0
}
void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0){keyval=0xff;return;}
switch(key)
{
case 0x11:keyval=7;break;
case 0x12:keyval=4;break;
case 0x14:keyval=1;break;
case 0x18:keyval=10;break;
case 0x21:keyval=8;break;
case 0x22:keyval=5;break;
case 0x24:keyval=2;break;
case 0x28:keyval=0;break;
case 0x41:keyval=9;break;
case 0x42:keyval=6;break;
case 0x44:keyval=3;break;
case 0x48:keyval=11;break;
case 0x81:keyval=12;break;
case 0x82:keyval=13;break;
case 0x84:keyval=14;break;
case 0x88:keyval=15;break;
default:keyval=0xff;break;
}
}
void t0isr() interrupt 1
{
TH0=0xf4;
TL0=0x48;
switch(number)
{
case 0:P2=0x04;P0=distab[LED1];break;
case 1:P2=0x08;P0=distab[LED2];break;
case 2:P2=0x01;P0=distab[LED3];break;
case 3:P2=0x02;P0=distab[LED4];break;
default:break;
}
number++;
if(number>3)number=0;
}
main()
{
TMOD = 0x01;
number = 0;
TH0=0xf4;
TL0=0x48;
TR0=1;
ET0=1;
EA=1;
LED1=0;
LED2=0;
LED3=0;
LED4=0;
while(1)
{
getkey();
switch(keyval)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
LED3=LED4;
LED4=keyval;
LED1=0;
LED2=0;
break;
case 10:break; //"ON"
case 11: //"="
d_dat=LED3*10+LED4;
dealdat();
break;
case 12: //"/"
calflag=3;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
case 13: //"*"
calflag=2;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
case 14: //"-"
calflag=1;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
case 15: //"+"
calflag=0;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
default:break;
}
}
}
㈥ 在51系列單片機的指令系統中,其加法,減法,乘法和除法必須又累加器A
是的,乘法和除法的兩個運算數必須是一個放在累加器A中,另一個在寄存器B中,運算結果也是商放在A 中,余數放在B 中,積的高位放A中,低位放B 中,除一些自減1運算可以在其它寄存器中進行, 加減法的一個操作數也放要在A中,你看一下51單片機的運算指令就明白了
㈦ 51單片機怎麼實現兩位數的加減
51單片機
51單片機是對所有兼容Intel 8051指令系統的單片機的統稱。該系列單片機的始祖是Intel的8004單片機,後來隨著Flash rom技術的發展,8004單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用於工業測控系統之中。很多公司都有51系列的兼容機型推出,今後很長的一段時間內將佔有大量市場。51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。需要注意的是51系列的單片機一般不具備自編程能力。
中文名
51單片機
外文名
mcu
定義
兼容Intel 8031系統的單片機統稱
始祖
Intel公司始創的8004單片機
缺點
不具備自編程能力
快速
導航
功能
學習
模擬
區別
主要產品
*Intel(英特爾)的:80C31、80C51、87C51,80C32、80C52、87C52等;
*ATMEL(愛特梅爾)的:89C51、89C52、89C2051,89S51(RC),89S52(RC)等;
*Philips(飛利浦)、華邦、Dallas(達拉斯)、Siemens(西門子)等公司的許多產品;
STC(國產宏晶)單片機:89c51、89c52、89c516、90c516等眾多品牌。
功能
·8位CPU·4kbytes程序存儲器(ROM) (52為8K)
·128bytes的數據存儲器(RAM) (52有256bytes的RAM)
·32條I/O口線·111條指令,大部分為單位元組指令
·21個專用寄存器
·2個可編程定時/計數器·5個中斷源,2個優先順序(52有6個)
·一個全雙工串列通信口
·外部數據存儲器定址空間為64kB
·外部程序存儲器定址空間為64kB
·邏輯操作位定址功能·雙列直插40PinDIP封裝
·單一+5V電源供電
CPU:由運算和控制邏輯組成,同時還包括中斷系統和部分外部特殊功能寄存器;
RAM:用以存放可以讀寫的數據,如運算的中間結果、最終結果以及欲顯示的數據;
ROM:用以存放程序、一些原始數據和表格;
I/O口:四個8位並行I/O口,既可用作輸入,也可用作輸出
T/C:兩個定時/記數器,既可以工作在定時模式,也可以工作在記數模式;
五個中斷源的中斷控制系統;
一個全雙工UART(通用非同步接收發送器)的串列I/O口,用於實現單片機之間或單片機與微機之間的串列通信;
片內振盪器和時鍾產生電路,石英晶體和微調電容需要外接。最佳振盪頻率為6M—12M。
學習
作為一個初學者,如何單片機入門?
實際上,其實不需要多少東西,會簡單的C語言,知道51單片機的基本結構就可以了。一般的大學畢業生都可以了,自學過這2門課程的高中生也夠條件。設備上,一般是建議購買一個模擬器,例如,的「雙功能下載線」就具有良好的穩定性和較快的下載速度,上位機可擴展,可以下載更多的單片機及嵌入式晶元。通過實驗,這樣才可以進行實際的,全面的學習。日後在工作上,模擬器也大有用處。還有,一般光有模擬器是不行,還得有一個實際的電路,即學習板,如圖,即為,單片機最小系統。
㈧ 單片機加法指令
假定(A)=85H (R0)=20H (20H)=OAFH。執行指令 ADD A, @RO 後,累加器A的內容為(0X34 ),CY的內容為(1 ),AC的內容為(1 ),AC的內容為( 1),0V的內容為(1 )。
我的回答都是以8位單片機為准。這個指令功能就是取單元20H的值AFH與85H相加,
結果本來應該是134H,沒辦法,8位嘛,所以:
CY:進位標志位;
當CY=1時,表示操作結果最高位(位7)有進位或借位。
CY=0時,表示操作結果最高位(位7)沒有進位或借位。
(最高位有進位,CY=1)
AC:半進位標志位;
該位表示當進行加法或減法運算時,低半位元組向高半位元組是否有進位或借位;
當AC=1時,表示低半位元組向高半位元組有進位或借位;
AC=0時,表示低半位元組向高半位元組沒有進位或借位;
(低半位元組F+5=14,有進位,AC=1)
OV:溢出標志位,
該位表示在進行有符號數的加減法時是否發生溢出;
當0V=1時,表示有符號數運算結果發生了溢出,
OV=0時,表示有符號數運算結果沒有溢出。
(超出8位,果斷溢出)
㈨ 單片機實現計算器加減乘除功能。
計算器上的按鍵都對應一個矩陣鍵盤按鍵這樣就像你做一般的處理一樣了,按下一個數a,當加號鍵按下時就執行a+num(設置變數),再按b,當按下=時 執行num=b,進而得到a+b的值,只是這種想法在執行=運算時就要就要有好幾種情況了,不過也算是一種方法吧,希望對你有幫組。
㈩ 單片機一次加減乘除運算要多少時間
單片機有硬體乘除法的極少。51系列中的也只有一個八位的乘除法指命「MUL AB或DIV AB」。它們是基本指命周期時間的四倍。就是在12M晶振下它們運行一次是4微秒。如果用軟體來做就看你所需處理位數和編法了,一般要數毫秒。