zoukankan      html  css  js  c++  java
  • 2017.12.9 前几章的总结

    1.首先是特殊功能寄存器。  认为指的是P0,P1,P2,P3,P4.    在头文件<reg52.h>有对特殊功能寄存器的地址分配。

      另一个是sbit,是对P0等的8个口的定义。例sbit LED = P0^0,就相当于用LED表示 P0^0. 可以理解成别名。

    2.电磁干扰,冬天毛衣静电,静电放电ESD,手机收音机有杂音,快速瞬间群脉冲EFT,热插拔产生的浪涌,Surge。

    3.电容有两个作用,作用1,缓冲作用,当刚上电 的时候,电流从电源处流下来,不稳定,容易冲击电子元器件,加个电容可以缓冲。作用2,稳定作用,比如,后面有个电子元器件没有工作时,电流时100mA,当它工作时,电流突然变成150mA,这个时候没有电容,电压就是直接下降。而电子元器件必须高于一定的电压才能工作,所以这个时候电容就派上用场了。电源处的去耦高频电容,基本可以直接用0.1uF。

    4.三极管。箭头朝内PNP,导通电压顺箭头通过,电压导通,电流控制。就是箭头的始端比箭头末端高0.7V,就可以导通ec之间。

    5.unsigned char 0~255,signed char -128~127,unsigned int 0~65535,signed int -32768~32767

    6.定时器。时钟周期就是晶振周期分之一。机器周期是12个时钟周期。

      TCON定时器控制寄存器的位描述,可位寻址。TF1是定时器1溢出标志,发生溢出时硬件置1,清零的方式有软件清零或进入定时器中断时硬件清零。

      TR1定时器1运行控制位,软件置位/清零来进行启动/停止。

      TMOD定时器模式寄存器,不可位寻址。M1,M0.

    7.中断。IE中断使能寄存器的位分配。可位寻址。EA =1 总开关。ET2 定时器2中断使能,ES串口中断使能。ET1 定时器1中断使能,EX1,外部中断1使能,ET0定时器0中断使能,EX0外部中断使能。

    中断查询序列

    中断函数编号 中断名称 中断标志位 中断使能位 中断向量地址 默认优先级
    0 外部中断0 IE0 EX0 0x0003 1
    1 T0中断 TF0 ET0 0x000B 2
    2 外部中断1 IE1 EX1 0x0013 3
    3 T1中断 TF1 ET1 0x001B 4
    4 URAT中断 TI/RI ES 0x0023 5
    5 T2中断 TF2/EXF2 ET2 0x002B 6

    中断函数编号 = x*8 +3 = 向量地址

    IP 中断优先级寄存器位分配,可位寻址。

    PT2  定时器2 中断优先级控制位

    PS 串口中断优先级控制位

    PT1 定时器1中断优先级控制位

    PX1 外部中断1中断优先级控制位

    PT0 定时器0中断优先级控制位

    PX0 外部中断0 中断优先级控制位


    为什么要取反,二进制在左移或者是右移,都是要补0.所以为了避免麻烦,还是取反来的方便。

    下面的程序是流水灯,没有用定时器,然后,后面会对程序进行优化,使用定时器和中断。

    #include <reg52.h>
    sbit ADDR0 = P1^0;
    sbit ADDR1 = P1^1;
    sbit ADDR2 = P1^2;
    sbit ADDR3 = P1^3;
    sbit ENLED = P1^4;
    void main()
    {
    unsigned int i;
    unsigned char flag = 0;
    unsigned char ChuZhi = 0x80;

    ADDR0=0;
    ADDR1=1;
    ADDR2=1;
    ADDR3=1;
    ENLED=0;




    while(1)
      {
        P0=~ChuZhi;
        for(i=0;i<20000;i++);

        if(flag == 0)
        {
            ChuZhi = ChuZhi >>1;
            if(ChuZhi == 0x01)
            {
              flag = 1;
            }
        }

        else
        {
          ChuZhi = ChuZhi<<1;
          if(ChuZhi == 0x80)
          {
            flag = 0;
          }
        }
      }
    }

     使用定时器 实现流水灯

    #include <reg52.h>
    sbit ADDR0 = P1^0;
    sbit ADDR1 = P1^1;
    sbit ADDR2 = P1^2;
    sbit ADDR3 = P1^3;
    sbit ENLED = P1^4;
    void main()
    {
    unsigned char flag = 0;
    unsigned char ChuZhi = 0x80;
    unsigned char cnt = 0;

    ADDR0=0;
    ADDR1=1;
    ADDR2=1;
    ADDR3=1;
    ENLED=0;

    TMOD = 0x01;
    TH0 = 0x4C;
    TL0 = 0x00;
    TR0= 1;



      while(1)
      {

      if(TF0 == 1)
        {
        TF0 = 0;
        TH0 = 0x4C;
        TL0 = 0x00;
        cnt++;
        if(cnt >= 20)
          {
          cnt = 0;
          P0=~ChuZhi;
          if(flag == 0)
            {
          ChuZhi = ChuZhi >>1;
            if(ChuZhi == 0x01)
              {
              flag = 1;
              }
            }

            else
            {
            ChuZhi = ChuZhi<<1;
            if(ChuZhi == 0x80)
              {
              flag = 0;
              }
            }
          }
      }
    }
    }

      

  • 相关阅读:
    django之分页
    linux后台运行和关闭、查看后台任务
    Django的模板系统
    Django的视图系统
    Django的配置文件(settings.py)
    Django的URL路由
    初始Django
    shell if判断总结
    一个抓取智联招聘数据并存入表格的python爬虫
    Python MySQLdb 查询中文出现问号的解决方法
  • 原文地址:https://www.cnblogs.com/wongsh/p/8012594.html
Copyright © 2011-2022 走看看