导航:首页 > 操作系统 > 单片机dl

单片机dl

发布时间:2022-05-09 05:22:21

单片机 汇编DL1: MOV R3, #3 ; 时钟11.0592 这个是延迟多少时间

书上有公式可以计算的,但要先查出指令MOV R3, #3的周期数。
同时你还要知道你的单片机的工作时钟数,是单周期指令系统还是12周期指令系统?

❷ DL单片机中RP3是什么意思

RP表示排电阻,3就是序号。表示第三个排电阻。

❸ 单片机LED灯

ORG00H;起始地址

STRAT;程序已开始初始一些所需要的变量,如进位c清零等

MOVA,#0FFH;累加器的八位全置一(0ffh),发光二极管全熄灭

CLRC;进位c被清零,c=0

MOVR1,#8;R1等于八,循环八次(右移八次),用R1做计数器

RIGHT

RRCA;把进位c在累加器A中从左到右轮换一次

MOVP2,A;输出到P2口

CALLDELAY;调用延时子程序,延时一秒

DJNZR1,RIGHT;R1减一如果不为零,跳回RIGHT循环执行

MOVR2,#7;R2=7为向左流动设置次数

LEFT

RLCA;把进位C在累加器中从左向右轮换一位

MOVP2,A;输出至P2口

CALLDELAY;调用延时子程序延时1秒

DJNZR2,LEFT;是否左移了七次,如果不是则跳回LEFT继续执行

JMPSTART;跳回一开始重复执行该流水灯程序

DELAY

MOVR3,#20

D1:

MOVR4,#100

D2:

MOVR5,#248

DJNZR5,$;R5减一如果不为零就执行本行。时间计算【1+(248×2)】×100×20

DJNZR4,D2;上一个语句是执行一次耗费两个周期,要执行248次

DJNZR3,D1;所以时间就是248×2,MOVR5,#248这个语句是一个周期

;所以为248×2+1,DJNZR4,D2这个是R4减一次就执行D2

RET;DJNZR3,D1同理所以是(1+248×2)×100×20个机器周期

END;如果是按12兆的晶振(一个机器周期1微妙)来算那时间等于(1+248×2)×100×20个机器周期×1微妙=1000000微妙=1秒,如果是11.0592兆的晶振那时间等于(1+248×2)×100×20×12/11.0592微妙,也就是说一个机器周期的时间等于12/(晶振的频率)。

这个是P2口8个灯的循环亮程序;顺便帮你写个c语言的程序,高手勿喷啊

#include<reg51.h>

#include<intrins.h>

#defineuintunsignedint

#defineucharunsignedchar

voiddelay();

voidmain()

{

uchara;

P2=0x01;

while(1)

{

for(a=0;a<7;a++)

{

P2=_crol_(P1,1);

delay();

}

for(a=0;a<7;a++)

{

P2=_cror_(P1,1);

delay();

}

}

}

voiddelay()

{

uchars,i;

for(s=10;s>0;s--)

for(i=100;i>0;i--);

}

c语言就不多说啦,仅供参考。不过我觉得还是用c语言单片机编程简单。电路连接见仿真图

❹ 寻找2个独立串口的单片机!

STM32的话可以试试STM32F103C8T6,或者STM32F103T6U6,这两种是STM32里面个头最小的,有两个串口。当然单片机是贴片封装的,焊接的时候费事了。
DIP封装的单片机里,除了40脚的会有两个串口外,其余20引脚或者28引脚的基本没有。一般的单片机有一个串口就很不错了。

❺ 一个简单的单片机的问题

使用定时器,程序如下:
ORG 0000H
SJMP START
ORG 000BH
LJMP INT_T0
START:
MOV TMOD, #0x01; //定时器0方式1
MOV TH0, #0x3C;
MOV TL0, #0xB0; //12M晶振,50mS中断一次
MOV IE, #82H
SETB TR0 ; //开启T0
MOV R7, #2
SJMP $
INT_T0:
MOV TH0, #0x3C;
MOV TL0, #0xB0; //12M晶振,50mS中断一次
DJNZ R7, INT_END
MOV R7, #2
CPL P1.7
INT_END:
RETI
;完

小问题,不值得使用定时器。
ORG 0000H
CPL P1.7
LCALL DL50MS
LCALL DL50MS
SJMP 0000H
DL50MS:
MOV R6, #100
MOV R7, #250
DJNZ R7, $
DJNZ R6, $ - 4
RET

❻ 单片机几段程序 注释

1: dly1 equ 41h //让dly1是41h的别名,相当于c语言中得#typedef dly1 41h
2: dly2 equ 42h //同上
3: dly3 equ 43h //

4: org 0000h //把程序的起始地址放在0000h的地址上 ,你也可以把它放在别的位置上
5: mov p2,#0ffh //给P2口赋予ffh
6: mov dptr,#sm //把标号sm所在的地址,即17行的地址赋给指针dptr

//从7行道16行是个2成嵌套循环。这是个死循环,一般都是这样的。

7: loop:mov r0,#11 //loop是这行代码所在行的别名。给ro寄存器赋值11
8 clr a //把a寄存器清零,即a=0
9: lop: push acc //lop是这行的别名。把a压入堆栈,就是要保护a的值,acc其实就是a
10: lcall delay //调用delay这个别名所在的行,即18行
11: movc a,@a+dptr //注意是movc.把dptr加a这个地址上得数赋给a,
12: mov p2,a //把a的值赋给p2口
13: pop acc //从堆栈弹出a,也就是恢复a的值
14: inc a //a=a+1,自增1
15: djnz r0,lop //这是个判断转移句子。如果ro不等于0,则跳转到lop(即9行),同时ro=ro-1
16: sjmp loop //无条件跳转,直接跳转到loop(即7行)

17: sm: db 9Fh,25h,0Dh,99h,49h,41h,1Fh,01h,19h,71h,03h;

//从18行道24行,是个延时函数,通过三成循环实现

18: delay:mov dly1,#30 //把30放到41h的地址上。(dly1 equ 41h )
19: dlop2:mov dly2,#100 //同理
20: dlop3:mov dly3,#100 //
21: djnz dly3,$ //如果41h不等于0,则什么都不执行,然后41h=41h-1
22: djnz dly2,dlop3 //如果42h不等于0,则跳转到dlop3这行,也即是20行
23: djnz dly1,dlop2 //同上。
24: ret //返回调用delay这个函数的的下一行,也即是11行

26:end //结束

// 现在一般都不用汇编写单片机的代码了,一般都是用c语言,用keii开发平台,这个也就是考试用的吧
//所学未深,若有出错之处,敬请赐教

[email protected]

❼ w78e054b40dl单片机程序是固定的吗

w78e054b40dl单片机程序不是固定的,是可擦写的。

❽ 请问51单片机定时器延时的调用是怎么调用的我有点不明白,谢谢

51单片机的几种精确延时实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分
别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536
μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。 2 软件延时与时间计算 在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延时。下面介绍几种软件延时的方法。 2.1 短暂延时
可以在C文件中通过使用带_NOP_( )语句的函数实现,定义一系列不同的延时函数,如Delay10us( )、Delay25us(
)、Delay40us( )等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10 μs的延时函数可编写如下: void Delay10us( ) { _NOP_( ); _NOP_( ); _NOP_( ); _NOP_( ); _NOP_( ); _NOP_( ); }
Delay10us( )函数中共用了6个_NOP_( )语句,每个语句执行时间为1 μs。主函数调用Delay10us(
)时,先执行一个LCALL指令(2 μs),然后执行6个_NOP_( )语句(6 μs),最后执行了一个RET指令(2
μs),所以执行上述函数时共需要10 μs。
可以把这一函数当作基本延时函数,在其他函数中调用,即嵌套调用\[4\],以实现较长时间的延时;但需要注意,如在Delay40us(
)中直接调用4次Delay10us( )函数,得到的延时时间将是42 μs,而不是40 μs。这是因为执行Delay40us(
)时,先执行了一次LCALL指令(2 μs),然后开始执行第一个Delay10us( ),执行完最后一个Delay10us(
)时,直接返回到主程序。依此类推,如果是两层嵌套调用,如在Delay80us( )中两次调用Delay40us(
),则也要先执行一次LCALL指令(2 μs),然后执行两次Delay40us( )函数(84 μs),所以,实际延时时间为86
μs。简言之,只有最内层的函数执行RET指令。该指令直接返回到上级函数或主函数。如在Delay80μs( )中直接调用8次Delay10us(
),此时的延时时间为82 μs。通过修改基本延时函数和适当的组合调用,上述方法可以实现不同时间的延时。 2.2 在C51中嵌套汇编程序段实现延时 在C51中通过预处理指令#pragma asm和#pragma endasm可以嵌套汇编语言语句。用户编写的汇编语言紧跟在#pragma asm之后,在#pragma endasm之前结束。 如:#pragma asm … 汇编语言程序段 … #pragma endasm 延时函数可设置入口参数,可将参数定义为unsigned char、int或long型。根据参数与返回值的传递规则,这时参数和函数返回值位于R7、R7R6、R7R6R5中。在应用时应注意以下几点: ◆ #pragma asm、#pragma endasm不允许嵌套使用; ◆ 在程序的开头应加上预处理指令#pragma asm,在该指令之前只能有注释或其他预处理指令; ◆ 当使用asm语句时,编译系统并不输出目标模块,而只输出汇编源文件; ◆ asm只能用小写字母,如果把asm写成大写,编译系统就把它作为普通变量; ◆ #pragma asm、#pragma endasm和 asm只能在函数内使用。 将汇编语言与C51结合起来,充分发挥各自的优势,无疑是单片机开发人员的最佳选择。 2.3 使用示波器确定延时时间 利用示波器来测定延时程序执行时间。方法如下:编写一个实现延时的函数,在该函数的开始置某个I/O口线如P1.0为高电平,在函数的最后清P1.0为低电平。在主程序中循环调用该延时函数,通过示波器测量P1.0引脚上的高电平时间即可确定延时函数的执行时间。方法如下: sbit T_point = P1^0; void Dly1ms(void) { unsigned int i,j; while (1) { T_point = 1; for(i=0;i<2;i++){ for(j=0;j<124;j++){;} } T_point = 0; for(i=0;i<1;i++){ for(j=0;j<124;j++){;} } } } void main (void) { Dly1ms(); } 把P1.0接入示波器,运行上面的程序,可以看到P1.0输出的波形为周期是3 ms的方波。其中,高电平为2 ms,低电平为1 ms,即for循环结构“for(j=0;j<124;j++) {;}”的执行时间为1 ms。通过改变循环次数,可得到不同时间的延时。当然,也可以不用for循环而用别的语句实现延时。这里讨论的只是确定延时的方法。 2.4 使用反汇编工具计算延时时间
用Keil
C51中的反汇编工具计算延时时间,在反汇编窗口中可用源程序和汇编程序的混合代码或汇编代码显示目标应用程序。为了说明这种方法,还使用“for
(i=0;i<DlyT;i++) {;}”。在程序中加入这一循环结构,首先选择build taget,然后单击start/stop
debug session按钮进入程序调试窗口,最后打开Disassembly window,找出与这部分循环结构相对应的汇编代码,具体如下: C:0x000FE4CLRA//1T C:0x0010FEMOVR6,A//1T C:0x0011EEMOVA,R6//1T C:0x0012C3CLRC//1T C:0x00139FSUBBA,DlyT //1T C:0x00145003JNCC:0019//2T C:0x00160E INCR6//1T C:0x001780F8SJMPC:0011//2T

可以看出,0x000F~0x0017一共8条语句,分析语句可以发现并不是每条语句都执行DlyT次。核心循环只有0x0011~0x0017共6条语
句,总共8个机器周期,第1次循环先执行“CLR A”和“MOV
R6,A”两条语句,需要2个机器周期,每循环1次需要8个机器周期,但最后1次循环需要5个机器周期。DlyT次核心循环语句消耗
(2+DlyT×8+5)个机器周期,当系统采用12 MHz时,精度为7 μs。 当采用while (DlyT--)循环体时,DlyT的值存放在R7中。相对应的汇编代码如下: C:0x000FAE07MOVR6, R7//1T C:0x00111F DECR7//1T C:0x0012EE MOVA,R6//1T C:0x001370FAJNZC:000F//2T 循环语句执行的时间为(DlyT+1)×5个机器周期,即这种循环结构的延时精度为5 μs。 通过实验发现,如将while (DlyT--)改为while (--DlyT),经过反汇编后得到如下代码: C:0x0014DFFE DJNZR7,C:0014//2T 可以看出,这时代码只有1句,共占用2个机器周期,精度达到2 μs,循环体耗时DlyT×2个机器周期;但这时应该注意,DlyT初始值不能为0。 注意:计算时间时还应加上函数调用和函数返回各2个机器周期时间。

阅读全文

与单片机dl相关的资料

热点内容
程序员皮皮 浏览:411
一个单片机一个程序 浏览:99
python调用系统时间 浏览:765
鸿蒙20怎么弄大文件夹 浏览:613
美团的服务器是什么 浏览:357
axure原型设计精髓pdf 浏览:376
svox文件夹有用吗 浏览:506
怎样才可以给软件添加密钥 浏览:587
光纤通信原理pdf 浏览:207
c需要用什么编译器 浏览:702
python设置断点调试 浏览:313
pc手柄怎么连接安卓 浏览:33
dll解压不成功 浏览:344
连接地址服务器失败是什么 浏览:399
台达dvp14ss2编程电缆 浏览:133
单片机开发板设置技巧 浏览:343
阿里云服务器怎么配置git 浏览:414
androidcameraid 浏览:430
活塞式空气压缩机原理 浏览:791
vt编辑编制编译 浏览:807