单片机仿真循环点亮那盏灯
程序员文章站
2022-06-04 09:59:53
...
目标
学单片机课程也有一段时间了,今天亲自动手做个超级easy的仿真试验,通过keil + proteus来点亮发光二极管。
所需软件及芯片
- keil
-
proteus
- AT89C51
- CAP
- CAP-ELEC
- CRYSTAL
- LED-RED
- RES
开始动手
AT89C51引脚
简单介绍下这次仿真需要用到的AT89C51的引脚,这次我们做仿真用到的引脚不多!
晶振引脚(XTAL1 + XTAL2)
- XTAL1(Pin19):片内振荡电路的输入端
- XTAL2(Pin20):片内振荡电路的输出端
晶振电路:
控制引脚
- (Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
可编程输入/输出引脚
-
51单片机有4组8位的可编程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,这样子才能真正做好将来的大项目。熟能生巧,编程是不断的练习而掌握的一种技巧。
诗情画意
江城子·密州出猎 苏东坡 老夫聊发少年狂,左牵黄,右擎苍,锦帽貂裘,千骑卷平冈。
为报倾城随太守,亲射虎,看孙郎。
酒酣胸胆尚开张,鬓微霜,又何妨?持节云中,何日遣冯唐?
会挽雕弓如满月,西北望,射天狼。
上一篇: ThinkPHP5实现极验滑动验证码geetest功能
下一篇: IoT-百度天工物接入