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

作者&投稿:杭蕊 (若有异议请与网页底部的电邮联系)
找一个单片机汇编语言编写的延时1ms的子程序~

多简单的小程序呀:


TIME1MS:
MOV R6, #2
TIME1:
;延时498uS
MOV R7, #248
DJNZ R7, $ ;R7的为0时,程序向下运行,否则继续减
;
DJNZ R6, TIME1 ;加上此命令后,每个小周期时间为500uS
;运行两周为1MS,再加上最前面的MOV R6那条指令,就是1.002MS
RET

此程序实现的是1.002MS的定时,当然这当中不算主程序调用此延时程序时现场保护的时间,即压栈和出栈的时间

void delay(uint n)
{
uint i,j;
for(i=n;i>0;i--)
{
for(j=110;j>0;j--);
}
}
当n=1是延时大约是1ms,就是说n等于都少就延时多少ms,当然n的值不超过uint的最大值。
头文件下请定义宏
#define uchar unsigned char
#define uint unsigned int

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

2、然后添加c文件,接下来输入代码,先输入一个头文件命令。

3、然后,进行宏定义,代码如图所示。

4、然后声明P1口,如下图所示。

5、最后,将延时语句全部添加进去,代码按照图中所示的直接敲入即可。

6、最后,点击编译,生成HEX文件就可以了,这样51单片机延时语句就完成了。



void delay(unsigned int x) //延时 x ms
{
unsigned int i,j;
for(i=x;i>0;i--)

for(j=110;j>0;j--);
}
延时1ms 即为使x=1;
这程序延时约1ms(x=1时用keil测出来约 0.96831272ms,近似1ms),用C语言很难做到准确的1ms。注意晶振为11.0592MHZ的时候用~

void delay_ms(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
这是12MHz用的ms延时程序 我用示波器测了,很准

在汇编里面可以用JNZ语句,利用所赋初值,写一个减一不为零跳转指令,跟C语言的for循环一个意思

假设12MHZ.误差自己调,用NOP微调。
MAIN: MOV R5,#10
DEL1:MOV R6,#200
DEL2:MOV R7,#246
NOP
DEL3:DJNZ R7,DEL3
DJNZ R6,DEL2
DJNZ R5,DEL1
SJMP $


MCS-51单片机的分类
可多机通信-111条指令,包含乘法指令和除法指令-片内采用单总线结构-有较强的位处理能力-采用单一+5V电源 52系列是增强型,有8032、8052、8752、8952四个机种。8052的ROM为8KB,RAM为256B;8032的RAM也是256B,它没有ROM,这两种单片机比8051和8031多了一个定时器\/计数器,增加了一个中断源。

51系列单片机发出pwm 控制舵机一定要在P1.0输出加高速光隔(6N137)才...
光耦是起信号隔离作用的,加了可以提高抗干扰能力。PWM既可以用定时器中断来实现,比较稳定;也可以用延时的方法来解决,如果你除了PWM控制信号外还需要做其他工作的话,就要解决好运行程序时的时间开销。保证PWM信号的稳定性。还可以选择增强型的51单片机,现在很多新型51都带PWM控制的,使用起来更方便。

比较51系列、AVR系列和PIC系列单片机的优缺点
数据的传送和逻辑运算基本上都得通过工作寄存器w(相当于5l系列的累加器A)来进行,而51系列的还可以通过寄存器相互之间直接传送(如:MOV30H,20H;将寄存器20H的内容直接传送至寄存器30H中),因而PIC单片机的瓶颈现象比51系列还要严重,这在编程中很有感受。3、AVR单片优缺点分析。AVR单片机其显著的特点为...

51单片机系列:单片机最小系统
此最小系统中的电源供电模块的电源可以通过计算机的USB口供给,也可使用外部稳定的5V电源供电模块供给。电源电路中接入了电源指示LED,图中R11为LED的限流电阻,S1 为电源开关。复位电路由按键复位和上电复位两部分组成。 上电复位:STC89系列单片及为高电平复位,通常在复位引脚RST上连接一个电容到VCC,...

51单片机和52单片机区别
51单片机和52单片机区别:1、种类不同:51系列单片机是指51内核,stc89c5X基本都是51内核的种类。2、大小不同:最后一个数字表示E2prom的大小,E2prom=X*4K,c51就是4K,c52就是8k。3、配件不同:52还多了一个定时器,所以可以说52是51(这个51是指stc89c51,不是51内核)的增强型。单片机(...

51单片机的cpu由那几个部分组成?
内部程序存储器(ROM):在前面也已讲过,MCS-51内部有4KB\/8KB字节的ROM(51系列为4KB,51系列为8KB),用于存放程序、原始数据或表格。因此称之为程序存储器,简称内部RAM。地址范围为0000H——FFFFH(64KB)。定时器\/计数器 51系列共有2个16位的定时器\/计数器(52系列共有3个16位的定时器\/计数...

C51单片机分类
89S51在工艺上进行了改进,89S51采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。89SXX可以像下兼容89CXX等51系列芯片。同时,Atmel不再接受89CXX的定单,大家在市场上见到的89C51实际都是Atmel前期生产的巨量库存而以。如果市场需要,Atmel当然也可以再恢复生产AT89C51。89S51相对于89C51增加的新...

51系列单片机的哈佛结构与通用哈佛结构的不同之处,以及在性能取向上的...
单片机的存储体系就是两种结构 冯诺依曼或普林斯顿,数据、程序一体化,结构简化 哈佛,数据、程序分开存储,性能更高 传统51单片机的数据、程序分开存储,从外貌看属于哈佛;但是51的数据和程序共享同一条总线,不是两条独立的总线,从本质看属于普林斯顿。老51是Intel发明的,40多年前的事了,沿用计算机...

帮忙编写一个51单片机的程序
注明:程序应该仿真通过了,只是你说的是低电平动作,那样你从高电平到低电平的瞬间,马上再打到高电平,不然很快1S过去,又会检测到低电平。ORG 0000H SJMP MAIN ORG 000BH SJMP T0_PRO ORG 001BH SJMP T1_PRO MAIN:SETB EA ;CPU中断开放 SETB ET1 ;定时器1中断允许 MOV TMOD,#11H ...

MCS-51系列各档单片机各有什么特点?同一档次的8051、 8751、8031又有何...
【答案】:(1)不同型号MCS-51单片机CPU处理能力和指令系统完全兼容,只是存储器、定时器、中断源和I\/O接口的配置有所不同。(2)8051:片内含有掩膜ROM型程序存储器;只能由生产厂家代为用户固化; 批量大、永久保存、不修改时用。8751:片内含EPROM型程序存储器; 用户可固化,可用紫外线光照射擦除;但...

古塔区15865121631: 在51单片机下,请编写一段程序,将40H到4FH的16个寄存器依次赋值0到15? -
魏阁强力: 在51单片机下,请编写一段程序,将40H到4FH的16个单元(不叫寄存器)依次赋值0到15? MOV A , #0 MOV R0 , #40H WRITE:MOV @R0 , A INC R0 INC A CJNE A , #16 , WRITE END

古塔区15865121631: 用c++怎么编写51单片机程序,可以这么样编写吗???? -
魏阁强力: 相信很多初学者都有同样的疑问,也有同样的希望.就是用C++语言来写单片机程序的源代码.现在我来解释一下单片机的源代码程序几乎没有人用C++来写的. 1. 假设一下你现在用C++写完了一个程序代码.那么你要让单片机认识必须要编译...

古塔区15865121631: 求帮忙编一段 汇编语言,基于51单片机的密码锁,要求在下面.真心求帮忙啊 -
魏阁强力: ;根据题目要求,本设计操作如下: ; ;1.初始状态数码管全显示0,然后按键盘输入4个数字,输入完成后按键盘的 ;“F”键,将输入的4为密码与原始密码1234比较,如果正确相同则P0.0口接的继电器 ;工作灯亮.如果错误不相同,则恢复初始状态全显示0. ;2.输入过程中,led会逐位'-',直到密码输入完成 ;3.密码正确以后,led显示open ;4.若要重新输入密码,按单片机复位键或者按键盘的“D”键即可重新输入原理图和代码详见附件. 原理图用proteus绘制,并仿真成功. 代码用汇编编写,keil u4下编译成功. 有问题请追问.

古塔区15865121631: 帮忙编写一个51单片机的程序 -
魏阁强力: 注明:程序应该仿真通过了,只是你说的是低电平动作,那样你从高电平到低电平的瞬间,马上再打到高电平,不然很快1S过去,又会检测到低电平.ORG 0000H SJMP MAIN ORG 000BH SJMP T0_PRO ORG 001BH SJMP T1_PRO MAIN: ...

古塔区15865121631: 能帮忙编一个利用51单片机内部eeprom,来保存数码管显示的程序吗.请大虾帮忙,会追分的.先谢谢哈. -
魏阁强力: 以下是单片机实践团为您解答:1、从您的描述大概懂您的意思,一般对于某些需要保存某些用户信息数据的场合都是使用EEPROM来实现.比如可以设置报警温度的测温系统,在不同的季节需要不同的报警阈值,所以一般会引入EEPROM用于保存报警温度.2、您描述的采用51单片机内部的EEPROM,不知道您说的是哪一款单片机,请告之具体的型号.就我所知的51内核的带EEPROM的单片机有STC和c8051f系列的.非51内核的很多都带eeprom的,比如stm8.3、如果是使用一般的51芯片的话(比如at89c5x)可以通过外扩EEPROM来实现,推荐AT24C02等根据您的容量来确定型号.4、不明白的hi我,常在线.

古塔区15865121631: 求编写一段简单的单片机程序,要求如下 -
魏阁强力: main() { unsigned char time=0; TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率 TH1 = 0xFD; // 波特率9600 TL1 = 0xFD; SCON = 0x50; // 设定串行口工作方式PCON &= 0xef; // 波特率不倍增 TR1 = 1; // 启动定时器1 IE...

古塔区15865121631: 求高手帮助编写51单片机控制直流电动机正反转的程序 -
魏阁强力: 这个很简单啊!只须要一个引脚就可以搞定: 用两只继电器,把他们的线圈引脚并连.并联接单片机的其中一个引脚相连即可.(一只继电器有两对触头,即常开和常闭,把一只继电器的常开脚与另一只继电器的常闭相连,注:每只继电器的两对触头都要用上,然后公共脚接电源的正负两极,再把电机的两个脚上引出的线接上继电器的两个脚上就可以了) 这样就能实现电机正反转了.

古塔区15865121631: 已知MCS - 51系列单片机系统的fose=6MHz,编写程序在P1.7口产生频率为200Hz的方波 -
魏阁强力: #include<reg51.h> sbit pluse=P1^7; void t0isr() interrupt 1 { TH0=(65536-2500)/256; TL0=(65536-2500)%256; pluse=~pluse; } main() { TMOD=0x01; TH0=(65536-2500)/256; TL0=(65536-2500)%256; TR0=1; ET0=1; EA=1; while(1); }

古塔区15865121631: 怎么在protues中编写51单片机程序 -
魏阁强力: 这是仿真软件 不能编程序,可以用KEIL编 编号了生成.HEX文件,然后把这个hex文件导入protues就可以了

古塔区15865121631: 在51系列单片机的指令系统中,其加法,减法,乘法和除法必须又累加器A -
魏阁强力: 是的,乘法和除法的两个运算数必须是一个放在累加器A中,另一个在寄存器B中,运算结果也是商放在A 中,余数放在B 中,积的高位放A中,低位放B 中,除一些自减1运算可以在其它寄存器中进行, 加减法的一个操作数也放要在A中,你看一下51单片机的运算指令就明白了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网