小小遥遥的笔记 https://passport2.21ic.com/?648718 [收藏] [复制] [RSS]

日志

51学习笔记2

已有 660 次阅读2010-10-8 02:25 |系统分类:单片机| 51

符 号 ;地 址 ;注 释
*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


路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

评论 (0 个评论)