delay延时1s程序
答:DELAY1s: MOV R5,#08H ; ∵ 1s=1000000us MOV R6,#0A2H ; ∴ 1000000/2=500000 MOV R7,#20H ; 500000用16进制表示为: 07A120 ; 所以 R5=07H+1=08H ; R6=0A1H+1=0A2H ; R7=20Hloop: DJNZ R7,...
答:Assume CS:Code,DS:Code ; --- ; Subroutine 延时指定的时钟嘀嗒数 ; 入口:; Didas=时钟嘀嗒数(1秒钟约嘀嗒18.2次,10秒钟嘀嗒182次。若延时不是秒的10数次倍,误差稍微大点)Delay1S Proc Near push dx push cx xor ax,ax int 1ah mov Times,dx mov Times[2],cx Read...
答:{ Delay1S(1);} }
答://取值范围0-255,数值越大,延时越长 {;} } } void delay1s(uint i) //1s延时程序 { for(;i>0;i--){delay1ms(1000);} } void main(){ led=0;while(1){ if (s==0){ delayms(20);if (s==0);{delay1s(60);led=1; } } if(led==1){delay1s(1800);led=0; } } ...
答:delay1000ms:(HT46R65的单片机)(注意不要开启计时中断允许位)mov a,10000111b (设置频率和记数方式)(上升记数还是下降记数)mov tmr0c,a (tmr0c 计数器的控制寄存器)mov a,low(65536-31250) (设置的频率就是1S上升31250)因此是DELAY1S mov TMR0L,a (计数器的赋予初始值的...
答:延时变量两个for循环里同时用一个参数i了。要改成:delay1s(){ unsigned int i,j;for(i=1000;i>0;i--)for(j=123;j>0;j--);} 最好写成带参数的好,如:void delay_ms(uint xms){ unsigned int i,j;for(i=xms;i>0;i--)for(j=123;j>0;j--);} 如要延时1S时,函数调用时...
答:DEL1S:MOV R7,#10 D1: MOV R6,#200 D2: MOV R5,#250 DJNZ R5,DJNZ R6,D2 DJNZ R7,D1 RET 说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等 2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5 ...
答:DELAY1S:MOV R2,#10 DLY1:MOV R3,#200 DLY2:MOV R4,#248 DJNZ R4,DJNZ R3,DLY2 DJNZ R2,DLY1 RET
答:通过调用这个子程序就可以实现 DEL1S: MOV R1,#10 DEL1: MOV R2,#100 DEL2: MOV R3,#250 DEL3: DJNZ R3,DEL3 ;2*2*250*100*10=1000000us DJNZ R2,DEL2 DJNZ R1,DEL1 RET 没有做具体计算,要准确的定时1s的话可以稍微改动一下R1R2R3的值。6M晶振则机器周期为2us,一条指令执行为2...
答:我这有个函数自己实验出来的,在KEIL里看差不多就是延时1毫秒 void delay1ms(unsigned int t){ unsigned x,y;for(x=t;x>0;x--)for(y=124;y>0;y--);} 把t 改为你要延时的数就可以了,1毫秒就把t改为1 500毫秒就把t改为500 ...
网友评论:
廉傅18224756151:
89C51单片机1S的延时程序? -
62598桂洋
: void delayms() // 延时子程序 对应12M晶振 {unsigned int ms=1000;while(ms--) //每一次循环1ms{for(i = 0; i < 120; i++);} }
廉傅18224756151:
请问在单片机C语言编程中,用delay延迟的话,1秒程序是什么?单片机晶振为12MHZ ... -
62598桂洋
: 在Keil里仿真的话,在配置里把晶振调成12MHz,然后在调用delay函数的地方设置一个断点,开始调试程序,运行到断点处,注意程序左边有一个记录当前寄存器和一些状态的窗口,其中,里面有一个是专门记录当前运行了多少时间的变量,记下当前时间T1,然后按F10(不进入子函数)调试,再记录当前时间T2,则延时=T2-T1.多试几个A,差不多调到1s就够了.我一般都这么调.你要想明白其中原理,想自己算的话,你就看看delay的汇编代码段自己算吧.
廉傅18224756151:
用汇编语言写一个延时1s的delay子函数. -
62598桂洋
: DELAY:MOV R3,#05H DL3:MOV R4,#0FAH DL2:MOV R5,#0F6H; DL1:DJNZ R5,DL1延时246us DJNZ R4,DL2;(246+4)*250=62500us DJNZ R3,DL3;62500*16=1s
廉傅18224756151:
编写一段延时1秒的程序(fosc=6MHz)学习单片机的~ -
62598桂洋
: 定时器法: delay: mov tmod,#01 mov th0,#3ch mov tl0,#0b8h;设置参数使每100ms中断一次. clr ea clr tf0 mov r7,#10 setb tr0 d: jnb tf0,$ clr tf0 djnz r7,d ret
廉傅18224756151:
单片机设置精确的延时,主频11.0592MHz,想延时1s,如果编码? Delay函数如何写,请详细说明算法?
62598桂洋
: void init(void){ TMOD=0x01; EA=1; ET0=1; TH0=(655536-46080)/256; TL0=(655536-46080)%256; TR0=1;}void one_second(void) interrupt 1{ static unsigned int count=0; TH0=(655536-46080)/256; TL0=(655536-46080)%256; if(++count==20)//1s { count=0; //do something... }}
廉傅18224756151:
哪位会用C语言编写1s 延时程序(不是单片机延时,纯属是在C程序中延时),请求指教 -
62598桂洋
: void delay1s(void) //误差 0us { unsigned char a,b,c; for(c=167;c>0;c--) for(b=171;b>0;b--) for(a=16;a>0;a--); _nop_(); //if Keil,require use intrins.h }
廉傅18224756151:
c语言三重循环延时程序 -
62598桂洋
: for循环实现C语言精确延时 (晶振12MHz,一个机器周期1us.) 一. 500ms延时子程序 程序: void delay500ms(void){ unsigned char i,j,k; for(i=15;i>0;i--) for(j=202;j>0;j--) for(k=81;k>0;k--); } 产生的汇编: C:0x0800 7F0F MOV R7,#0x0F C:0x...
廉傅18224756151:
怎么把单片机的数字电子钟延时1s -
62598桂洋
: 那个delay函数里的参数不对吧,怎么是0呢 c<=120估计一个循环是1ms 那么a应该赋值1000吧 另外要做一个比较精确的数字钟的话用delay还是不行的 等你学到了就知道了
廉傅18224756151:
怎么把单片机的数字电子钟延时1s
62598桂洋
: 大哥,一般都不像你这样写的呀! void delay10ms(int x) { int i,j; // 声明变量 for (i=1;i<x;i++) // 执行x次,延迟X*10ms for (j=1;j<1200;j++);// 执行120次,延迟10ms } // delay1ms()函数结束 如果你的延时精度要求不高,调用delay10ms(100)约1s就可以了呀.如果你的延时要求精度高的话,用51内部的定时器.
廉傅18224756151:
求一个1ms的单片机C语言延时程序 -
62598桂洋
: void delay(char x) { unsigned char a,b,c; for(c=x;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--);} 学过标准C就知道了,char 和int 是可以相...