用汇编语言编写时间间隔为200ms的流水灯程序,然后改写为1s的方法解释

作者&投稿:邬朋 (若有异议请与网页底部的电邮联系)
用定时器定时的方法控制8个LED流水灯,使流水灯循环流动点亮,时间间隔为1秒。1设置IE和TMOD的值2编写程序~

方法有很多的,给你一个,你可以调试一下,你可以通过不同的晶振去计算定时器初值,如果你懂定时器这部分很好调通的

#include
#include
unsigned char i;
void main()
{

TMOD=0x00;
TH1=0x3c;
TL1=0xb0;
EA=1;
ET1=1;
TR1=1;

while(1)
{
if(i==20)
{
i=0;

//下面写你要处理的的其他程序,你只要了定时1s。
}


}
}
void a(void) interrupt 3
{
unsigned char i;
TH1=0x3c;
TL1=0xb0;
i++;
}

流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:
ORG 0000H;复位启动AJMP START;ORG 001BH;T1中断AJMP T1INT;
;定义变量========================YSJSEQU 30H;延时计数器LEDEQU 31H;LED控制缓冲器
;主程序==========================START:MOV LED,#0FEH;初始化数据MOV YSJS,#0;MOV TMOD,#10H;定时器1工作于方式1,16位定时器MOV TL1,#0B0H;设置定时初值MOV TH1,#3CH;定时时间=50mSSETB ET1;使能定时器1中断SETB TR1;启动定时器1SETB EA;开总中断
MOV P1,LED;初始化流水灯LOOP:JMP LOOP;循环等待中断T1INT:PUSH PSW;定时器1中断程序PUSH ACC;保护现场MOV TH1,#3CH;定时时间=50mSMOV TL1,#0B0H;INC YSJS;
PUSH ACC;保护ACCMOV A,YSJI;CJNE A,#2,QT1;50mS*2=100mSMOV P1,LED;MOV A,LED;RL A;累加器A的值循环左移1位MOV LED,A;MOV YSJS,#0;QT1:POP ACC;恢复现场POP PSW;RETI;返回主程序END;汇编程序结束
扩展资料:
实现流水灯的三个方法:
第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。
第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。
第三种,库函数实现流水灯。利用左移函数进行。

以下程序12M晶振时200毫秒流水灯。
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
LOOP:
MOV P1,A
RL A
LCALL DELAY
SJMP LOOP
DELAY:
MOV R2,#200
DLY:
MOV R3,#250
DJNZ R3,$
MOV R3,#250
DJNZ R3,$
DJNZ R2,DLY
RET
END

这个我会,可以帮你写!


跪求单片机c51用汇编语言写的程序,功能为:8只发光二极管依次点亮,从...
include<iostream> include <intrins.h> unsigned int i;void delay_nms(unsigned int n) \/\/延时n ms { n=n+1;while(--n)delay_nus(900); \/\/延时 1ms,同时进行补偿 } void main(){ unsigned int i;while(1){ for(i=8;i>0;i--){ if(i==8)P1=~0x01;\/\/P1_0所接二极管...

汇编语言编写电子钟的时候如何实现暂停和停止功能……
这里,暂停和停止就没有太大区别了。显示系统事件的时候,肯定要做一个循环,在循环体后面加上判断按键的指令序列,定义按下某键为暂停、某键为停止,分支执行,便可实现。首先,用 Input:mov ah,1 int 16h jnz 显示时间标号 cmp al,'P' ;暂停 jz Input cmp al,'D'jz 显示时间标号 判断有无...

汇编语言时间显示与设置急用!!!谢谢
在dos模拟器中,读机器设置无问题,要重新设置是不行的。你在win x32的 cmd环境中试试。

汇编语言如何注释?
汇编语言的注释是每行从分号“;”开始的,分号之后的内容都属于注释。一般而言,汇编语言的注释在以下几个地方:1、程序的最前面,注释内容一般说明该程序总的说明,解释程序的主要功能,程序的版本号,程序的修改日志,程序的编制人等等 2、子程序的前面,一般说明该子程序或函数完成的功能,输入参数,...

汇编语言,十分简单的显示出系统日期, 呵呵,不要有太高的技术含量,要不 ...
直接访问cmos,70h,71h:assume cs:code code segment start: mov ax,0 mov al,9 mov si,0 mov cx,6 s: push cx push ax out 70h,al ;将al送入端口70h in al,71h ;从端口71h处读出单元内容 mov ah,al mov cl,4 shr ah,cl and al,00001111b ;al分成两个表示BCD码...

请求高手帮忙回答一个汇编语言中怎样求延时时间
粗略的算法是2XR2XR3XR4 (微秒),这里R2、R3为FFH再加1 ,即为256 。程序中的R5笔误,应是R4吧。这种方法只适合短时间的延时,长时间的,这样做,单片机其它什么事都不要做了。5秒,25秒,55秒等等,可以用定时中断方式来做。一般50MS一中断,计20次就是1秒了。这样,再长的时间,甚至几...

求单片机c51用汇编语言写的程序,功能为:8只发光二极管依次点亮,从...
51单片机汇编语言编程,流水灯如P1口8个Ⅰ\/O依次输出低电平点亮发光二极管,思路可以用定时器中断+计数来定时,可以用位移输出或者用状态表(查表法)输出,如表01111111、10111111、---、11111110,就是查表取状态字节再写入P1口。

基于单片机的多功能时间控制器的汇编语言
y--);} void time0() interrupt 1 { TH0=(65536-10000)\/256;TL0=(65536-10000)%256;tt++;} void time1() interrupt 3 { TH1=(65536-20000)\/256;TL1=(65536-20000)%256;num1++;} 这个是中断的一个简单的例子!工作方式和计算初值你应该会吧!在keil中可以把C语言转换成汇编语言!

51单片机,求用汇编语言编写延时1小时的子程序,要精确到秒级别
这个可以做到,如果晶振是12M的话,一下方法可以实现延时1小时,精确度在秒级别。DELAY1H:MOV R7,#180 ;1\/1000000 DLY1H:LCALL DELAY_20S ;180*19.960603s +2*180 DJNZ R7,DLY1H ;2*180\/1000000 RET 2\/1000000 共延时时间:3592.9s误差为7.1秒,如果再精确的话,再加一点延时...

用8086汇编语言,编写延时子程序
该程序的延时时间,请楼主按以下介绍方法及的资料自行计算:(1)时钟周期 T = 1\/(2.2x10^9) ≈ 0.45 ns ,(2)延时时间 = ∑(数据访问时间+指令执行时间)(3)常用指令执行的时间及各种寻址方式所用时间见下表(点击可显示大图):

清丰县18831138448: 单片机的程序求帮忙啊啊啊!!拜托了! 1用mcs51单片机制作一个简易流 -
类奇尼康: http://wenku.baidu.com/link?url=5AYRoVuJtYZ4rkxJtyk33UNy6-HXRzLUecBy9RfL5qHwVuk5-irQfg4UhyGKGgRuZ-CBhn32rhwIaRXtTcSzSOLMuCubAMe2U3aE2gTRy0e 只有靠自己

清丰县18831138448: 单片机C编程,我想用自定义的延迟函数延迟确定的时间,可以吗?比如200ms,怎么写? -
类奇尼康: 为什么不用定时呢?不是更加准确 自己写的延时程序 是可能 大概到200ms左右 for(i=0;i for(i=0;i里面的数字不一定是对的 还要看自己用的晶振是多大的~~直接在keil仿真调试里面看 sec

清丰县18831138448: 拜托拜托!! 1用mcs51单片机制作一个简易流水灯系统.八个发光二极管 -
类奇尼康: ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN: MOV TMOD,#01H MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 SETB ET0 SETB EA MOV R2,#4 MOV R7,#4 MOV R3,#0FEH MOV P0,A ...

清丰县18831138448: 单片机中,怎么用汇编语言编写程序实现延迟40ms -
类奇尼康: 1.循环延时的方法 DELAY: ;误差 0usMOV R7,#25H DL1:MOV R6,#9AH DL0:MOV R5,#02HDJNZ R5,$DJNZ R6,DL0DJNZ R7,DL1RET不过这不实用.40MS时间单片机都 在这里循环,不作能它事.1.可以用定时中断的方法: ...

清丰县18831138448: 求一个C51单片机上的20秒延时子程序!用汇编语言 -
类奇尼康: 1、软件延时方法:DELAY:MOV R7,#0BFH DL1: MOV R6,#0D1H DL0: MOV R5,#0F9H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 MOV R5,#02H DJNZ R5,$ RET2、定时器方法: ORG 0000H LJMP START ORG 000BH LJMP Timer0Interrupt ...

清丰县18831138448: 用汇编语言编写5ms定时器 -
类奇尼康: 如果是51单片机,12M,且没有中断.机器周期= 12M/12=1M =1us 已知,DJNZ是双周期指令,执行一次2us MOV R0,#5 LOOP2:MOV R1,#200 LOOP1:MOV R2,#250 LOOP:DJNZ R2,LOOP (250*2)*200*5 DJNZ R1,LOOP1DJNZ R1,LOOP2

清丰县18831138448: 单片机汇编语言怎么编定时器延时12小时 -
类奇尼康: 汇编看得懂,但不太会写,只会c. 其实单片机内有定时器,可以设置一下,比如定时10ms,设一个unsigned char型变量,计时到100,那就是一秒了,然后再设一个unsigned int 型变量,计时到12*60*60=43200,就是12小时了,最好用外部晶振,这样准确些

清丰县18831138448: 汇编语言延时程序 -
类奇尼康: ;很简单的一个小程序,以P1.0为例,任意一个IO都可以JNB P1.0,BACK;为低电平时不延时,直接去执行你想处理的事情 MOV R2,#9 ;为高则进入延时20us DELAY: DJNZ R2,DELAYBACK:;判断为高低电平后(延时或不延时后)进行处理的程序 BACK是一个标号,程序跳转的地址. 普通单片机时钟为12分频上,12M晶振,所以机器周期为1us. 延时20us=2+18 如果你的延时精度很高的话,建议你用示波器去看下.

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