单片机作业及答案_第1页
单片机作业及答案_第2页
单片机作业及答案_第3页
单片机作业及答案_第4页
单片机作业及答案_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章作业1、89C51内部包含哪些主要逻辑功能部件?运算器(1)8位算术逻辑运算单元ALU(ArithmeticLogicUnit)(2)8位累加器ACC(Accumulator)(3)8位寄存器B(RegisterB)(4)程序状态字寄存器PSW(ProgramStatusWord)(5)两个8位暂存寄存器TMP1和TMP2(TemporayRegister)控制器(1)程序计数器PC(ProgramCounter)PC的作用是用来存放将要执行的指令地址,共16位,可对64KROM直接寻址,PC低8位经P0口输出,高8位经P2口输出。也就是说,程序执行到什么地方,程序计数器PC就指到哪里,它始终是跟蹿着程序的执行。我们知道,用户程序是存放在内部的ROM中的,我们要执行程序就要从ROM中一个个字节的读出来,然后到CPU中去执行,那么ROM具体执行到哪一条呢?这就需要我们的程序计数器PC来指示。程序计数器PC具有自动加1的功能,即从存储器中读出一个字节的指令码后,PC自动加1(指向下一个存储单元)。(2)指令寄存器IR(InstructionRegister)指令寄存器的作用就是用来存放即将执行的指令代码。(3)指令译码器ID(InstructionDecode)用于对送入指令寄存器中的指令进行译码,所谓译码就是把指令转变成执行此指令所需要的电信号。当指令送入译码器后,由译码器对该指令进行译码,根据译码器输出的信号,CPU控制电路定时地产生执行该指令所需的各种控制信号,使单片机正确的执行程序所需要的各种操作。(4)内部复位电路(5)内部振荡电路存储器(1)程序存储器(EPROM)(2)数据存储器(RAM)I/O端口4个并行I/O端口P0、P1、P2、P32、简述89C51片内RAM的空间分配。片内RAM共有256Byte(00H~FFH),可分为高128Byte(80H~FFH)和低128Byte(00H~7FH)。高128Byte(80H~FFH)称为特殊功能寄存器区SFR(SpecialFunctionRegister)其中定义了21个特殊功能寄存器,未定义的单元不允许用户使用。低128Byte(00H~7FH)具体分配如下:00H~07H工作寄存器0区(R0~R7)08H~0FH工作寄存器1区(R0~R7)10H~17H工作寄存器2区(R0~R7)18H~1FH工作寄存器3区(R0~R7)20H~2FH位寻址区(位地址00H~7FH)30H~7FH用户区3、简述程序状态字寄存器PSW中每一位的含义。Cy:CarryFlag进位位。CPU在做无符号数运算时,结果超出了0~255时,Cy=1;否则Cy=0。Ac:AuxiliaryCarry辅助进位位。CPU在做算术运算时,当第三位向第四位有进位(或有借位)时,Ac=1,否则Ac=0。F0:Flagzero用户自定义位。RS1、RS0:确定工作寄存器区的两个位,具体情况如下表:RS1RS0工作寄存器区000区011区102区113区Ov:OverflowFlag溢出位。CPU在做有符号数运算时,结果超出了-128~+127时,Ov=1;否则Ov=0。P:ParityFlag奇偶校验位。复位后奇偶校验位P始终跟踪累加器A中1的个数,1的个数为奇数则P=1,1的个数为偶数,P=0。4、说明P3口的第二功能。P3.0RXD(串行口输入端,即接收端。serialinputport)P3.1TXD(串行口输出端,即发送端。serialoutputport)P3.2INT0(外部中断0申请输入端,低电平有效。externalinterrupt0)P3.3INT1(外部中断1申请输入端,低电平有效。externalinterrupt1)P3.4T0(定时器T0外部脉冲输入端。timer0externalinput)P3.5T1(定时器T1外部脉冲输入端。timer1externalinput)P3.6WR(允许写片外数据存储器。externaldatamemorywritestrobe)P3.7RD(允许读片外数据存储器。externaldatamemoryreadstrobe)

第2章作业1、简述89C51的寻址方式,每一种方式请举一例。(1)立即数寻址(ImmediateAddressing) 立即数寻址是将操作数直接存放在指令中,作为指令的一部分存放在代码段里。例如指令:MOVA,#30H(2)直接寻址(DirectAddressing) 直接寻址是将操作数的地址直接存放在指令中。这种寻址方式的操作数只能存放在内部数据存贮器和特殊功能寄存器中。例如:MOVA,30H(3)寄存器寻址(RegisterAddressing) 寄存器寻址是指操作数存放在以上所说的寄存器中,并且寻址时的寄存器已隐含在指令的操作码中。例如:MOVA,R0(4)寄存器间接寻址(RegisterIndirectAddressing) 寄存器间接寻址是指操作数存放在以寄存器内容为地址的单元中。例如:MOVA,@R0(5)变址寻址(Base-Register-plus-Index-Register-IndirectAddressing) 变址寻址是指操作数存放在变址寄存器和基址寄存器的内容相加形成的数为地址的单元中。其中累加器A作变址寄存器、程序计数器PC或寄存器DPTR作基址寄存器。例如:MOVCA,@A+DPTR(6)相对寻址(RelativeAddressing) 相对寻址是将程序计数器PC的当前值与指令第二字节给出的偏移量相加,从而形成转移的目标地址。例如:JZ61H(7)位寻址(BitAddressing)位寻址,是指对片内RAM中20H~2FH中的128个位地址,以及SFR中的11个可进行位寻址的寄存器中的位地址寻址。例如:位寻址指令MOVC,20H,此指令是将RAM中位寻址区20H位地址中的内容,送给位累加器C。字节地址寻址指令:MOVA,20H,此指令是将内部RAM中20H单元中的内容送给累加器A。2、请给下列指令加注释:MOVA,50H;将片内RAM50H单元中的数传送到累加器A中MOVA,#50H;将立即数#50H传送到累加A中MOV50H,#30H;将立即数#30H传送到片内RAM50H单元中MOV52H,51H;将片内RAM51H单元中的数传送到内RAM52H单元中3、完成下列功能,写出相应指令:(1)在片内RAM50H单元中存入立即数#76H;MOV50H,#76H(2)将片内RAM30H单元中的低4位与高4交换;MOVA,30HSWAPAMOV30H,A(3)将累加器A的低4位清0;ANLA,#11110000B(4)将片内RAM50H单元中的数取反后存入片外RAM7100H单元中;MOVA,50HCPLAMOVDPTR,#7100HMOVX@DPTR,A(5)片内RAM36H单元中存的小于10的BCD码乘以10以后存与片内RAM37H中;MOVA,36HRLARLARLARLAMOV37H,A(6)将片内RAM51H最高位置1;ORL51H,#10000000B(7)将程序状态字寄存器中的F0位清0;CLRF0(8)片内RAM78H单元中的数为#09H则转移,否则顺序执行;MOVA,#09HCLRCSUBBA,78HJZNEXT(9)请将片外RAM3100H和3101H存的两个数交换。MOVDPTR,#3100HMOVR0,#01HMOVP2,#31HMOVXA,@DPTRMOVR2,AMOVXA,@R0MOVX@DPTR,AMOVA,R2MOVX@R0,A(10)位地址00H中为1则片内RAM55H为#55H,否则片内RAM55H为#0。JB00H,NEXTMOV55H,#0SJMP$NEXT:MOV55H,#55HSJMP$

第三章作业1、进行两个16位数的减法:6F5DH-13B4H,结果存入片内RAM30H和31H单元中,30H存低8位。MOVA,#5DHCLRCBUBBA,#0B4HMOV30H,AMOVA,#6FHSUBBA,#13HMOV31H,A2、把片外RAM从2000H单元开始存放的8个数传送到片内30H开始的单元中。MOVDPTR,#2000HMOVR5,#8MOVR0,#30HLOOP:MOVXA,@DPTRMOV@R0,AINCR0INCDPTRDJNZR5,LOOPRET3、查找在片内RAM30H~50H单元中是否有#0AAH这个数据,若有,则将51H单元置为#01H,若未找到,则将51H单元置为0。MOV51H,#0MOVR0,#30HMOVR6,#21HLOOP:CJNE@R0,#0AAH,NEXTMOV51H,#1RETNEXT:INCR0DJNZR6,LOOPRET4、查找在片内RAM30H~50H单元中出现#00H的次数,并将结果存云51H单元。MOV51H,#0MOVR1,#30HMOVR3,#21HLOOP:CJNE@R1,#00H,NEXTINC51HNEXT:INCR1DJNZR3,LOOPRET5、片内RAM30H和31H单元中存有一个小于1000的BCD码,30H存个位和十位,31H存百位,将此BCD码乘以10后存与30H和31H单元,30H存个位和十位,31H存百位和千位。C31H30HC31H30H31HMOVR4,#4LOOP:CLRCMOVA,30HRLCAMOV30H,AMOVA,31HRLCAMOV31H,ADJNZR4,LOOPRET6、编写一个程序,把片外RAM从2000H单元开始的8个数传送到片内30H开始的单元中。MOVDPTR,#2000HMOVR0,#30HMOVR2,#8LOOP:MOVXA,@DPTRMOV@R0,AINCDPTRINCR0DJNZR2,LOOPRET

第4章作业(1)什么是中断和中断系统?其主要功能是什么?所谓中断,是指CPU正在处理某些事务的时候,内部或外部又发生了某一事件,请求CPU及时处理。于是,CPU暂时中断当前的工作,转而处理所发生的事件。处理完毕,再回到原来被中断的地方,继续原来的工作。这样的过程,称为中断。实现中断功能的相关硬件和软件的集合称为中断系统。中断过程由中断系统自动完成。中断的最主要的功能是使计算机实现多任务。(2)89C51单片机的中断源有哪些?其中断服务程序的入口地址是什么?89C51单片机的中断源为:int0:外部中断0请求,低电平有效,通过P3.2引脚输入。int1:外部中断1请求,低电平有效,通过P3.3引脚输入。T0:定时/计数器0溢出中断请求。T1:定时/计数器1溢出中断请求。TX/RX:串行接口发送结束/接受结束中断请求。89C51单片机中断服务程序的入口地址是:外部中断00003H定时器T0000BH外部中断10013H定时器T1001BH串行接口0023H(3)写出IE、IP和TCON特殊功能寄存器中每一位的含义。中断允许控制寄存器IE中每一位的含义:见教材P.118中断优先级控制寄存器IP中每一位的含义:见教材P.119寄存器TCON中每一位的含义:见教材P.117

第5章作业1、说明定时器T0的四种工作方式。(P.145第6题)M1M0工作模式功能说明00013位的定时/计数模式,TL0的高3位没用。01116位的定时/计数模式1028位、初始值自动加载的定时/计数模式。113将T0分成两个相互独立的、8位的定时/计数模式。2、假设单片机晶振fosc=6MHz,若要求定时分别为0.1ms,1ms,10ms,定时器T0工作在方式0、方式1、方式2时,其初值应为多少?晶振fosc=6MHz,则机器周期为2us定时0.1ms时的初始值:50=110010B模式0:(213-50)=(8192-50)=8142=1111111001110BTH0=#FEH;TL0=#0EH模式1:(216-50)=(65536-50)=65486=1111111111001110BTH0=#0FFH;TL0=#0CEH模式2:(28-50)=(256-50)=206=11001110BTH0=#0CEH;TL0=#0CEH定时1ms时的初始值:500=111110100B模式0:(213-500)=(8192-500)=7692=1111000001100BTH0=#0F0H;TL0=#0CH模式1:(216-500)=(65536-500)=65036=1111111000001100BTH0=#0FEH;TL0=#0CH定时10ms时的初始值:5000=1001110001000B模式1:(216-5000)=(65536-5000)=60536=1110110001111000BTH0=#0ECH;TL0=#78H3、假设单片机晶振fosc=6MHz,请利用T0和P1.0输出矩形波,矩形波的高电平宽50us,低电平宽300us。(P.145第13)晶振fosc=6MHz→机器周期为2us定时器T0使之工作于模式3定时50us的初值为:256-25=231(E7H)定时300US的初值为:256-150=106(6AH)方法1:MOVTMOD,#00000011B;T0工作于模式3MOVTCON,#0;清TR0,TF0MOVTL0,#0E7H;高电平初值。256-25SETBP1.0;P1.0口输出高电平SETBTR0;启动定时器T0LOOP1:JNBTF0,LOOP1;检测T0是否溢出CLRTF0;清除溢出标志CLRTR0;关闭定时器MOVTL0,#6AH;写低电平初值256-150SETBTR0;启动定时器T0CLRP1.0;使P1.0输出低电平LOOP2:JNBTF0,LOOP2;检测T0是否溢出CLRTF0;清除溢出标志CLRTR0;关闭定时器MOVTL0,#0E7H;写高电平初值256-25SETBTR0;启动定时器T0SETBP1.0;使P1.0输出高电平SJMPLOOP1;重复方法2:MOVTMOD,#03H;T0工作于模式3MOVTCON,#0;清TR0,TF0MOVTL0,#0E7H;高电平初值。256-25SETBP1.0;P1.0口输出高电平SETBTR0;启动定时器T0LOOP:JNBTF0,LOOP;检测T0是否溢出CLRTF0;清除溢出标志CLRTR0;关闭定时器JNBP1.0,NEXT;P1.0口为低电平转移,;高电平顺序执行MOVTL0,#6AH;定时器T0写入低电平的定时初值SETBTR0;启动定时器T0CLRP1.0;P1.0口输出低电平SJMPLOOP;返回重复NEXT:MOVTL0,#0E7H;定时器T0写入高电平的定时初值SETBTR0;启动定时器T0SETBP1.0;P1.0口输出高电平SJMPLOOP;返回重复4、假设单片机晶振fosc=12MHz,用T1定时,试编程由P1.0和P1.1引脚分别输出周期为2ms和500us的方波。(P.145第14题)晶振fosc=12MHz→机器周期为1us定时器T0使之工作于模式1定时250us的初值为:65536-250=65286=1111111100000110B=FF06H方法一:MOVTMOD,#10H;T1工作于模式1MOVTCON,#0;TR1、TF1清零MOVTH1,#0FFH;65536-250=(FF06H)MOVTL1,#06H;MOVR7,#4;2ms是500us的4倍SETBP1.0;P1.0置高电平SETBP1.1;P1.1置高电平SETBTR1;启动定时器T1LOOP:JNBTF1,LOOP;定时器是否溢出?CLRTF1;定时器溢出后,清除定时器溢出标志CPLP1.1;取反P1.1DJNZR7,NEXT;4倍关系是否满足?MOVR7,#4;重写4倍关系CPLP1.0;取反P1.0NEXT:CLRTR1;关闭定时器T1MOVTH1,#0FFH;重写定时器T1的初值MOVTL1,#06H;SETBTR1;启动定时器T1SJMPLOOP;返回重复方法二:MOVTMOD,#20H;T1工作于模式2MOVTCON,#0;TR1、TF1清零MOVTH1,#6;定时500us的初值(256-250)=6MOVTL1,#6;MOVR7,#4;500us与2ms是4倍的关系SETBP1.0;将P1.0置高电平SETBP1.1;将P1.1置高电平SETBTR1;启动定时器T1LOOP:JNBTF1,LOOP;定时器T1是否溢出CLRTF1;清溢出标志TF1CPLP1.1;取反P1.1口DJNZR7,LOOP;(R7)-1→(R7),(R7)是否为0CPLP1.0;取反P1.0口MOVR7,#4;重写R7SJMPLOOP;返回重复5、编写程序,其功能为:当P1.2引脚的电平上跳时,对P1.1输入的脉冲进行记数;当P1.2引脚的的电平下跳时,停止记数,并将结果存入R7R6中。(P.146第17题)MOVTMOD,#05H;定时器T0工作于方式1,计数方式MOVTCON,#0;清除TF0、TR0。MOVTH0,#0;定时器T0初始值清零MOVTL0,#0;LOOP1:JNBP1.2,LOOP1;P1.2的电平是否上跳SETBTR0;启动定时器T0开始计数LOOP2:JBP1.2,LOOP2;P1.2的电平是否下跳CLRTR0;停止计数MOVA,TL0;将计数结果写入R7、R6,MOVR6,A;R6写入低8位MOVA,TH0;MOVR7,A;R7写入高8位6、设fosc=12MHz,编写程序,其功能为:对T0进行初始化,使之工作于模式2,产生200us的定时,并用查询T0溢出标志TF0的方法,控制P1.0引脚输出周期为2ms的方波。(P.146第18题)MOVTMOD,#02H;T0工作于模式2,定时方式MOVTCON,#0;清除TF0、TR0。MOVTH0,#56;(256-200)=56MOVTL0,#56;MOVR7,#5;200us与1ms是5倍的关系SETBTR0;启动定时器T0SETBP1.0;将P1.0置高电平LOOP:JNBTF0,LOOP;检测T0的溢出标志CLRTF0;清除T0的溢出标志DJNZR7,LOOP;是否到5次MOVR7,#5;重新写入计数次数CPLP1.0;取反P1.0口SJMPLOOP;循环往复7、fosc=6MHz,用模式1编程实现:以定时器T1进行外部事件计数,每计数1000个脉冲后,定时器T1转为定时工作方式,定时10ms后又转为计数方式,如此循环不止。(P.145第8题)MOVTCON,#0;清TF1、TR1START:MOVTMOD,#50H;T1工作于模式1,计数方式MOVTH1,#0FCH;(65536-1000)=FC18HMOVTL1,#18H;SETBTR1;启动T1,计数开始LOOP1:JNBTF1,LOOP1;检测T1溢出标志CLRTF1;清除T1溢出标志MOVTMOD,#10H;T1工作于模式1,定时方式CLRTR1;关闭T1MOVTH1,#0ECH;(65536-5000)=EC6EHMOVTL1,#6EH;SETBTR1;启动定时器T1LOOP2:JNBTF1,LOOP2;检测T1溢出标志CLRTF1;清除T1溢出标志CLRTR1;关闭T1SJMPSTART;循环不止第6章参考作业及答案8、89C51单片机的P3.3口有1Hz的方波输入,P3.5口有频率介于1KHz—5KHz的周期信号输入,试利用定时器T1的相关功能,编程计算该周期信号的频率,并将其存于片外RAM2100H单元中。MOVTMOD,#D0H;T1:方式1、计数、开关由TR1和P3.3联合控制CLRTF1;清除溢出标志CLRTR1;关闭定时器MOVTH1,#0;写入计数初值MOVTl1,#0;LOOP1:JNBP3.3,LOOP1;等待P3.3为高电平SETBTR1;启动定时器T1LOOP2:JBP3.3,LOOP2;等待计数结束CLRTR1;关闭定时器T1CLRC;清除进位标志MOVA,TL1;读取计数脉冲数的低8位RLCA;低8位×2MOVDPTR,#2100H;片外目的数据存储器地址指针MOVX@DPTR,A;低8位存入要求的目标地址INCDPTR;目标地址+1MOVA,TH1;读取计数脉冲数的高8位RLCA;高8位×2MOVX@DPTR,A;高8位存入要求的目标地址方法二:利用中断方式思路:P3.3引脚上输入1Hz的方波,即每隔1秒钟中断一次,利用中断间隔测P3.5引脚的脉冲数。ORG0000HSJMPMain;转移到主程序ORG001BHAJMPT1;转移到真正的中断服务程序ORG0030HMain:MOVTMOD,#50H;定时器T1:方式1、计数、开关由软件控制CLRTF1;清除定时器溢出标志CLRTR1;关闭定时器T1MOVIE,#08H;允许定时器T1中断MOVIP,#0;未设置中断优先级别MOVTH1,#0;计数初值MOVTL1,#0;CLRF0;清除开始计数标志SETBEA;开中断SJMP$;等待中断T1:JBF0,NEXT;判断是否开始计数SETBTR1;启动计数器SETBF0;计数标志置1SJMPNEXT1;转移NEXT:CLRTR1;关闭计数器CLRF0;计数标志清0MOVDPTR,#2100H;地址指针指向目标地址MOVA,TL1 ;读计数器的低8位MOVX@DPTR,A;存计数器的低8位MOVA,TH1;读计数器的高8位INCDPTR;地址指针加1MOVX@DPTR,A;存计数器的高8位NEXT1:JNBP3.3,NEXT1;等待P3.3引脚上出现高电平RETI;中断返回9、当系统选用6MHz晶体振荡器时,由T0工作在方式为2,利用中断响应,产生周期为2ms(脉冲宽度为1ms)的方波序列,并由P1.0输出。(1)写出T0定时器的方式控制字,T0定时器初值计算。(2)试编写程序完成此功能。思路:方波的周期为2ms,每隔1ms对P1.0取反,可完成题目要求。系统晶体振荡器的频率为6MHz,机器周期为2us,定时器T0在方式2时,最大定时256us×2=512us,达不到1ms的要求,故将定时器T0的初始值选为:256-250=6(定时0.5ms),两次后取反P1.0口。(1)T0的初始值为:X=256-250=6T0的控制字为:MOVTMOD,#02HMOVTCON,#0(2)参考程序如下:ORG0000HSJMPMainORG000BHAJMPT0ORG0030HMain:MOVTMOD,#02H;定时器T0工作于方式2CLRTR0;关闭定时器T0CLRTF0;清除定时器T0溢出标志MOVIE,#02H;允许定时器T0中断MOVIP,#0;不设优先级别MOVTH0,#6;定时器T0初值MOVTL0,#6;(256-250=6)MOVR7,#2;定时0.5ms与1ms的2倍的关系SETBTR0;启动定时器T0SETBEA;开中断SJMP$T0:DJNZR7,NEXT;两次是否到?未到则中断返回,到则继续CPLP1.0;取反P1.0口MOVR7,#2;重置2倍的关系NEXT:RETI;中断返回10、有一个频率为10MHz的方波信号,要求用定时器对该方波信号计数,每计满100个脉冲,将P1.1脚上的电平取反。思路:利用定时器T0方式2对P3.2引脚上输入的脉冲进行计数,每计数100,取反P1.0口。定时器T0在方式2时的初始值为:X=256-100=156(9CH)采用对定时器T0的溢出标志TF0扫描的方式编程。参考程序如下:MOVTMOD,#06H;定时器T0工作于方式2CLRTR0;关闭定时器T0CLRTF0;清除定时器T0的溢出标志MOVTH0,#156;计数100的初值MOVTL0,#156;256-100=156SETBTR0;启动定时器T0LOOP:JNBTF0,LOOP;等待溢出CLRTF0;清除定时器T0的溢出标志CPLP1.0;取反P1.0口SJMPLOOP;重复循环11、(同第7题)按以下要求编写8051单片机定时器的初始化程序:T0作为定时,定时时间为10ms.T1作为计数,记满1000溢出。(1)设晶振fosc=12MHz,则T0在方式1时的初始值为X=65536-10000=5553610000=8192+1024+512+256+16=10011100010000X=1101100011110000B=#D8F0H定时器T1在方式1时的初始值为:Y=65536-10001000=512+256+128+64+32+8=111111000Y=1111111000001000B=FE08H(2)初始化参考程序MOVTMOD,#01010001B;T0方式1(定时),T1方式1(计数)MOVTCON,#0;清TR0、TF0、TR1、TF1MOVIE,#0AH;允许T0、T1中断MOVIP,#0;不设置优先级MOVTH0,#D8H;T0的初始值MOVTL0,#0F0H;65536-10000=D8F0HMOVTH1,#0FEH;T1的初始值MOVTL1,#08H;65536-1000=FE08HSETBTR0;启动定时器T0SETBTR1;启动定时器T1SETBEA;开中断12、要求从P1.1引脚输出1000Hz方波,晶振频率为12MHz。试设计程序。思路:(1)只要使P1.1每隔500µs取反一次即可得到1ms方波;。(2)将T1设为定时方式0:GATE=0,C/T(—)=0,M1M0=00;T0不用可为任意,只要不使其进入方式3,一般取0即可。故TMOD=00H。下面计算500µs定时T1的初值:机器周期:T=1µs,设初值为X则:X=8192-500=7692=1111000001100B=1111000000110B=F00CH因为在作13位计数器用时,TL1高3位未用,应写0,X的低5位装入TL1的低5位,所以TL1=#0CH;X的高8位应装入TH1,所以TH1=#0F0H。参考源程序如下:MOVTCON,#0;清TF1、TR1MOVTMOD,#0;定时器T1工作于方式0MOVTH1,#0F0H;定时500us的初值MOVTL1,#0CH;8192-500=7692=F00CHSETBTR1;启动定时器T1LOOP:JNBTF1,LOOP;等待定时500us的溢出CLRTF1;清除溢出标志CPLP1.1;取反P1.1口CLRTR1;关闭定时器T1MOVTH1,#0F0H;重写定时500us的初值MOVTL1,#0CH;重写定时500us的初值SETBTR1;启动定时器T1SJMPLOOP13、试用定时/计数器T1对外部事件计数。要求每计数100,就将T1改成定时方式,控制P1.7输出一个脉宽为10ms的正脉冲,然后又转为计数方式,如此反复循环。设晶振频率为12MHz。定时器T1确定工作于方式1计数100的初始值为:65536-100100=64+32+4=01100100B65536-100=1111111110011100B=FF9CH定时10ms的初始值为:65536-100005000=4096+512+256+128+8=100111000100065536-5000=60536=1110110001111000B=EC78H参考程序如下:LOOP3:CLRTR1;关闭定时器T1CLRTF1;清除定时器T1的溢出标志MOVTMOD,#50H;定时器T1工作于方式1,计数MOVTH1,#0FFH;计数100的初值MOVTL1,#9CH;65536-100=FF9CHSETBTR1;启动定时器T1LOOP1:JNBTF1,LOOP1;等待计数100溢出MOVTMOD,#10H;定时器T1工作于方式1,定时CLRTF1;清除定时器溢出标志CLRTR1;关闭定时器T1MOVTH1,#0ECH;定时10ms的初值MOVTL1,#78H;65536-5000=EC78HSETBTR1;启动定时器T1LOOP2:JNBTF1,LOOP2;等待定时10ms溢出CPLP1.7;取反P1.7口SJMPLOOP3;返回循环14、若单片机晶振为12MHz,利用定时器1方式1,产生1ms的定时,在P1.0脚产生周期为2ms方波,用查询方式工作,查询标志为TF1。已知fosc=12MHz→1个机器周期为1us1ms=1000us初值=65536-1000=5453664536转换为二进制:1111110000011000T0的低8位:00011000(18H)T0的高8位:11110000(FCH)则有:(TL0)←#18H;(TH0)←#0FCH参考源程序如下:MOVTCON,#10H ;定时器T1工作于方式1MOVTMOD,#0;清除TR1、TF1MOVTH1,#0FCH;定时1ms的初值MOVTL1,#18H;65536-1000=FC18HSETBTR1;启动定时器T1LOOP:JNBTF1,LOOP;等待定时1ms的溢出CLRTF1;清除溢出标志CPLP1.0;取反P1.0口CLRTR1;关闭定时器T1MOVTH1,#0FCH;重写定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论