zoukankan      html  css  js  c++  java
  • 51单片机学习(一)

    这段时间主要学习了单片机的中断、计数器、计时器部分。具体的理论知识在书上已经有了,在此不再赘述。下面就在数码管上显示计数100的计数器的实现:

    具体代码如下:

    #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    uchar temp,aa,bai,shi,ge;
    sbit dula=P2^6;
    sbit wela=P2^7;
    uchar code table[]={
    0x3f,0x06,0x5b,0x4f,
    0x66,0x6d,0x7d,0x07,
    0x7f,0x6f,0x77,0x7c,
    0x39,0x5e,0x79,0x71};
    void display(uchar bai,uchar shi,uchar ge);
    void delay(uint z);
    void init();
    void main()
    {    
        init();//初始化主程序
        while(1)
        {
            if(aa==20)
              {
                aa=0;
                temp++;
                if(temp==100)
                   {
                        temp=0;
                   }
                bai=temp/100;
                shi=temp%100/10;
                ge=temp%10;
              }
            display(bai,shi,ge);
        }
    }
    
    void delay(uint z)
    {
        uint x,y;
        for(x=z;x>0;x--)
            for(y=110;y>0;y--);
    }
    
    void display(uchar bai,uchar shi,uchar ge)
    {
            dula=1;
            P0=table[bai];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xfe;
            wela=0;
            delay(1);
    
            dula=1;
            P0=table[shi];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xfd;
            wela=0;
            delay(1);
    
            dula=1;
            P0=table[ge];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xfb;
            wela=0;
            delay(1);
    }
    
    void init()
    {    
        wela=0;
        dula=0;
        temp=0;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;    
    }
    
    void timer0() interrupt 1
    {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        aa++;    
    }
    1. 对TMOD进行赋值,以确定T0和T1的工作方式。
    2. 计算初值(根据所要定时的时间确定),并将初值写入TH0、TL0和TH1、TL1中。
    3. 中断方式时,对IE赋值,开放中断。
    4. 是TR0或TR1置位,启动定时器/计数器定时或计数。

    效果如下:

    大三上学期单片机学习心得及笔记

    这学期正式开始单片机的正规学习,先从单片机的内部硬件结构入手,基本了解了单片机的架构和寻址方式。汇编语言是学习单片机必不可少的内容,学完汇编其他的单片机可以触类旁通,上手很快。汇编在大二的时候接触过一点,那时感觉很难.......现在也该觉很难(逃。学习的核心是微机的内部构造及其功能。当然,任何单片机最简单的一步就是让流水灯亮起来、跑起来。下面就是最简单的一个程序,重要意义在于汇编程序的书写和理解:

    ;-----------------------
    ;---闪烁灯实验----------
    ;---TangHsiangYu--------
    ORG 0000H
    LJMP START
    ORG 0030H
    ;初始化
    START:MOV SP,#60H;给堆栈指针赋值
    MOV P1,0FFH;八位,给灯赋值,全灭
    MAIN:CLR P1.7;对后一位置零
    CALL DELAY
    SETB P1.7;对最后一位置一
    CALL DELAY
    LJMP MAIN;死循环
    DELAY:MOV R0,#250;对R0寄存器赋值
    D2: MOV R1,#250
    D1: DJNZ R1,D1;小循环
        DJNZ R0,D2;大循环
        RET;子程序返回
        END 

    在DELAY函数里循环了250$ imes$250次,根据机器周期可以设计出任何时间间隔闪烁。

    对应的C语言程序:

    #include <reg51.h>
    typedef unsigned int uint; 
    // #define uint unsigned int 
    uint x,y,z;
    sbit p = P1^0;
    void delay(uint);
    void main()
    {      
        p = 1;
        delay(1000);
        p = 0;
        while(1);
    }
    void delay(uint z)
    {
        for(x=z;x--;x>0)
            for(y=150;y--;y>0);
    }
  • 相关阅读:
    深入浅出之正则表达式(二)
    ==和equlas的区别
    温故知新 javascript 正则表达式
    SQL Server高级内容之子查询和表链接
    C语言访问webservice小例子
    jquery菜单伸缩效果
    电影资源下载网站推荐
    百度云使用迅雷下载资源
    字符编码
    7_2 利用 const 引用避免复制
  • 原文地址:https://www.cnblogs.com/txy19981002/p/7348937.html
Copyright © 2011-2022 走看看