1、 已知单片机的晶振为12M,请以子函数形式写出10毫秒延时程序。该怎么写啊?用C语言写。
首先是10毫秒延时子程序,其代码如下:
void delay10ms(void) { unsigned char i,j,k; for(i=5;i>0;i--) for(j=4;j>0;j--) for(k=248;k>0;k--); }
这个程序通过嵌套的for循环来实现延时。每个循环内部包含一个计数器,当计数器递减至零时,循环结束。通过调整循环次数,可以实现精确的延时。
对于更长的延时,例如1秒,可以使用以下代码:
void delay1s(void) { unsigned char h,i,j,k; for(h=5;h>0;h--) for(i=4;i>0;i--) for(j=116;j>0;j--) for(k=214;k>0;k--); }
这个程序的延时时间更长,通过增加嵌套循环的层数和内部计数器的值来实现。
此外,还可以编写200毫秒和500毫秒的延时子程序:
void delay200ms(void) { unsigned char i,j,k; for(i=5;i>0;i--) for(j=132;j>0;j--) for(k=150;k>0;k--); }
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--); }
这些程序同样通过嵌套循环来实现延时,但内部的计数器值有所不同。
除了软件延时,还可以使用定时器来实现更精确的延时。例如,使用定时器0工作在方式1(16位计数器)下,可以实现不同的延时时间。
对于8MHz晶振,也有相应的延时程序。例如,实现0.9毫秒延时的代码如下:
void delay_0_9ms(void) { TMOD=0x01; /*定时器0工作在模式1下(16位计数器)*/ TH0=0xfd; TL0=0xa8; TR0=1; /*启动定时器*/ while(TF0==0); TR0=0; }
这些程序展示了如何根据不同的晶振频率和延时需求来编写延时子程序。
设单片机晶振频率为12MHZ,试编写一延时500us的子程序。51单片机
如果是标准的12T单片机模式,那么一个时钟周期就是1us,把定时器T0(或T1)设置为16位模式,TH0、TL0的初始值分别设为#FEH、#0BH,进入子程序时,启动定时器T0,定时器从#FEOB运行500个时钟周期,正好是#FFFFH,定时器T0溢出,即为500us。
已知单片机晶体振荡器的频率是12MHz,利用定时器1采用方式1在P1.7脚上...
include<reg51.h> sbit p17=P1^7;void t1isr() interrupt 3 { TH1=(65536-50000)\/256;TL1=(65536-50000)%256;p17=~p17;} main(){ TMOD=0x10; \/\/定时器1设置为模式1 TH1=(65536-50000)\/256; \/\/0.1S的周期,50毫秒翻转一次,所以初始值为50000个计数值。TL1=(65536-50000)%256...
MCS-51单片机的编程题:已知系统晶振频率为12MHZ,采用定时器T0的方式1...
DELAY1S: MOV TMOD,#01H MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 MOV R2,#20LOOP: JNB TF0,$ CLR TF0 CLR TR0 MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 DJNZ R2,LOOP RET ...
单片机计数值问题,注意不是计数初值。已知晶振频率为12MHz,问1ms的计...
1ms对应的1000的计数值,公式就是计数值=定时时间\/机器周期。这是51单片机工作在方式1
假设单片机系统的晶振频率为12MHz,要求采用定时器时50毫秒,计算计数器...
1、已知单片机系统机器周期为时钟周期的12倍,故每个机器周期为12\/12M=1us 2、50ms=50*1000us 3、16位定时器的定时时间最长为65536us,定时50us的初值为65536-50*1000=0x3cB0 4、0x3cb0就是初值,其中TH=0x3c,TL=0xb0
51单片机在12M晶振时,每秒可执行多少条指令?怎么计算?
时钟周期是单片机的晶振周期,如果你接入的单片机是12M晶振,你的时钟周期就是1\/12M 机器周期是单片机指令中最少的时钟周期,是时钟周期的12倍 指令周期是运行一条指令所需要的机械周期 例如单片机接晶振12M 时钟周期是 T = 1\/12M = 0.083uS 机械周期是 T = 12 × 1\/12M = 1uS MUL AB 他的...
已知单片机的外接晶振频率fosc=12MHz 。请编写汇编语言子程序,其功能...
实际为0.100005s delay01s:mov r1, #200 loop01s:mov r0, #249 djnz r0,djnz r1, loop01s ret 实际为1.000074s delay1s:mov r0, #10 loop1s:acall delay01s djnz r0, loop1s ret 实际为60.004568s delay1m:mov r0, #60 loop1m:acall delay1s djnz r0, loop1m ret ...
设单片机系统的晶振为12MHz,要求使用定时计数器1,用C语言 编写程序实现...
系统晶振为12MHz时,定时器的计数脉冲周期即为 1uS;要求输出周期为200us,占空比为50% 的方波,即方波的高电平时间=100uS,低电平时间=100uS。所以每定时100uS便产生一次中断,并将输出信号状态翻转一次;sbit cp=P1^7;void timer1 interrupt 3 { cp=~cp; } void main(){ TMOD=0x20; \/\/ ...
8051单片机系统中,已知晶振频率为12MHZ,用定时 计数器T1,编程实现从P...
include define uint unsigned int sbit P1_1=P1^1;void main( ){ uint i;TMOD=0x10; \/\/设置T0定时,工作在模式3 ...
设单片机晶振频率为12MHZ,试编写一延时1s的子程序
DELAY1S:MOV R2,#10 DLY1:MOV R3,#200 DLY2:MOV R4,#248 DJNZ R4,DJNZ R3,DLY2 DJNZ R2,DLY1 RET