导航:首页 > 操作系统 > 单片机写出延时小程序做出自己的分析

单片机写出延时小程序做出自己的分析

发布时间:2023-06-09 22:32:34

单片机C语言的延时程序源码分析,希望能帮我加注释,告诉我每句语句的含义谢谢!

H_DATA BIT P3.2 将p3.2引脚命名为H_DATA,以后用H_DATA就能代表P3.2
H_CLK BIT P3.4 同上,将P3.4命名为H_CLK

?PR?DELAY30US SEGMENT CODE 函数DELAY30US声明
PUBLIC DELAY30US
RSEG ?PR?DELAY30US

; abc XDATA 0A00H

;35.8US
DELAY30US: 函数体
PUSH 05H ;2因为函数用到R5,所以将进入函数之前的R5压入堆栈,返回前提出
MOV r5,#50 ;25 为R5赋值
DE30S1:
DJNZ r5,DE30S1 ;2*14=28 对R5减一,判断不等于零跳到DE30S1;等于零退出
POP 05h ;2把进入函数前的R5恢复
RET 函数返回
;******************************************************************
?PR?DELAY10US SEGMENT CODE 声明DELAY10US函数
PUBLIC DELAY10US
RSEG ?PR?DELAY10US
;16.3US
DELAY10US: DELAY10US函轿段数体
PUSH 05H ;2因为函数用到R5,所以将进入函数之前的R5压入堆栈,返回前提出
MOV r5, #20 ;10为R5赋值
DE10S1:
DJNZ r5, DE10S1 ;5*2=10对R5减一,判断不等于零跳到DE10S1;等于零退出
POP 05H ;2把进入函数前的R5恢复
RET 函数返回
?PR?CLSSIGNAL SEGMENT CODE 声贺雹明函数CLSSIGNAL
PUBLIC CLSSIGNAL
RSEG ?PR?CLSSIGNAL
CLSSIGNAL:
;WHEN SYSTEM SEND INFORMATION TO PINPAD, SEND STOP BIT AT END, THEN NEXT A
;SEND OPERATION. SO WAITTING STOP BIT FINISHED.
CLSL1:
PUSH 05H 因为函数用到R5,所以将进入函数之前的R5压入堆栈,返回前提出
CLSL1_U:
MOV R5, #6EH 对R5赋值
CLSL2: JNB H_DATA, CLSL1_U 判断p3.2不为零跳转,继续闭拍誉赋初值
JNB H_CLK, CLSL1_U 判断p3.4不为零,继续赋初值
DJNZ R5, CLSL2 如果两个输入都为零对r5减一,不为零跳到clsl2
POP 05H
RET

END

⑵ 请帮忙在51系列单片机系统中,编写一个延时1ms的子程序。谢谢。。

1、首先,在电脑中打开keil软件,创建好工程,然后添加c文件,如下图所示。

⑶ 51单片机,晶振为6M请帮忙写一个10ms的延时程序,能有详细解释的。因为我还不知道这个延时的时间是怎么算

延时有很多种方法,有一种是让单片机去做无聊的循环,
还有一种是用定时器。
我本身也是菜鸟所以只能粗略的讲一下。
第一种的算法
晶振的周期T1=1/f; 这里f=6MHz 所以T1=1/6 us;(微秒)
单片机花12个T1去执行一个指令,
所以一个机器周期等于12个晶振周期,
T2=12*T1=2us
10ms=1000 0us
所以你要得到10ms的延时就要想办法让机器去做5000条“无聊的指令”
所以
DEL: MOV R5,#05H
F1: MOV R6,#05H
F2: MOV R7,#32H
F3: DJNZ R7,F3
DJNZ R6,F2
DJNZ R5,F1
RET
这种方法是用于对时间要求不高的地方,我说的是其思想,程序中可能有错的地方
用定时器的方法我不太会就不误人了 (补充一下就是这个是用汇编写的,你在主程序中用ACALL DEL调用就延时了。

⑷ 单片机延时时间程序怎么编程

举一个例子来说明吧.比如你要编一个延时50毫秒的子程序,那么步骤如下:
1、查看一下你的硬件环境,比如晶振大小,CPU型号,不用CPU指令的机器周期是不一样的。
2、计算延时需要的机器周期。比如采用12M晶振,CPU采用通用8051,那么一个机器周期为1US,50毫秒为50*1000=50000US,需要的机器周期=50000/1=50000。
3、试编程,如下:

程序代码 指令时间 总共时间
DELAY50MS: ;2 2
MOV R7,#A ;1 1
DELAY1:
MOV R6,#B ;1 1*A
DJNZ R6,$ ;2 2*B*A
DJNZ R7,DELAY1 ;2 2*A
RET ;2 2
所以总时间=2+1+A+2*A*B+2*A+2=5+3A+2AB
4、凑数求A、B
根据2、3得到如下式子:
50000=5+3A+2AB
可以有很多种结果,不过最好是以A尽可能小,B尽可能大为原则,当然不能大于255.
我现在凑出A=110,B=225;那么总延时时间=5+3*110+2*110*225=49835。还差165US
5、补齐不够时间
再加一个小循环就OK了,呵呵如下:
MOV R6,#C
DJNZ R6,$
会算了吧,2*C+1=165;所以C=82。
现在完整的延时程序出来了,如下:
DELAY50MS: ;2 2
MOV R7,#110 ;1 1
DELAY1:
MOV R6,#225 ;1 1*110
DJNZ R6,$ ;2 2*225*110
DJNZ R7,DELAY1 ;2 2*110
MOV R6,#82 ;1 1
DJNZ R6,$ ;2 2*82
RET ;2 2
很圆满:总的时间50000微妙,也就是50毫秒。这种方式编程,在该硬件环境下可以保证最大误差为1微妙。

阅读全文

与单片机写出延时小程序做出自己的分析相关的资料

热点内容
华为手机的方舟编译器在哪呢 浏览:121
下载压缩虐杀原形2 浏览:903
linux脚本cd 浏览:162
间架结构pdf 浏览:843
重庆农村商业银行app怎么老出问题 浏览:471
慧编程配置要求 浏览:673
数控机床编程与操作视频 浏览:461
文件夹资料误删怎么办 浏览:87
手机app怎么下载安装 浏览:492
最新的java版本 浏览:993
万卷小说缓存在哪个文件夹 浏览:687
st单片机怎样烧 浏览:871
watch怎么下载APP 浏览:821
银行程序员面试 浏览:358
我的世界的服务器为什么不能更新 浏览:769
命令与征服绝命时刻比赛视频 浏览:827
电脑捕获视频的文件夹怎么换 浏览:484
windows编译安卓软件 浏览:212
加密dns列表 浏览:991
股市操练大全八册pdf 浏览:122