||
符 号 ;地 址 ;注 释
*ACC ;E0H ;累加器
*B ;F0H ;乘法寄存器
*PSW ;D0H ;程序状态字
SP ;81H ;堆栈指针
DPL ;82H ;数据存储器指针低8位
DPH ;83H ;数据存储器指针高8位
*IE ;A8H ;中断允许控制器
*IP ;D8H ;中断优先控制器
*P0 ;80H ;端口0
*P1 ;90H ;端口1
*P2 ;A0H ;端口2
*P3 ;B0H ;端口3
PCON ;87H ;电源控制及波特率选择
*SCON ;98H ;串行口控制器
SBUF ;99H ;串行数据缓冲器
*TCON ;88H ;定时器控制
TMOD ;89H ;定时器方式选择
TL0 ;8AH ;定时器0低8位
TL1 ;8BH ;定时器1低8位
TH0 ;8CH ;定时器0低8位
TH1 ;8DH ;定时器1高8位
带*号的特殊功能寄存器都是可以位寻址的寄存1、内部函数
有这样一些函数,用汇编语言编写,非常直接、简单而且目标码很短;而用C语言编写,却目标码很长。对于用汇编语言编写的这类库函数叫做内部函数。内部函数,在C51中,已经按C的规范用汇编语言写好。用户可以直接当作C语言函数调用它们。内部函数已经放在库中,供程序员使用。内部函数的原型说明 累加器带进位右移指令 RRC A
#define _rrca_() CY = ACC & 0x01
汇编代码 rrc a
放在intrins.h头文件中。
累加器带进位左移指令 RLC A
#define _rlca_() CY = ACC & 0x80
汇编代码 rlc a1.写串行数据
C51程序
void writedata(unsigned char val)
{
_movar_(val);//或用ACC = val;
for (val = 8; val > 0; val--)
{
_clrb_(TXD);//或用TXD = 0;
_rrca_();
_movbc_(RXD);//或用RXD = CY;
_setb_(TXD);//或用TXD = 1;
_nop_();
}
}
A51代码
writedata:
mov a,r7
mov r7,#8
writedata_loop:
clr txd
rrc a
mov rxd,c
setb txd
nop
djnz r7,writedata_loop
ret