80c51单片机编程语言是什么,80c51单片机的ram分为几个部分各有什么特点和功能...

本文详细介绍了如何使用80c51单片机编程实现LED灯的流水效果,强调了在编程时考虑延时的重要性。通过具体的汇编代码示例,解释了如何设置计数器实现延时,以及如何通过移位指令控制P1口的LED灯状态,以达到流水灯效果。同时,文章还讨论了80c51单片机的RAM结构和编程语言的相关知识。
摘要由CSDN通过智能技术生成

560c12acc10716308a2e96fcaacf1300.png

只要把汇编指令都写出来了,你就可以到指令表中找到每一条指令所对应的机器码,然后你只要在机器码后面加上操作数即可,比如,把一个30H单元送入A累加器;指令是这样的:MOV A , 30H .那么你可以在指令表中查到执行这条指的机器码是1110 0101,但是由于这条指令后面的那个30H单元的数是根据你的要求在不断的变的,机器没规定你只能用30H单元,所以这个30的操作数必须由你填,它们和在一块儿,这条指令的机器码是:1110 0101 0011 0000用十六进制来表示:E530,很明显前两位E5是机器指定的,而后两位30是你自己加进去的。共是十六位,占用两个字节……。

你说的LED灯闪烁,不知是指的流水灯还是一只发光二极管在不停地闪烁?但不管是哪一种,有一点很重要。你在编写此程序时必须要考虑延时,因为51单片机的晶体振荡器最低频率可能是6M(具体数值我已记不清了)。也就是说单片机的每一个机器周期所占用的时间仅2微秒,如果你不考虑延时的话,那么你设计的那盏灯,它闪烁的结果是;亮2微秒,熄2微秒,也就是说每一秒钟要亮暗50万次,肉眼看这盏灯根本就不会有熄灭的时候,只是比不闪的灯暗了一半。我们生活中用的白炽灯,每秒钟亮暗100次,你能感觉出灯泡有熄灭的时候吗?更何况那是50万次啊!

比如设计流水灯的程序,不妨可以这样考虑它的算法。计数寄存器的高八位加上低八位,合起来也只有十六位,它能数的数最大也就是65535,就算单片机用的是最低的6M的晶体振荡器,一个机器周期是12个机器节拍,所以,每一个机器周期占用2微秒时间,从0数到65535,仅用了131070微秒就数完了,约130毫秒,如果就按这个延时去改变灯的亮暗时间,那么这盏灯每秒钟要亮暗3、4次,肉眼虽然能够看到灯有熄灭的时间了。但是眼睛看这样的灯总不会那么舒服,所以至少应让它延时到1秒钟亮暗一次。为了计算方便,就让计数器数100毫秒的时间吧!等计数器数到100毫秒后,就让它再数一次,然后再数一次……,等它数满5次后,这就是500毫秒(半秒钟),然后,我们再去改变灯的亮暗状态。

这个程序可以这样来编:

MOV  A ,#0FEH;最低位设为0

MOV  P1, A;点亮最低位灯

MOV  TCON,#10H;T1为方式1,定时

BEGIN:MOV  R7  ,#05H;设循环5次

STAR:MOV  TH1  #3CH;计数器数100毫秒

MOV  TL1  #AFH

SETB  TR1;开始计数

ROU:JBC   TF1  SE;100毫秒到否?

SJMPROU         ;等待到100毫秒

SE:CLRTR1;关闭计数器

DJNZ  R7   STAR         ;5次循环到否?RL  A;把0向左移一位

MOV  P1 ,A;改下一只灯亮

SJMPBEGIN

51的单片机

ORG  0000H

MAIN:MOV R2,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值