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

目标

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

所需软件及芯片

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

开始动手

AT89C51引脚

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

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

晶振电路:

晶振电路

控制引脚
  • E A ‾ \overline{EA} 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,这样子才能真正做好将来的大项目。熟能生巧,编程是不断的练习而掌握的一种技巧。

诗情画意

江城子·密州出猎
苏东坡
老夫聊发少年狂,左牵黄,右擎苍,锦帽貂裘,千骑卷平冈。
为报倾城随太守,亲射虎,看孙郎。
酒酣胸胆尚开张,鬓微霜,又何妨?持节云中,何日遣冯唐?
会挽雕弓如满月,西北望,射天狼。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值