㈠ 单片机加法类指令
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微秒。如果用软件来做就看你所需处理位数和编法了,一般要数毫秒。