zoukankan      html  css  js  c++  java
  • 8051单片机学习笔记/概要/总结/备忘

    *.I/O引脚和I/O端口

    P0(P0.7~P0.0)

    1.P0是一个漏极开路型准双向I/O口.
    2.在访问外存时, 它是数据总线和地址总线的低8位分时复用接口.
    3.在EPROM编程时, 它接收指令字节; 在验证程序时, 输出指令字节, 并要求外接上拉电阻.

    P1(P1.7~P1.0) 1.P1口是带内部上拉电阻的8位双向I/O口, 它是通用I/O口.
    2.在EPROM编程和程序验证时, 它接收低8位地址.
    P2(P2.7~P2.0) 1.P2是带内部上拉电阻的8位双向I/O口.
    2.在访问外存时, 它输出8位高地址.
    3.在对EPROM编程时和程序验证时, 它接收8位高地址.
    P3(P3.7~P3.0) 1.P3是带内部上拉电阻的8位双向I/O口, 它是双功能I/O口.
    2.除基本输入/输出功能外, 每个引脚还有特殊功能.
    I/O口 特殊/专用功能
    P3.0 RXD:串行数据接收
    P3.1 TXD:串行数据发送
    P3.2 /INT0:外部中断0输入请求
    P3.3 /INT1:外部中断1请求输入
    P3.4 T0:定时器0外部计数脉冲输入
    P3.5 T1:定时器1外部计数脉冲输入
    P3.6 /WR:外部数据存储器写信号
    P3.7 /RD:外部数据存储器读信号






    *.复位寄存器状态

    寄存器内容寄存器内容
    PC 0000H TMOD 00H
    A 00H TCON 00H
    B 00H TH0 00H
    PSW 00H TL0 00H
    SP 07H TH1 00H
    DPTR 0000H TL1 00H
    P0~P3 0FFH SCON 00H
    IP XXX00000B SBUF XX
    IE 0XX00000B PCON  00H













    *.特殊功能寄存器

    特殊功能寄存器功能名称地址复位状态
    B 通用寄存器 F0H 00H
    A 累加器 E0H 00H
    PSW 程序状态字 D0H 00H
    IP 中断优先级控制 B8H XXX0000B
    P3 P3端口 B0H 0FFH
    IE 中断使能控制 A8H 0XX00000B
    P2 P2端口 A0H 0FFH
    SBUF 串行发送/接收缓冲器 99H XXH
    SCON 串行口控制 98H 00H
    P1 P1端口 90H 0FFH
    TH1 T1定时器高8位 8DH 00H
    TH0 T0定时器高8位 8CH 00H
    TL1 T1定时器低8位 8BH 00H
    TL0 T0定时器低8位 8AH 00H
    TMOD 定时器/计数器方式控制 89H 00H
    TCON 定时器控制 88H 00H
    PCON 电源控制 87H 00H
    DPH 地址寄存器高8位 83H 00H
    DPL 地址寄存器低8位 82H 00H
    SP 堆栈指针 81H 07H
    P0 P0端口 80H 0FFH

































    *.可位寻址的特殊功能寄存器

    寄存器名D7D6D5D4D3D2D1D0
    电源控制寄存器 PCON SMOD       GF1 GF0 PD IDL
    波特率倍乘位       用户标志 用户标志 掉电方式位 待机方式位
    定时器方式控制寄存器 TMOD GATE C/-T M1 M0 GATE C/-T M1 M0
    T1门控位 T1定时器/计数器选择 T1工作方式选择 T0门控位 T0定时器/计数器选择 T0工作方式选择
    程序状态字 PSW CY AC F0 RS1 RS0 OV   P
    进位标志 辅助进位标志 用户标志 工作寄存器组选择标志 溢出标志   奇偶标志
    中断优先级控制器 IP       PS PT1 PX1 PT0 PX0
          串口优先级设置 T1优先级设置 /INT1优先级设置 T0优先级设置 /INT0优先级设置
    中断使能寄存器 IE EA     ES ET1 ETX ET0 EX0
    CPU总中断使能     串口中断使能 T1中断使能 /INT1中断使能 T0中断使能 /INT0中断使能
    串口控制寄存器 SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
    串口工作方式选择位 允许接收 发送数据第9位 接收数据第9位 发送完成中断标志 接收数据中断标志
    定时器控制寄存器 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
    T1溢出标志 T1运行控制位 T0溢出位 T0运行控制位 /INT1中断标志 /INT1触发方式 /INT0中断标志 /INT0触发方式














    *.中断系统

    中断源入口地址长度 中断允许中断标志中断优先级位触发方式中断标志清零方式同级内部优先级
    /INT0 0003H 8 EX0(IE.0) IE0(TCON.1) PX0(IP.0) IT0(TCON.0)
    0:电平触发
    1:下降沿触发
    电平触发时需软件清零 最高
    T0 000BH 8 ET0(IE.1) TF0(TCON.5) PT0(IP.1)   无需软件清零  
    /INT1 0013H 8 EX1(IE.2) IE1(TCON.3) PX1(IP.2) IT1(TCON.2) 电平触发时需软件清零  
    T1 001BH 8 ET1(IE.3) TF1(TCON.7) PT1(IP.3)   无需软件清零  
    串口 0023H 8 ES(IE.4)

    RI(SCON.0)
    TI(SCON.1)

    PS(IP.4)    需软件清零 最低





















    *.定时器/计数器工作方式

    M1M0工作方式功能
    0 0 方式0 13位计数器
    0 1 方式1 16位计数器
    1 0 方式2 可自动重新装入的8位计数器
    1 1 方式3 T0分为两个独立的8位计数器,T1停止









    *.串口工作方式

    SM0SM1方式说明
    0 0 0 位移寄存器方式(用于I/O扩展)
    0 1 1 8位UART,波特率可变(T1溢出率/n)
    1 0 2 9位UART,波特率为fosc/64或fosc/32
    1 1 3 9位UART,波特率可变(TI溢出率/n)








      注:表中n为32/2SMOD,SMOD为PCON的第7位波特率倍乘位

    *.定时器/计数器初值的计算
    环境:
      晶振:12.0000MHz
      定时器:T0
      溢出条件:(TH0<<8|TL0)由0FFFFH变为0000H(0FFFFH+1 产生的进位置位TF0产生中断)

    假设延时时间为50ms,则:
      频率:ft = 12.0000MHz
      时钟周期:Tt = 1/ft (SI)
      机器周期:Tm = 12*Tt = 12*1/(12*10^6),(SI) = 12*1/12 (us) = 1 (us)(前面的12是因为51是12分频,即12个时钟周期为1个机器周期)
      所以:
        50ms == 50000us == 50000个机器周期
        由 0FFFFH 到 10000H 为 1个机器周期,则:
      初值:start = 0FFFFH + 1H - 50000D = 65536D - 50000D = 15536D = 3CB0H
        于是:TH0 = 0x3C,TL0 = 0xB0

      若晶振频率为:ft = 11.0592MHz
      同样:机器周期Tm = 12*Tt = 12*1/(11.0592*10^6),(SI) = 12/11.0592 (us) = 1.085069(us)
      所以:
        50ms == 50000us = 50000/1.085069 = 46080D 个机器周期
        初值:start = 0FFFFH + 1H - 46080D = 65536D - 46080D = 19456D = 4C00H
        于是:TH0 = 0x4C, TL0 = 0x00

    *.串口通信中定时器工作方式下波特率初值计算以及晶振的选择
      当串口工作方式为1(8位UART),T1为定时器时:
        k=13:定时器工作方式0; k=16, 工作方式1, k=8, 工作方式2, ...
        T1溢出率 = Fosc/(12*(2k-初值)),即每秒溢出次数,Fosc:晶振频率,*12:转换为时钟周期
        所以 波特率 = T1溢出率/(32/2SMOD) = 2SMOD */32*T1溢出率 = 2SMOD * Fosc /(32*12*(2k-初值))
        常用波特率:9600bps,192000bps,4800bps, ...
        所以当波特率=9600bps, SMOD=0, k=8时:
          波特率 = 2SMOD * Fosc /(32*12*(2k-初值)) = Fosc/(384*(256-初值)) = 9600
          当晶振为11.0592Mhz时:9600=11.0592*106/(384(256-初值)),求得:初值=253D = 0FDH,此时恰为整数(即TH1=TL1 = 0xFD)
          当晶振为12.0000MHz时:初值为252.744791, 不为整数
    这就是为什么在进行串行通信时要选择11.0592MHz晶振, 不选择12MHz晶振的原因.


    *.由定时器1产生的常用波特率

    波特率 bps晶振频率 Fosc波特率倍乘
    SMOD
    定时器1
    C/-T模式重装载值
    62500 12 1 0 2 0FFH
    19200 11.0592 1 0 2 0FDH
    9600 11.0592 0 0 2 0FDH
    4800 11.0592 0 0 2 0FAH
    2400 11.0592 0 0 2 0F4H
    1200 11.0592 0 0 2 0E8H
    137500 11.0592 0 0 2 1DH
    110 6 0 0 2 72H
    110 12 0 0 1 0FEEBH

















    ---pre---

  • 相关阅读:
    用java程序启动电脑中的软件 分类: java 20091105 01:03 355人阅读 评论(0) 收藏
    关于nextSibling的用法 20091103 01:53 311人阅读 评论(0) 收藏
    HTML中的标签用法 分类: 网页编程【html、js】 20091103 00:53 282人阅读 评论(0) 收藏
    我总结的正则表达式 分类: 正则表达式 20091106 23:01 298人阅读 评论(0) 收藏
    [正则表达式]非常经典的正则表达式 分类: 正则表达式 20091106 03:18 393人阅读 评论(0) 收藏
    读取zip,过滤中文名称 分类: java 20091106 22:46 385人阅读 评论(0) 收藏
    MS SQL与Oracle常用函数对比 分类: 数据库 20091105 23:41 259人阅读 评论(0) 收藏
    读取zip,不过滤中文名,即中文名称也能成功读取 分类: java 20091106 22:48 296人阅读 评论(0) 收藏
    根据字节数截取字符串... 分类: java 20091105 19:21 235人阅读 评论(0) 收藏
    Pattern类 分类: java 20091105 01:00 240人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/memset/p/2821575.html
Copyright © 2011-2022 走看看