单片机复习2
寄存器及其存储器映射
单片机的时钟信号
中断向量表每个入口地址 中断向量表位于程序地址的最低处
操作数寻址方式
一、寄存器寻址
操作数在寄存器中 寻址空间:R0~R7、A、B(AB形式)和DPTR
【例】若(R0)=30H,执行MOV A,R0后,(A)=30H
二、 直接寻址
操作码后接字节存放的是操作数地址 寻址空间:片内RAM低128字节SFR(符号形式)
【例】若(50H)=3AH ,执行MOV A,50H后,(A)=3AH
另一类直接寻址是转移目标地址的寻址。如:LJMP ADDR16
三、寄存器间接寻址
寄存器中的内容是操作数的地址 寻址空间:片内RAM (@Ri、 SP)片外RAM (@Ri、@DPTR)
[例]若(RO) =30H,(30H) =5AH执行MOV A, @RO后,(A) =5AH
四、立即寻址
操作数在指令编码中 寻址空间:ROM
【例】执行MOV A,#50H 结果:(A)=50H
五、变址寻址
操作数地址:基地址+偏移量 寻址空间:ROM
【例】(A)=0FH(DPTR)=2400H 执行MOVC A,@A+DPTR”后结果:(A)=88H
标志位意义 算数运算结果要影响PSW中标志位
CY为1,无符号数(字节)加减发生进位或借位
OV为1,有符号数(字节)加减发生溢出错误
AC为1,十进制数(BCD码) 加法的结果应调整 进位标志
P为1,存于累加器A中操作结果的“1"的个数为奇数
■返回
RET子程序返回
RETI;中断子程序返回
RETI具有清除内部相应的中断状态触发器(以保证正确的中断逻辑)的功能。
中断返回:中断服务程序最后指令必须是RETI,其功能:
将断点从堆栈弹送PC,CPU从原断点继续执行
将相应优先级状态触发器清0,恢复原来工作状态
注意:不能用RET代替RETI
C51数据的存储分区
用关键字“at”定义变量存放的首地址
idata int y at 0x30; // idata区域整型变量y的首地址为0x30
xdata char string[20] at 0x3000; //xdata中字符型数组string的首地址为0x3000
编程:将片内20H单元开始的30个单元数据传送到片外RAM的3000H开始的单元
方法一,用C语言 定义两个指针,一个指向片内,一个指向片外:
unsigned char *p1;
unsigned char xdata *p2;
unsigned char i;
p1=0x20;
p2=0x3000;
for(i=0;i<30;i++)
(p2++)=(p1++);
方法二,用C语言 定义两个带有地址的数组
unsigned char a1[30] at 0x20;
unsigned char xdata a2[30] at 0x3000;
unsigned char i;
for(i=0;i<30;i++)
a2[i]=a1[i];
两种触发方式比较
电平方式时, INTx低电平必须保持到响应时,否则就会漏掉;在中断服务结束前,INTx低电平必须撤除,否则中断返回之后将再次产生中断。
边沿方式时,采样到有效下降沿后,在IEx中将锁存一个1。若CPU暂时不能响应,申请标志也不会丢失,直到响应时才清0。
定时/计数器的结构和工作原理 —实质是16位加1计数器
定时器模式时,对内部机器周期计数。定时时间=计数值*机器周期
计数器模式时,是对外部脉冲计数。脉冲由T0(P3.4)或T1(P3.5)引脚输入。
工作方式选择