单片机80c51哈理工.doc
文本预览下载声明
1.程序状态字:
CY: 进位标志。有进位/借位时置1
AC:半进位标志。D3-D4进位/借位时置1
OV:溢出标志。带符号数超出-128~127置1,乘法结果超过255,除数为0
P: 奇偶标志。A中的1的个数为奇数
F0:用户设置标志
RS1,RS0: 通用寄存器选择位
2.振荡周期:1/fOSC
时钟周期:2/fOSC
机器周期:12/fOSC=T
3. 并行I/O(P0~P3)
准双向:输入时先向口线写“1”
只有P1口没有第二功能,
P0口的第二功能:第8位地址和数据总线复用
P2口的第二功能:高8位地址
4. 并行口的负载能力
P0口的每一位口线可以驱动8个LSTTL负载。在作为通用 I/O口时,由于输出驱动电路是开漏方式,由集电极开路(OC门)电路或漏极开路电路驱动时需外接上拉电阻
P1、P2、P3口的每一位能驱动4个LSTTL负载。它们的输出驱动电路设有内部上拉电阻,所以可以方便地由集电极开路(OC门)电路或漏极开路电路所驱动,而无须外接上拉电阻。
5.单片机控制信号引脚
ALE:地址锁存信号输出端,输出频率为6/fosc的时钟脉冲。
RST:复位引脚,复位脉冲宽度要大于2个机器周期。
EA:外接程序存储器,此引脚接地,否则接高电平。
PSEN:片外程序存储器读选通,低电平有效
6.低功耗操作方式
①节电方式
将PCON中的IDL(PCON.0)置位,就进入节电方式。
此时,提供给CPU的时钟信号被切断,但时钟信号仍提供给RAM、定时器、中断系统合串行口,同时CPU的状态被保留起来。
功耗为:5V*3.7mA=18.5mW。
退出节电方式的方法:①任何一种中断被激活;②硬件复位。
②掉电方式
将PCON中的PD(PCON.1),就进入掉电方式。
此时,片内振荡器停止工作,时钟冻结,一切工作都停止只有片内RAM的内容被保持,SFR内容也被破坏。
功耗为2V*0.05mA=0.1mW。
退出掉电方式的方法:硬件复位。
7.数据类型及存储类型
只有bit和unsigned char两种数据类型可以直接支持机器指令,必须慎重变量和数据类型的选择。?
对bit类型定义的限制:不能定义该类型的指针和数组。
为了简化程序书写时的麻烦,可以程序的开始,书写下列语句:
#define uchar unsigned char
#define uint unsigned int
存储类型:
code--程序,MOVC @A+DPTR访问
xdata--外部数据,由MOVX @DPTR访问
pdata--分页外部数据,由MOVX @Ri访问
data--直接寻址内部数据存储区
bdata--可位寻址内部数据存储区
idata--间接寻址内部数据存储区
例:说明下列语句的含义
Bit b1;
code char tb [10];
idata int a;
data char v;
8.sbit, sfr简化对8051的SFR的访问
sfr SCON=0x98;
sfr TMOD=0x89;
sfr P0=0x80;
sbit P0_1=P0^1;
sbit P0_7=P0^7;
另外,头文件reg51.h中有所有8051的SFR及可位寻址的位的定义,但没有定义P0~P3口的各位,且所定义的所有符号都是大写的。
例如:
#include reg51.h
sbit P1_0=P1^0;
main()
{
P1=0x10;TMOD=0x01;TR0=1; EA=1;
………
}
9.将PORTA定义为外部I/O口,地址为0xff0,长度为8位。方法如下:
#include absacc.h#define PORTA XBYTE[0xff0]
例如:
#include absacc.h
#define PORTA XBYTE[0xff0]
#define PORTB XBYTE[0xff1]
main()
{ uint i;
i=PORTA; /*将外设PORTA的数据读入*/
PORTB=i; /*将数据输出给外设PORTB */
}
为了简化程序的书写,一般在c51程序的开始常写出下面3调预处理命令:
#include reg51.h
#define uchar unsigned char
#define uint unsigned int
10.运算符:算数、关系、逻辑、位的运算符
例1:假设x=0x03,x=0x05为整数,请问下列表达式的结果?
x/y, x%y, Xy, xy, x=y2
例2:执行下列程序后,a,b,c的值格式多少?
main()
{ unsigned char a=0xc3,b
显示全部