欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

单片机仿真循环点亮那盏灯

程序员文章站 2022-06-04 09:59:53
...

目标

学单片机课程也有一段时间了,今天亲自动手做个超级easy的仿真试验,通过keil + proteus来点亮发光二极管。

所需软件及芯片

  1. keil
  2. proteus
    • AT89C51
    • CAP
    • CAP-ELEC
    • CRYSTAL
    • LED-RED
    • RES

开始动手

AT89C51引脚

简单介绍下这次仿真需要用到的AT89C51的引脚,这次我们做仿真用到的引脚不多!

晶振引脚(XTAL1 + XTAL2

  • XTAL1(Pin19):片内振荡电路的输入端
  • XTAL2(Pin20):片内振荡电路的输出端

晶振电路:

单片机仿真循环点亮那盏灯

控制引脚

  • EA\overline{EA}(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

可编程输入/输出引脚

  • 51单片机有48位的可编程I/O口,分别为P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
    • PO口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7
    • P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7
    • P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7
    • P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7

这就意味着P1 ~ P3都可以控制二极管!

电路图

单片机仿真循环点亮那盏灯

通过实验原理图,我们可以得出,发光二极管共阳极,所以P1.0 ~ P1.7口是低电平时才能点亮二极管。

汇编代码

    ORG 0000H
    LJMP    START	              		

    ORG 0300H
START:
    MOV     A, #0FEH                ;0FEH = 1111 1110B

OUTPUT:
    MOV     P1, A                   
    RL      A                       ;左移
    LCALL   Delay                   ;跳转延时子程序
    LJMP    OUTPUT

Delay:
    MOV R2,#10          
L1:
    MOV R3,#200       
DLoop:
    MOV R4,#248         
    DJNZ R4,$           
    DJNZ R3,DLY2       
    DJNZ R2,DLY1        
    RET                 
    END

怎么仿真可以参考如何用proteus仿真8086

提升

原理图不难,程序不难,这是一个很简单的试验。

我们把主要的目光放在延时子程序上,这个延时程序到底延时多久?这就需要我们计算了。

Delay:
    MOV R2,#10          ;执行1, 单周期指令
L1:
    MOV R3,#200         ;执行10, 单周期指令
DLoop:
    MOV R4,#248         ;执行 200 * 10, 单周期指令
    DJNZ R4,$           ;执行 2 * 248 * 200 * 10, 双周期指令, 所以要 × 2
    DJNZ R3,DLY2        ;执行 2 * 200 * 10, 双周期指令
    DJNZ R2,DLY1        ;执行 2 * 10, 双周期指令
    RET                 ;双周期指令 2
    ;总时间 1 + 10 + 200 * 10 + 2 * 248 * 200 * 10 + 2 * 200 * 10 + 2 * 10 + 2 = 998033us, 即延时1s

首先我们需要知道一个机器周期包括12个时钟周期,那么1个机器周期是多长时间呢?

如果一个单片机工作于12M晶体震荡器,它的时钟周期是1/12(微秒),那么它的一个机器周期是12 *(1/12)也就是1微秒。

还有就是 在MCS-51单片机的所有指令中,有一些完成得比较快,只要1个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。

所以我们把每条指令执行的次数累加起来就得到了延时的时间了。

更加具体的可以参考:单片机汇编延时程序的理解

总结

学习单片机,就是学习怎么使用这款芯片,把这款芯片的各个引脚的功能搞清楚了,把芯片对应的汇编弄明白了,按照自己的想法进行编程,再对自己的程序Debug,这样子才能真正做好将来的大项目。熟能生巧,编程是不断的练习而掌握的一种技巧。

诗情画意

江城子·密州出猎
苏东坡
老夫聊发少年狂,左牵黄,右擎苍,锦帽貂裘,千骑卷平冈。
为报倾城随太守,亲射虎,看孙郎。
酒酣胸胆尚开张,鬓微霜,又何妨?持节云中,何日遣冯唐?
会挽雕弓如满月,西北望,射天狼。
相关标签: # IOT