hpu机制0901吧 关注:4贴子:451
  • 7回复贴,共1

单片机考试资料,【勿水】

只看楼主收藏回复


1. 微型计算机是一种对信息进行加工处理的机器,它具有记忆、判断、运算能力,能仿效人类的思维活动,代替人的部分劳动,并能对生产过程实施某种控制。电子计算机经历了电子管、晶体管和集成电路三个发展时代,
2. 微型计算机系统分为两类:一以微处理器为核心,配置辅助电路,它是具有完成运算功能的计算机;二单片微型计算机,它有单块集成电路芯片构成,内部包含中央处理器、储存器、I/O接口电路,与适当的软件和外部设备结合,就成微机控制系统。
3. 数据处理位数是单片机CPU的重要标志。
4. 以微处理器为中心的微型计算机是在中小型计算机基础上发展起来的,最大特点采用总线结构,其中三总线结构尤为普遍。微处理器是微型计算机的CPU,具有运算器和控制器的功能,从功能上分为运算器、控制器、寄存器。运算器主要包括加法器、指令译码器、控制电路,用于算术运算和逻辑操作。寄存器组用来存放操作数、中间结果、地址及工作状态。
5. ROM和RAM:ROM正常工作时只能读不能写的存储器,通常用来存放固定程序和常数。RAM既能读又能写,通常用来存放原始数据、中间结果和实时数据,又称易失性存储器。
6. 总线是CPU、存储器、I/O接口电路之间信息传输的通道,分为:数据总线(传递数据)、地址总线(传递地址信息只能由CPU单方向输出地址信息)、控制总线(传输各种控制信号)。
a) 单片微型计算机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器CPU、存储器和I/O接口电路等。
8.CPU包括运算器和控制器两个部分。运算器由算术逻辑单元ALU、累加器A、寄存器B和程序状态字PSW组成。
9. 单片机的存储器按照其功能可分为数据存储器(RAM)和程序存储器(ROM),RAM区中,专门划分出一块区域用来存放特殊功能寄存器SF。RAM地址为00H~1FH的存储单元用作工作寄存器区。单片机的整个存储器空间按照其所处的位置和功能可划分为内部程序存储器区、外部程序存储器区、低128字节的内部数据存储器区(包含工作寄存器区和位寻址区)、高128字节的内部数据存储器区、特殊功能寄存器区、外部数据存储器区等6个区域。10.特殊功能寄存器本质上是一些具有特殊功能的存储单元,这些存储单元分布在内部数据存储器地址80H~7FH的存


IP属地:河南1楼2011-12-21 14:19回复

    储区域,用直接寻址的寻址方式进行访问。作用:设置单片机的工作模式,并指示单片机当前工作状态。
    11. 复位引脚RST,在RST引脚上出现持续两个机器周期的高电平将导致单片机复位。
    上电复位电路 上电复位、手动复位电路
    12. CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);
    CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);
    待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。
    51子系列单片机有5个中断源,分别是外部中断0、定时器/计数器0、外部中断1、定时器/计数器1和串行口。
    80C51单片机的中断优先级有三条原则:
    CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。
    正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
    正在进行的低优先级中断服务,能被高优先级中断请求所中断。
    13.键盘是由若干个按键组成,能实现向单片机输入信号的部件.键盘分编码键盘和非编码键盘。非编码键盘有分为:独立键盘和矩阵式键盘。识别按键的方法有三种:扫描法、线反转法和中断法。一扫描法1判断有无键被按下2判断被按键位置。
    14. 常见的LED数码管为“8”字型的,共计8段。每一段对应一个发光二极管。有共阳极和共阴极两种。共阴极发光二极管的阴极连在一起,通常公共阴极接地。当阳极为高电平时,发光二极管点亮。
    同样,共阳极LED数码管的发光二极管的阳极连接在一起,公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。
    构成液晶显示器件的三大基本部件:
    (1)电极基板(2)液晶材料 (3)偏振片
    LCD显示模块LCM按显示功能可分为:LCD段式显示模块、LCD字符型显示模块、LCD点阵图形显示模块三类。
    12.利用定时器0的工作方式1使系统板上某一发光二极管以1s亮灭闪烁。
    #include <reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    sbit led1=P1^1;
    uchar num;
    void main()
    {


    IP属地:河南2楼2011-12-21 14:20
    回复

      }
      void main()
      {
      TMOD=0x01; //设置定时器0为工作方式1(M1M0为01);
      TH0=(65536-45872)/256; //装初值11.0592M晶振定时50ms
      //数为45872 ;
      TL0=(65536-45872)%256;
      EA=1; //开总中断
      ET0=1; //开定时器0中断
      TR0=1; //启动定时器0
      num=0;
      while(1); //程序停在这里等待中断发生
      }
      void T0_time() interrupt 1
      {
      TH0=(65536-45872)/256; //重装初值
      TL0=(65536-45872)%256;
      num++; //num每加1次判断一次是否到20次
      if(num==20) //如果到了20次,说明1秒时间到
      {
      num=0; //然后把num清0重新再计20次
      led1=~led1; //让发光管状态取反
      }
      }
      void main()
      {
      。。。
      while(1)
      {
      if(num==20) //如果到了20次,说明1秒时间到
      {
      num=0; //然后把num清0重新再计20次
      led1=~led1; //让发光管状态取反
      }
      }
      }
      void T0_time() interrupt 1
      {
      TH0=(65536-45872)/256; //重装初值
      TL0=(65536-45872)%256;
      num++; //num每加1次判断一次是否到20次
      }
      12利用上位机串口调试助手发送一个字符,单片机收到字符后返回给上位机“I receive, thanks ”。串口的波特率设为9600bps。
      . #include<reg52.h>
      #define uchar unsigned char
      #define uint unsigned int
      unsigned char flag,a,i;
      uchar code table[]="I receive, thanks ";


      IP属地:河南3楼2011-12-21 14:20
      回复

        void init()
        {
        TMOD=0x20; //设置定时器1为工作方式2
        TH1=0xfd; //T1定时器装初值
        TL1=0xfd; //T1定时器装初值
        TR1=1; //启动T1定时器装
        REN=1; //允许串口接收
        SM0=0; //设定串口工作方式1
        SM1=1; //同上
        EA=1; //开总中断
        ES=1; //开串口中断
        }
        void main()
        {
        init();
        while(1)
        {
        if(flag==1)
        {
        ES=0;
        for(i=0;i<18;i++)
        {
        SBUF=table[i];
        while(!TI);
        TI=0;
        }
        SBUF=a;
        while(!TI);
        TI=0;
        ES=1;
        flag=0;
        }
        }
        }
        void serial() interrupt 4
        {
        RI=0;
        a=SBUF;
        flag=1;
        }
        #include <reg52.h>
        void main()
        { unsigned char led[]={0x00,0x11,0x22,0x33}; //
        定义显示的数字及片选编码
        unsigned char i;
        P2=0x04;
        while(1)
        { for(i=0;i<=3;i++)
        P0=led[i];
        }
        }
        00-30程序
        #include "reg52.h"
        #define uchar unsigned char
        #define uint unsigned int
        sbit we=P2^7;
        sbit du=P2^6;
        static uchar c;
        uchar th0=(65535-3000)/256;
        uchar tl0=(65535-3000)%256;
        code uchar disptab[]={0x3f,0x6,0x5b,0x4f,0x66,
        0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
        0x79,0x71,0x0};code uchar dispbit[]={0xfe,0xfd,0xfb


        IP属地:河南4楼2011-12-21 14:21
        回复

          ,0xf7,0xef,0xdf};
          uchar dispbuf[6];
          void delay1(uchar x)
          {
          uint y;
          for(;x>0;x--)
          for(y=1000;y>0;y--);
          }
          void timer0() interrupt 1
          {
          static uchar count=0;
          uchar tmp;
          P0|=0x3f;
          we=1;
          tmp=dispbit[count];
          P0=P0&tmp;
          we=0;
          P0=disptab[16];
          du=1;
          tmp=dispbuf[count];
          tmp=disptab[tmp];
          P0=tmp;
          du=0;
          count++;
          if(count==6)
          {
          count=0;
          }
          TH0=th0;
          TL0=tl0;
          }
          void Inittimer0()
          {
          TMOD=0x01;
          TH0=th0;
          TL0=tl0;
          EA=1;
          ET0=1;
          TR0=1;
          }
          void main()
          {
          Inittimer0();
          dispbuf[1]=0x8;
          dispbuf[5]=0x8;
          dispbuf[3]=0x8;
          dispbuf[4]=0x8;
          dispbuf[0]=0x8;
          while(1)
          {
          dispbuf[2]=c;
          c++;
          if(c==10)
          c=0;
          delay1(50);
          }
          }延时流水灯
          #include<reg51.h>
          #define uchar unsigned char
          #define uint unsigned int
          uchar data led[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
          void delayms(uint xms) //延时xms数
          {
          uint i,j;
          for(i=xms;i>0;i--)
          for(j=110;j>0;j--);
          }
          void main()
          {
          uchar dat=0;
          while(1)
          {


          IP属地:河南5楼2011-12-21 14:21
          回复

            delayms(1000);//调用延时函数
            P0=led[dat]; //把dat的值付给p0口,使每隔一段时间加1
            dat++;
            if(dat>7)
            {
            dat=0;
            }
            }
            }


            IP属地:河南6楼2011-12-21 14:21
            回复


              IP属地:河南7楼2011-12-21 14:22
              回复








                


                IP属地:河南8楼2011-12-21 14:28
                回复