A. 请问在单片机C语言编程中,用delay延迟的话,1秒程序是什么单片机晶振为12MHZ
在Keil里仿真的话,在配置里把晶振调成12MHz,然后在调用delay函数的地方设置一个断点,开始调试程序,运行到断点处,注意程序左边有一个记录当前寄存器和一些状态的窗口,其中,里面有一个是专门记录当前运行了多少时间的变量,记下当前时间T1,然后按F10(不进入子函数)调试,再记录当前时间T2,则延时=T2-T1。多试几个A,差不多调到1s就够了。我一般都这么调。
你要想明白其中原理,想自己算的话,你就看看delay的汇编代码段自己算吧。
B. 任意型号单片机,延迟1或2秒怎么写12M,24M怎么算for后面怎么写。要过程不要结果。
一般先写一个延时几个毫秒的子程序,很简单。
void delay( int ms )
{
while( ms-- )
{
int i = 延时常数;
do { _nop_(); } while( --i );
}
}
要延时一秒钟,就是1000ms,delay( 1000 );
几个注意事项,
1、延时程序没有关中断,所以中断程序会影响定时精度。
2、延时常数可以用软仿真程序实验确定,需要根据不同的单片机、晶振频率调整延时常数。
3、想要适用任意型号单片机,内层循环最好加一句空操作,通常这可以阻止编译时优化程序。
C. 51单片机延时一秒函数,晶振12MHZ
我这有个函数自己实验出来的,在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
D. 单片机1秒钟定时汇编语言怎么编
可以有两种方法,设晶振为12M,则
第一种方法:用延时的方法实现
DELAY: MOV R3,#10;延时子程序,延时1秒
D1: MOV R4,#200
D2: MOV R5,#250
D3: DJNZ R5,D3
DJNZ R4,D2
DJNZ R3,D1
RET
END
第二种方法:用定时器的方法实现
————
MOV R1,#20
————
DLY: MOV TMOD,#00000001B;延时子程序,设定定时器的工作方式
D1: SETB TL0,#176(65536-50000); 15536/256 (余数)
SETB TH0,#60;设置初出溢出值50ms,定时2S (商)
SETB TR0 ;启动定时器
JNB TF0,$;是否溢出,没有溢出等待,溢出走一条指令
CLR TF0;清零溢出
DJNZ R1,D1;走20次,刚好1秒
RET
END