您好,偶然看到您回答了为频率为12mhz晶振的mcs-51编写10ms延时程序这道题,

习题(中断与接口及答案)_文档库
文档库最新最全的文档下载
当前位置: & 习题(中断与接口及答案)
习题(中断与接口及答案)
单片机练习三中断与接口
一.单项选择题
1. 已知MCS-51单片机系统晶振频率为12MHZ,SMOD=1,串行口工作于方式2的波特率为(
2. MCS-51单片机T0作为计数器工作于不受外部信号INTO控制,T1作为定时器,T0工作于方式0,T1工作于方式1,其方式控制字的内容为(
3. 控制定时器工作方式的寄存器是(
4. MCS-51单片机的中断允许触发器内容为83H,CPU将响应的中断请求是(D )。
A. INTO,INT1
C. T1, 串行接口
D. INTO,T0
5. 设定时器/计数器T0工作于方式3,则TH0作为一个独立的8位定时器,它的运行由控制位(D )。
6. 当MCS-51进行多机通信时,串行口的工作方式应选择(
C. 方式2或方式3
7. 8031单片机的串行口的中断程序入口地址为(
8. 已知单片机系统的fosc=6MHZ,执行下列延时程序的时间为(
DY2:MOV R6,#2
DLP1:MOV R7,#250
DLP2:DJNZ R7,DLP2
DJNZ R6,DLP1
9. 串行口中断入口地址是(
10. 若MCS-51单片机的晶振频率为24MHZ,则其内部的定时器/计数利用计数器对外部输入脉冲的最高计数频率是
11. MCS-51串行口工作于方式2时,传送的一帧信息为(
12. MCS-51单片机有(
B )内部中断源。
13. T1作为计数器,工作于方式2,不需门控位参于控制,其控制字为(A,C )。
14. 已知(60H)=23H,(61H)=61H,运行下列程序62H内容为(
MOV A,#9AH
SUBB A,60H
15. 设系统的晶振频率为6MHZ,下列子程序DELAY的延时时间约为(
DELAY:MOV R2,#0FAH
L2:DJNZ R2,L2
B. 1006μS
D. 5.501us
16. MCS-51中,CPU正在处理定时器/计数器T1中断,若有同一优先级的外部中断INT0又提出中断请求,则CPU
Word文档免费下载:
习题(中断与接口及答案) - 中断与接口及答案 一.单项选择题 1. 已知 MCS-51 单片机系统晶振频率为 12MHZ,SMOD=1,串行口工作于方式 2 的波特率 为( )。A...习题(中断与接口及答案)_IT/计算机_专业资料。单片机练习三 中断与接口 A )。 一.单项选择题 1. 已知 MCS-51 单片机系统晶振频率为 12MHZ,SMOD=1,串行口工...习题(中断与接口及答案)_计算机硬件及网络_IT/计算机_专业资料。一.单项选择题 1. 已知 MCS-51 单片机系统晶振频率为 12MHZ,SMOD=1,串行口工作于方式 2 的...第八章 “中断控制接口”习题答案 隐藏&& 第八章〔习题 8.1〕 中断控制接口 8088 CPU 具有哪些中断类型?各种中断如何产生,如何得到中断向量号? 解答 1: ?除法...第5章练习题答案_理学_高等教育_教育专区。第 5 章 MCS-51 系列单片机的片内接口及中断 练习题 一、填空 1. 若将定时/计数器用于计数方式,则外部事件脉冲...《单片机原理及接口技术(第2版)张毅刚》第4章习题及答案_教育学_高等教育_教育...当前指令是 MOV 答:D 7. AT89S51 单片机响应中断后,产生长调用指令 LCALL,...微机原理与接口技术(楼顺天编着)课后第八章习题答案_理学_高等教育_教育专区。第 8 章 中断系统与可编程中断控制器 8259A 1. 什么叫中断?8086 微机系统中有哪...微机接口课后习题答案_理学_高等教育_教育专区。2.3 8086 对存储器的管理为什么...另外的作用是进行总线及中断请求的控制 3.1
微处理器有哪些寻址方式...微机接口期末考试试题及答案整理版 - 计算机接口技术复习题 一.填空题 1)8255A 端口 B 可工作在 0 、 1 方式下 注:A 口工作在 0、1、2 方式下 2)中断...单项选择题(在每小题的四个备选答案中选出一个正确的 1. 8086CPU 芯片的...A.可屏蔽中断 B.不可屏蔽中断 C.单步中断 D.除法出错 9.CPU 在执行 IN ...参考了,自己也亲身测试和计算了一些已有的延时函数。这里假定单片机是时钟频率为12MHz,则一个机器周期为:1us.参考了后,我们可知道, 在Keil C中获得最为准确的延时函数将是
void&delay(unsigned&char&t){&&&&while(--t);}
反汇编代码如下:执行DJNZ指令需要2个机器周期,RET指令同样需要2个机器周期,根据输入t,在不计算调用delay()所需时间的情况下,具体时间延时如下:
Delay Time (us)
2×1+2 =4
2×2+2=6
2×N+2=2(N+1)
当在main函数中调用delay(1)时, 进行反汇编如下:调用delay()时,多执行了两条指令,其中MOV R, #data需要1个机器周期,LJMP需要2个机器周期,即调用delay()需要3us.Keil C仿真截图与计算过程:加上调用时间,准确的计算时间延时与Keil C仿真对比如下:(可见,仿真结果和计算结果是很接近的)
Delay Time (us)
仿真11.0592Mhz时钟(us)
3+2×1+2 =7 | 7.7(实际)
3+2×2+2=9 | 9.9
3+2×N+2=2N+5 | (2N+5)*1.1
35 | 38.5&
205 | 225.5
515 | 566.5
也就是说,这个延时函数的精度为2us,最小的时间延时为7us,最大的时间延时为3+255×2+2=515us.&& 实际中使用11.0592MHz的时钟,这个延时函数的精度将为2.2us,最小时间延时为7.7us, 最大时间延时为566.5us. 这个时间延时函数,对于与DS18B20进行单总线通信,已经足够准确了。 现在,我们将时钟换成11.0592MHz这个实际用到的频率,每个机器周期约为1.1us. 现在让我们来分析一下这个之前用过的延时函数:
//延时函数,&对于11.0592MHz时钟,&例i=10,则大概延时10ms.void&delayMs(unsigned&int&i){&&&&unsigned&int&j;&&&&while(i--)&&&&{&&&&&&&&for(j&=&<span style="COLOR: #;&j&&&<span style="COLOR: #5;&j++);&&&&}}
它的反汇编代码如下:分析: T表示一个机器周期(调用时间相对于这个ms级的延时来说,可忽略不计)
&1&&C:<span style="COLOR: #00&&&&&&MOV&&&A,&&&&R7&&&&&&&;1T&&2&&&&&&&&&&&&&&&&&&&DEC&&&R7&&&&&&&&&&&&&&&&;1T&&&低8位字节减1&3&&&&&&&&&&&&&&&&&&&MOV&&&R2,&&&0x06&&&;2T&4&&&&&&&&&&&&&&&&&&&JNZ&&&C:<span style="COLOR: #07&&&&&&&&&&;2T&&&若低8位字节不为0,&则跳到C:<span style="COLOR: #07&5&&&&&&&&&&&&&&&&&&&DEC&&&R6&&&&&&&&&&&&&&&&;1T&&&低8位字节为0,&则高8位字节减1&6&C:<span style="COLOR: #07&&&&&&ORL&&&A,&&&R2&&&&&&&&&;1T&7&&&&&&&&&&&&&&&&&&&JZ&&&&&&C:001D&&&&&&&&&;2T&&&若高8位也减为0,&则RET&8&&&&&&&&&&&&&&&&&&&CLR&&&A&&&&&&&&&&&&&&&&&&;1T&&&A清零&9&&&&&&&&&&&&&&&&&&&MOV&&&R4,&&&A&&&&&&&&;1T&&&R4放高位<span style="COLOR: #&&&&&&&&&&&&&&&&&&&MOV&&&R5,&&&A&&&&&&&&;1T&&&R5放低位<span style="COLOR: #&C:000D&&&&&&CLR&&&C&&&&&&&&&&&&&&&&&&;1T&&&C清零<span style="COLOR: #&&&&&&&&&&&&&&&&&&&MOV&&&A,&&&R5&&&&&&&&;1T&&&<span style="COLOR: #&&&&&&&&&&&&&&&&&&&SUBB&&&A,&#0x7d&&&&;1T&&&A&=&A-<span style="COLOR: #5<span style="COLOR: #&&&&&&&&&&&&&&&&&&&MOV&&&A,&&&R4&&&&&&&&;1T&&&<span style="COLOR: #&&&&&&&&&&&&&&&&&&&SUBB&&&A,&&#0x00&&&;1T&&&A&<span style="COLOR: #&&&&&&&&&&&&&&&&&&&JNC&&C:<span style="COLOR: #00&&&&&&&&&&&;2T&&&A为零则跳到C:<span style="COLOR: #00<span style="COLOR: #&&&&&&&&&&&&&&&&&&&INC&&&R5&&&&&&&&&&&&&&&&&;1T&&&R5增1<span style="COLOR: #&&&&&&&&&&&&&&&&&&&CJNE&R5,#0x00,&C:001B&;2T&&&R5&<span style="COLOR: #,&跳转到C:000D<span style="COLOR: #&&&&&&&&&&&&&&&&&&&INC&&&R4&&&&&&&&&&&&&&&&&;1T<span style="COLOR: #&C:001B&&&&&&SJMP&&&&&&C:000D&&&&;2T<span style="COLOR: #&C:001D&&&&&&RET
对于delayMs(1), 执行到第7行就跳到21行, 共需时12T, 即13.2us对于delayMs(2), 需时9T+13T+124&#215;10T+7T+12T = 9T+13T+1240T+7T+12T =1281T =1409.1us.对于delayMs(3), 需时9T&#215;(3-1)+(13T+124&#215;10T+7T)&#215;(3-1)+12T&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&=1269T&#215;(3-1)+12T=2550T=2805us.对于delayMs(N),N&1, 需时1269T&#215;(N-1)+12T = 1269NT-1257T=(82.7)us.利用Keil C仿真delayMs(1) = 0.s = 1.67ms 截图如下:由分析可知具体的计算延时时间与Keil C仿真延时对比如下:
Time Delay
(1395.9N-1382.7)us
1003.7ms = 1s
计算delayMs(10)得到延时时间为:12576.3us约等于12.6ms,接近我们认为的10ms。
计算结果和仿真结果只要delayMs(1)有很大出入, 其它都接近, 在接受范围内.& 经过以上分析,可见用C语言来做延时并不是不太准确,只是不容易做到非常准确而已,若有一句语句变了,延时时间很可能会不同,因为编译程序生成的汇编指令很可能不同。PS: 对于每条51单片机汇编指令的字长和所需机器周期汇总如下:转自:Appendix E - 8051 Instruction SetArithmetic OperationsMnemonic&Description&Size&CyclesADD A,Rn &Add register to Accumulator (ACC).&1&1ADD A,direct &Add direct byte to ACC.&2&1ADD A,@Ri &Add indirect RAM to ACC.&1&1ADD A,#data &Add immediate data to ACC.&2&1ADDC A,Rn &Add register to ACC with carry.&1&1ADDC A,direct &Add direct byte to ACC with carry.&2&1ADDC A,@Ri &Add indirect RAM to ACC with carry.&1&1ADDC A,#data &Add immediate data to ACC with carry.&2&1SUBB A,Rn &Subtract register from ACC with borrow.&1&1SUBB A,direct &Subtract direct byte from ACC with borrow&2&1SUBB A,@Ri &Subtract indirect RAM from ACC with borrow.&1&1SUBB A,#data &Subtract immediate data from ACC with borrow.&2&1INC A &Increment ACC.&1&1INC Rn &Increment register.&1&1INC direct &Increment direct byte.&2&1INC @Ri &Increment indirect RAM.&1&1DEC A &Decrement ACC.&1&1DEC Rn &Decrement register.&1&1DEC direct &Decrement direct byte.&2&1DEC @Ri &Decrement indirect RAM.&1&1INC DPTR &Increment data pointer.&1&2MUL AB &Multiply A and B Result: A &- low byte, B &- high byte.&1&4DIV AB &Divide A by B Result: A &- whole part, B &- remainder. &1&4DA A &Decimal adjust ACC.&1&1Logical OperationsMnemonic&Description&Size&CyclesANL A,Rn &AND Register to ACC.&1&1ANL A,direct &AND direct byte to ACC.&2&1ANL A,@Ri &AND indirect RAM to ACC.&1&1ANL A,#data &AND immediate data to ACC.&2&1ANL direct,A &AND ACC to direct byte.&2&1ANL direct,#data &AND immediate data to direct byte.&3&2ORL A,Rn &OR Register to ACC.&1&1ORL A,direct &OR direct byte to ACC.&2&1ORL A,@Ri &OR indirect RAM to ACC.&1&1ORL A,#data &OR immediate data to ACC.&2&1ORL direct,A &OR ACC to direct byte.&2&1ORL direct,#data &OR immediate data to direct byte.&3&2XRL A,Rn &Exclusive OR Register to ACC.&1&1XRL A,direct &Exclusive OR direct byte to ACC.&2&1XRL A,@Ri &Exclusive OR indirect RAM to ACC.&1&1XRL A,#data &Exclusive OR immediate data to ACC.&2&1XRL direct,A &Exclusive OR ACC to direct byte.&2&1XRL direct,#data &XOR immediate data to direct byte.&3&2CLR A &Clear ACC (set all bits to zero).&1&1CPL A &Compliment ACC.&1&1RL A &Rotate ACC left.&1&1RLC A &Rotate ACC left through carry.&1&1RR A &Rotate ACC right.&1&1RRC A &Rotate ACC right through carry.&1&1SWAP A &Swap nibbles within ACC.&1&1Data TransferMnemonic&Description&Size&CyclesMOV A,Rn &Move register to ACC.&1&1MOV A,direct &Move direct byte to ACC.&2&1MOV A,@Ri &Move indirect RAM to ACC.&1&1MOV A,#data &Move immediate data to ACC.&2&1MOV Rn,A &Move ACC to register.&1&1MOV Rn,direct &Move direct byte to register.&2&2MOV Rn,#data &Move immediate data to register.&2&1MOV direct,A &Move ACC to direct byte.&2&1MOV direct,Rn &Move register to direct byte.&2&2MOV direct,direct &Move direct byte to direct byte.&3&2MOV direct,@Ri &Move indirect RAM to direct byte.&2&2MOV direct,#data &Move immediate data to direct byte.&3&2MOV @Ri,A &Move ACC to indirect RAM.&1&1MOV @Ri,direct &Move direct byte to indirect RAM.&2&2MOV @Ri,#data &Move immediate data to indirect RAM.&2&1MOV DPTR,#data16 &Move immediate 16 bit data to data pointer register.&3&2MOVC A,@A+DPTR &Move code byte relative to DPTR to ACC (16 bit address).&1&2MOVC A,@A+PC &Move code byte relative to PC to ACC (16 bit address).&1&2MOVX A,@Ri &Move external RAM to ACC (8 bit address).&1&2MOVX A,@DPTR &Move external RAM to ACC (16 bit address).&1&2MOVX @Ri,A &Move ACC to external RAM (8 bit address).&1&2MOVX @DPTR,A &Move ACC to external RAM (16 bit address).&1&2PUSH direct &Push direct byte onto stack.&2&2POP direct &Pop direct byte from stack.&2&2XCH A,Rn &Exchange register with ACC.&1&1XCH A,direct &Exchange direct byte with ACC.&2&1XCH A,@Ri &Exchange indirect RAM with ACC.&1&1XCHD A,@Ri &Exchange low order nibble of indirect RAM with low order nibble of ACC.&1&1Boolean Variable ManipulationMnemonic&Description&Size&CyclesCLR C &Clear carry flag.&1&1CLR bit &Clear direct bit.&2&1SETB C &Set carry flag.&1&1SETB bit &Set direct bit.&2&1CPL C &Compliment carry flag.&1&1CPL bit &Compliment direct bit.&2&1ANL C,bit &AND direct bit to carry flag.&2&2ANL C,/bit &AND compliment of direct bit to carry.&2&2ORL C,bit &OR direct bit to carry flag.&2&2ORL C,/bit &OR compliment of direct bit to carry.&2&2MOV C,bit &Move direct bit to carry flag.&2&1MOV bit,C &Move carry to direct bit.&2&2JC rel &Jump if carry is set.&2&2JNC rel &Jump if carry is not set.&2&2JB bit,rel &Jump if direct bit is set.&3&2JNB bit,rel &Jump if direct bit is not set.&3&2JBC bit,rel &Jump if direct bit is set & clear bit.&3&2Program BranchingMnemonic&Description&Size&CyclesACALL addr11 &Absolute subroutine call.&2&2LCALL addr16 &Long subroutine call.&3&2RET &Return from subroutine.&1&2RETI &Return from interrupt.&1&2AJMP addr11 &Absolute jump.&2&2LJMP addr16 &Long jump.&3&2SJMP rel &Short jump (relative address).&2&2JMP @A+DPTR &Jump indirect relative to the DPTR.&1&2JZ rel &Jump relative if ACC is zero.&2&2JNZ rel &Jump relative if ACC is not zero.&2&2CJNE A,direct,rel &Compare direct byte to ACC and jump if not equal.&3&2CJNE A,#data,rel &Compare immediate byte to ACC and jump if not equal.&3&2CJNE Rn,#data,rel &Compare immediate byte to register and jump if not equal.&3&2CJNE @Ri,#data,rel &Compare immediate byte to indirect and jump if not equal.&3&2DJNZ Rn,rel &Decrement register and jump if not zero.&2&2DJNZ direct,rel &Decrement direct byte and jump if not zero.&3&2Other InstructionsMnemonic&Description&Size&CyclesNOP &No operation.&1&1 其它可查看《单片机基础》-李广弟等编著,P70 &#8220;MCS-51单片机指令汇总&#8221;
阅读(...) 评论()当前位置:电子与通信技术题库>
问题:&#xe622; &#xe61a; &#xe6
[单选] 设MCS-51单片机晶振频率为12MHz,定时器作计数器使用时,其最高的输入计数频率应为()
A . 2MHzB . 1MHzC . 500KHzD . 250KHz
已知1只共阴极LED显示器,其中a笔段为字形代码的最低位,若需显示数字1,它的字形代码应为()。 06H。
全国县级和以上地方各级人大每届任期()年,乡级人大每届任期()年。 A、5,2。
影响急冷塔上段氨中和效果因素包括()等。 A、急冷塔上段循环量。
B、急冷塔上段pH值高低。
C、加酸状况。
D、喷头状况。
中国共产党和民主党派合作的基本方针是() A、长期共存、互相监督、肝胆相照、荣辱与共。
B、长期共存、互相监督、肝胆相照、互惠互利。
C、和平共处、互相监督、肝胆相照、互惠互利。
D、和平共处、互相监督、肝胆相照、荣辱与共。
半水煤气中(H2+CO)与N2体积之比为()。 A.1。
C.3.1~3.2。
设MCS-51单片机晶振频率为12MHz,定时器作计数器使用时,其最高的输入计数频率应为()
参考答案:C
●&&参考解析编程题 设MCS-51单片机系统中晶振频率为12MHz,欲使用定时器&#47;计数器1,采用方式1编写实现1秒定时时间的程_百度知道
编程题 设MCS-51单片机系统中晶振频率为12MHz,欲使用定时器&#47;计数器1,采用方式1编写实现1秒定时时间的程
并写出定时时间的计算步骤
我有更好的答案
#include &reg51.h& void main() {
TMOD=0x10;
while(1) {
//下面写你要处理的的其他程序,你只要了定时1s。
} }} void a(void) interrupt 3 {
i++; }12Mhz的51单片机,经过12分频后为1MHz,则一个指令周期为1/1Mhz = 1us.则定时50ms为 0xffff - 0x3cb0,即65535 - 15535 = 50000us = 50ms,则20次的定时:20×50ms=1s。明白了吗?怪简单的问题……祝你顺利哦!
采纳率:35%
这个太简单了,给你个方法,你自己弄吧,不会多看看书。1 使能定时器2 使能定时器中断3 编写中断程序我估计你是觉得1秒的时间,定时器达不到,你可以在中断里面再自己写个计数,或者开启计数器2,这样两两相乘,时间就能到1秒钟了。要做到精确的定时,就要用计数器2,然后在Keil里可以看到时间,再对定时器进行微调就好了。
采用12Mhz晶振的51单片机,软件如下(调试通过)#include &reg52.h&#define PERIODH (6l)/0X100
//设50ms中断1次TH1初值#define PERIODL (6l)%0X100
//设50ms中断1次TL1初值//如果需要极精确的延时,应根据实际编译后的产生的汇编指令,扣除掉中断响应中重装所占用的时间//延时时间变量void timer1() interrupt 3 using 1{//定时器每0.05秒一次中断
TH1 = PERIODH;
TL1 = PERIODL; if(count)
{//计数未到0,则保持定时器运行,计数器-1
{//计数到0,关定时器
//stop timer 1
}//以秒为基本定时单位的子程序void
Delay1S(unsigned char x){
TH1 =PERIODH;
TL1 =PERIODL;
TR1 = 1;//此时定时开始
count = 20*x;//因50ms中断1次,故乘20
while(count);}main(){
TMOD = 0X10;//方式1
EA = 1;//总中断允许
ET1 = 1;//定时器1中断允许
Delay1S(1);//延时1秒
Delay1S(2);//延时2秒
Delay1S(3);//延时3秒
Delay1S(4);//延时4秒
}} Delay1S函数是调用时才开始计时,根据需要的定时长度到时停止计时。如果定时精度要求不高,可以不用在中段服务程序中关闭定时器,每次调用误差也就在50ms。可以用KEIL仿真看一下实际时间
#include &reg51.h&void InitTimer1(void){
TMOD = 0x10;
TH1 = 0x3C;
//50ms定时
TL1 = 0x0B0;
TR1 = 1;}void main(void){
InitTimer1();}void Timer1Interrupt(void) interrupt 3{
TH1 = 0x3C;
TL1 = 0x0B0;
if(num==20){}
//1S时间到。}
#include&reg51.h&#define uchar unsigned charvoid delay(){uchar times=0;TR0=1;while(1){TH0=()/256;TL0=()%256;if(TF0==1){TF0=0;times++;if(times==20){TR0=0;}}}}main(){TMOD=0x01;TH0=()/256;TL0=()%256;delay();while(1);}
void sheding(){TMOD=0x10;//定时器/计数器工作方式寄存器的设定TH1=()/256;TL1=()%265;//定时器/计数器控制寄存器设定EA=1; //全局中断允许位ET1=1; //打开定时器/计数器1TR1=1;}void zhongduan() interrupt 3{TH1=()/256;
TL1=()%256;k++;if(k==20){k=0;shu++;if(shu==86400)shu=0;}}
其他4条回答
为您推荐:
其他类似问题
51单片机的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。以下试题来自:
填空题设MCS51单片机的晶振频率为6MHz,使用定时器T1以方式1产生周期为200us的方波脉冲,并由P1.7输出信号波形。此时,计数器T的TH1、TL1分别须装入初值()。
为您推荐的考试题库
您可能感兴趣的试卷
你可能感兴趣的试题
1.填空题 2062.填空题 1310723.填空题 工作方式14.填空题 TF1=15.填空题 工作方式1

我要回帖

更多关于 12mhz晶振9600波特率 的文章

 

随机推荐