stc80c51单片机基础知识,汇编,c51方面的

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
B:00H TH0:00H
PSW:00H TL0:00H
SP:07H TH1:00H
DPTR:0000H TL1:00H
P0~P3:FFH SCON:00H
IP:×××00000B SBUF:不定
IE:0××00000B PCON:0×××0000B
内连的库函数
内连函数描述
_crol_字节左移
_cror_字节右移
RS1、RS0 = 01 —— 1区(08H~0FH)
RS1、RS0 = 10 —— 2区(10H~17H)
RS1、RS0 = 11 —— 3区(18H~1FH)
(5)0V:溢出标志位。表示Acc在有符号数算术运算中的溢出,什么是溢出我们稍后再谈吧。
(6)P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,不然为0。
const unsigned int c=100; //用const定义c为无符号int常量并赋值
特殊寄存器:
符号
地址
功能介绍
B
F0H
B寄存器
ACC
E0H
累加器
PSW
D0H
程序状态字
IP
B8H
中断优先级控制寄存器
P3
B0H
P3口锁存器
IE
A8H
中断允许控制寄存器
P2
A0H
P2口锁存器
SBUF
99H
串行口锁存器
00H/0
\n
换行符(LF)
0AH/10
\r
回车符(CR)
0DH/13
\t
水平制表符(HT)
09H/9
\b
退格符(BS)
08H/8
\f
换页符(FF)
0CH/12
\'
单引号
27H/39
\"
双引号
22H/34
\\
反斜杠
5CH/92
表5-1常用转义字符表
常量可用在不必改变值的场合,如固定的数据表,字库等。常量的定义方式有几种,下
void timer0 (void) interrupt 1 using 2
{
if (++interruptcnt == 4000)
{/* count to 4000 */
second++; /* second counter */
interruptcnt = 0; /* clear int counter */
SCON
98H
串行口控制寄存器
P1
90H
P1口锁存器
TH1
8DH
定时器/计数器1(高8位)
TH0
8CH
定时器/计数器1(低8位)
TL1
8BH
定时器/计数器0(高8位)
TL0
8AH
定时器/计数器0(低8位)
TMOD
89A
定时器/计数器方式控制寄存器
TCON
88H
定时器/计数器控制寄存器
DPH
83H
数据地址指针(高8位)
val = *ip;val = *xp;val = *xp;
编译后的
代码MOV R0,ipMOV DPL,xp+1MOV R1,p + 2
MOV val,@R0MOV DPH,xpMOV R2,p + 1
MOV A,@DPTRMOV R3,p
MOV val,ACALL CLDPTR
指针大小1 byte2 byte3 byte
例:某运算结果是78H(01111000),显然1的个数为偶数,所以P=0。
4、DPTR(DPH、DPL):数据指针,能用它来访问外部数据存储器中的任一单元,如果不用,也能作为通用寄存器来用,由我们自已决定如何使用。16位,由两个8位寄存器DPH、DPL组成。主要用于存放一个16位地址,作为访问外部存储器(外RAM和ROM)的地址指针。
面来加以说明。
#difine False 0x0; //用预定义语句可以定义常量
#difine True 0x1; //这里定义False为0,True为1
//在程序中用到False编译时自动用0替换,同理True替换为1
unsigned int code a=100; //这一句用code把a定义在程序存储器中并赋值
代码长度4 bytes9 bytes11 bytes + library call
执行时间4 cycles7 cycles13 cycles
重入函数特性(reentrant)允许你声明一个重入函数。即可以被递归调用的函数。如:
int calc (char i, int b) reentrant
{
int x;
下面的示例程序说明了使用不同的指针在代码长度,占用数据空间和运行时间上的不同。
DescriptionIdata PointerXdata PointerGeneric Pointer
C源程序idata *ip;char xdata *xp;char *p;
char val;har val;char val;
}
}
不同的参数和数据类型所占用的寄存器:
参数char,int,long,generic
数目1-byte pointer2-byte pointerfloatpointer
1R7R6 & R7R4-R7R1—R3
2R5R4 & R5
3R3R2 & R3
返回各种数据时所用的CPU寄存器:
返回数据类型寄存器描述
(2)AC:辅助进位标志也叫半进位标志。用于表示Acc.3有否向Acc.4进位
例:57H+3AH(01010111+00111010)
(3)F0:用户标志位,由我们(编程人员)决定什么时候用,什么时候不用。
(4)RS1、RS0:工作寄存器组选择位。这个我们已知了。
RS1、RS0 = 00 —— 0区(00H~07H)
x = table [i];
return (x * b);
}
中断服务程序:在函数声明时包括interrupt,将把所声明的函数定义为一个中断服务程序。另外,你可以用using定义此中断服务程序所使用的寄存器组。
unsigned int interruptcnt;
unsigned char second;
5、P0、P1、P2、P3:这个我们已经知道,是四个并行输入/输出口的寄存器。它里面的内容对应着管脚的输出。
6、SP:堆栈指针。(专用于指出堆栈顶部数据的地址。)
单片机管脚图:
单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。
⒈电源:
⑴ VCC -芯片电源,接+5V;
⑵ VSS -接地端;
2、振蒎电路:单片机是一种时序电路,必须供给脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶体震荡器,电容,连上就能了,按图1接上即可。
3、复位管脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。
4、EA管脚:EA管脚接到正电源端。至此,一个单片机就接好,通上电,单片机就开始工
下面我们逐一介绍sfr各位的用途
(1)CY:进位标志。用于表示Acc.7有否向更高位进位。8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。
例:78H+97H(01111000+10010111)
数据类型
长度
值域
unsigned char
单字节
0~255
signed char
单字节
-128~+127
unsigned int
双字节
0~65535
signed int
双字节
-32768~+32767
unsigned long
四字节
0~4294967295
signed long
四字节
-2147483648~+2147483647
作了。
复位电路:
复位对单片机来说,是程序还没有开始执行,是在做准备工作。显然,准备工作不需要太长的时间,复位只需要5ms的时间就能了。如何进行复位呢?只要在单片机的RST管脚上加上高电平,就能了,按上面所说,时间不少于5ms。
⒊复位后CPU状态
PC:0000H TMOD:00H
Acc:00H TCON:00H
idata间接访问的内部数据存储器;可以访问所有的内部存储器空间(256 bytes)。
bdata可位寻址的内部数据存储器;可以字节方式也可以位方式访问(16 bytes)。
xdata外部数据存储器(64 Kbytes);通过MOVX @DPTR访问。
pdata分页的外部数据存储器(256 bytes);通过MOVX @Rn访问。
⑶ RST/VPD:复位/备用电源。
① RST(Reset)功能:复位信号输入端。
② VPD功能:在Vcc掉电情况下,接备用电源。
⑷ EA/Vpp:内外ROM选择/片内EPROM编程电源。
① EA功能:内外ROM选择端。
② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
单片机结构图:
1、ACC:累加器,常常用A表示。这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后我们将学到指令,能发现,所有的运算类指令都离不开它。
2、B:一个寄存器。在做乘、除法时8放乘数或除数,不做乘除法时,随你怎么用。
⒋ I/O线
80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51的芯片,下面我们就看一下如何给它连线。
1、电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40管脚,负极(地)接20管脚。
floatR4—R732-Bit IEEE format
generic pointerR1—R3Memory type in R3, MSB R2, LSB R1
用#pragma asm和#pragma endasm预处理指示器来在你的C语言程序中插入汇编指令。
1.数据类型:在标准C语言中基本的数据类型为char,int,short,long,float和double,而在C51编译器中int和short相同,float和double相同,这里就不列出说明了。下面来看看它们的具体定义:
3、PSW:程序状态字。这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们能了解CPU的当前状态,并作出对应的处理。它的各位功能请看表2
D7
D6
D5
D4
D3
D2
D1
D0
CY
AC
F0
RS1
RS0
OV
P
表2
PSW也称为标志寄存器,了解这个对于了解单片机原理非常的重要,存放各有关标志。其结构和定义如下:
_irol_整数左移
_iror_整数右移
_lrol_长整数左移
_lror_长整数右移
_nop_空操作
_testbit_判断并清除(8051 JBC指令)
存储器类型描述
code程序空间(64 Kbytes);通过MOVC @A+DPTR访问。
data直接访问的内部数据存储器;访问速度最快(128 bytes)。
bitCarry Flag
char,unsigned char,1-byte pointerR7
int, unsigned int, 2-byte pointerR6 & R7MSB in R6, LSB in R7
long, unsigned longR4—R7MSB in R4, LSB in R7
DPL
82H
数据地址指针(低8位)
SP
81H
堆栈指针
P0
80H
P0口锁存器
PCON
87H
电源控制寄存器
寄存器间接寻址,只能用R0或R1存放等寻找的数据:
MOV R7,#20
MOV R0,#30H
LOOP:MOV A,@R0
INC R0
DJNZ R7,LOOP
MCS-51单片机中断系统的结构:
5个中断源的符号、名称及产生的条件如下。
float
四字节
±1.175494E-38~±3.402823E+38
*
1~3字节
对象的地址
bit

0或1
sfr
单字节
0~255
sfr16
双字节
0~65535
sbit

0或1
表4-1 KEIL uVision2 C51编译器所支持的数据类型
转义字符
转义字符
含义
ASCIFra Baidu bibliotek码(16/10进制)
\o
空字符(NULL)
INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。
INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。
T0:定时器/计数器0中断,由T0计满回零引起。
⒉时钟:XTAL1、XTAL2 -晶体振荡电路反相输入端和输出端。
⒊控制线:控制线共有4根,
⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲
① ALE功能:用来锁存P0口送出的低8位地址
② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
⑵ PSEN:外ROM读选通信号。
相关文档
最新文档