欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    单片机原理及应用基于Proteus和KeilC林立课后习题答案.docx

    • 资源ID:3346506       资源大小:47.48KB        全文页数:27页
    • 资源格式: DOCX        下载积分:6.99金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要6.99金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机原理及应用基于Proteus和KeilC林立课后习题答案.docx

    单片机原理及应用基于Proteus和KeilC林立课后习题答案1 计算机体系结构:哈佛结构、冯诺依曼结构的区别? 哈佛结构RAM和ROM分别编址,冯诺依曼结构RAM和ROM统一编址 2MSC51单片机外部引脚的名称是什么?各有什么功能? 答:(1) 电源及晶振引脚 VCC(40脚):+5V电源引脚 VSS(20脚):接地引脚 XTAL1(19脚);外接晶振引脚 XTAL2(18脚):外接晶振引脚 (2) 控制引脚 RST/VPD(9)为复位/ 备用电源引脚 ALE/PROG(30)为地址锁存使能输出/ 编程脉冲输入 PSEN(29):输出访问片外程序存储器读选通信号 EA/ VPP (31):外部ROM允许访问/ 编程电源输入 (3) 并行I/O口引脚 P0.0P0.7P0口; P1.0P1.7P1口; P2.0P2.7P2口; P3.0P3.7P3口。 3. AT89C51单片机的片内资源有哪些?其存储器结构如何?片内RAM可分成哪个三个区?各区的地址范围如何? 其内部功能部件有: 控制器:是对取自程序存储器中的指令进行译码,在规定的时刻发出各种操作所需的控制信号,完成指令所规定的功能; 运算器:根据控制器发来的信号,执行算术逻辑运算操作; 存储器:包括程序存储和数据存储器; 定时器计数器:2个16位定时器/计数器,可对机器周期计数,也可对外部输入脉冲计数; 中断系统:可响应三个内部中断源和两个外部中断源的中断请求; 输入输出接口:4个8位并行口和一个全双工串行口; 其存储器结构属于哈佛结构,MCS-51可寻址空间是两个64KB,即64KB的程序存储空间和64KB的数据存储空间。 片内RAM可分成划分为三个部分: 作寄存器区,四组可位寻址区用户RAM区,80B 7程序状态字寄存器PSW各位的定义是什么? 答:程序状态字寄存器PSW各位的定义如下: PSW.7 CY CPSW.6 AC APSW.5 F0 FPSW.4 RS1 RSPSW.3 RS0 RSPSW.2 OV OPSW.1 F1 FPSW.0 P PSW.7:进/借位标志CY,加法有进位时置1,减法有借位时置1; PSW.6:辅助进位标志AC,加法运算低四位向高上四位有进位时置1; PSW.5、PSW.1:用户标志位F0和用户标志位F1, 保存用户的位数据; PSW.4、PSW.3:工作寄存器选择控制位RS1和RS0,00至11分别选择四组工作之一作为当前工作寄存器 PSW.2 :溢出标志位OV,有符号数加、减运算结果有溢出或乘除上结果异常(乘法运算结果大于255即乘积在BA中,或除法运算除数为0)时置1 PSW.0:奇偶标志位P,累加器A中1的个数为奇数时置1。 4什么是复位?单片机复位电路有哪几种,工作原理分别是什么? 答:复位使单片机恢复原始默认状态的操作。 单片机复位电路有:上电复位电路,由电阻和电容构成,通过上电时,电容相当于短路而使复位引脚在晶振有效的情况下保持2个机器周期的高电平;按钮开关复位电路,由两个电阻的分压构成,通过手工按下按钮,使复位引脚在晶振有效的情况下保持2个机器周期的高电平。 9P0、P1、P2和P3口的结构和功能分别是什么? 9. 并行口P0、P1、P2、P3的作用与用法、准双向口的含义。 答:P0口的每一位由1个锁存器、2个三态缓冲器、1个输出控制电路所致,所以在定义变量时,要根据其所在位置和寻址方式明确指定存储类型。 第3章 单片机的汇编语言与程序设计 习题 1MCS-51单片机有哪几种寻址方式?适用于什么地址空间? 答:MCS-51单片机有7种寻址方式:直接寻址、寄存器寻址、寄存器间接寻址、立即寻址、变址寻址、位寻址、相对寻址。 直接寻址方式:操作数的地址由指令直接给出,适用于片内RAM的所有地址空间;如 A,68H MOV A,PSW 寄存器寻址方式:指令给出的是寄存器的编码,操作数在编码指定的寄存器中,适用于片内00H至1FHMOV 的32个字节,用R0,R7表示,通过PSW的RS1和RS0选择组号确定对应32个字节中的其中8个,还有累加器A,以及乘除法指令中的A和B寄存器,位寻址方式中的布尔累加器C; MOV MUL INC A,R1 AB DPTR A,R0 寄存器间接寻址方式:指令给出的是寄存器的编码,操作数地址在编码指定的寄存器中,适用于片内RAM的全部空间,其中52系列中的80H至FFH只能用寄存器间接寻址;如 MOV MOV A,R1 MOVX A,DPTR 立即寻址方式:操作数本身在指令中直接,给出适用于用8位立即数对片内RAM所有地址单元赋值,也可用16位立即数对DPTR赋值; 如 MOV MOV A,#0E2H DPTR,#2000H 变址寻址方式:以DPTR或PC作为基地址寄存器,以累加器A作为变址寄存器,将基址寄存器与变址寄存器的内容相加形成操作数的实际地址的一种寻址方式,变址寻址方式适用于程序存储器ROM,仅有三条指令如下: MOVC A,A+DPTR MOVC A,A+PC JMP A+DPTR 位寻址方式:指令中直接给出操作数所在单元的位地址,适用于片内RAM中地址20H至2FH中的16个字节中的128个位地址空间和80H至FFH中地址中可以被8整除的所有SFR中的每个位地址空间;如 MOV MOV MOV C,7FH F0,C C,ACC.7 相对寻址方式:为相对转移指令而设,指令中直接给出转移的相对偏移量,其转移目标在当前指令-128至127字节范围内的地址空间。如 2MCS-51单片机的PSW程序状态字中无ZERO(零)标志位,怎样判断某内部数据单元的内容是否为零? 答:MCS-51单片机的PSW程序状态字中无ZERO(零)标志位,判断某内部数据单元的内容是否为零是能通过取数到A累加器,再判断A中的每一位是否为零来确定其值是否为零。 3编程将内部RAM的20H-30H单元内容清零。 解:设一个片内RAM指针R0,先指向首地址20H,通过累加器A清零,然后采用间接寻址方式依次将A中的零值传送到指针所指的片内RAM单元,每传送一个字节,地址指针加1,直到达到地址为30H或达到计数器规定的17个字节为止。 程序1: MOV CLR MOV INC SJMP $ R0,#20H ;设地址指针初值 A ;累加器清0 ;置0指针所指单元 ;地址指针加1 R0,A R0 SJMP START SJMP HERE ;等效于: SJMP $ HERE: CONT: CJNE R0,#31H,CONT ;指针未超过终点则继续 ;暂停 程序2: 4编程查找内部RAM的32H41H单元中是否有0AAH这个数据,若有这一数据,则将50H单元置为0FFH,否则将50H单元清零。 解:设一个片内RAM指针R0,先指向首地址32H,比较R0与#0AAH,若相等,则退出循环,给50H单元赋0FFH,若不相等,则R0加1为继续比较下一个字节做准备,直到达到地址为41H或达到计数器规定的16个字节为止还没找到,则给50H单元赋00H 程序1: MOV MOV INC MOV MOV SJMP $ END MOV MOV MOV INC MOV MOV SJMP $ END R7,#16 ;计数器赋初值,从20H到30H共16个字节 ;比较查找值与指针所指单元的值,不相等转移 R0,#32H A,#0FFH R0 A,#00H 50H,A ;设地址指针初值 ;相等,则准备好要赋的标志值0FFH ;修改地址指针 ;查找失败,则将00H存入结果标志单元 ;将比较结果标志存入50H单元 CONT: CJNE R0,#0AAH,NEXT;比较查找值与指针所指单元的值,不相等转移 SJMP DOWN ;转存到保存结果处 MOV CLR MOV MOV INC SJMP $ R0,#20H ;设地址指针初值 A ;累加器清0 ;计数器赋初值,从20H到30H共17个字节 ;置0指针所指单元 ;地址指针加1 R7,#17 R0,A R0 CONT: DJNZ R7, CONT ;计数器减1,非0,则继续 ;暂停 NEXT: CJNE R0,#42H,CONT ;若指针未越过终点,则继续 DOWN: ;暂停 程序2: R0,#32H A,#0FFH R0 A,#00H 50H,A ;设地址指针初值 ;相等,则准备好要赋的标志值0FFH ;修改地址指针 ;查找失败,则将00H存入结果标志单元 ;将比较结果标志存入50H单元 CONT: CJNE R0,#0AAH,NEXT SJMP DOWN ;转存到保存结果处 ;计数器减1,非0,则继续 NEXT: DJNZ R7,CONT DOWN: ;暂停 5查找20H4FH单元中出现00H的次数,并将查找结果存入50H单元。 解:从20H到4FH共48个字节 MOV MOV CONT: NEXT: INC INC R7,#48 ;字节计数器赋初值 R0,#20H R6 R0 ;设地址指针初值 ;相等,0的个数计数器加1 ;修改地址指针 CJNE R0,#00H,NEXT ;比较查找值与指针所指单元的值,不相等转移 DJNZ R7,CONT MOV SJMP $ END 50H,R6 END ;计数器减1,非0,则继续 ;保存O的个数计数值到50H单元 ;暂停 6已知A=83H,R0=17H,(17H)=34H,写出下列程序段执行之后的A中的内容。 ANL A,#17H ORL 17H,A XRL A,R0 CPL A 7已知单片机的晶振频率为12MHz,分别设计延时为0.1s、1s的子程序。 答:已知单片机的晶振频率为12MHz,则机器周期为1us,延时子程序是通过执行指令序列中机器周期数来达到,如果要0.1s,即100ms,也就是100000us,所以需要机器周期数达到100000。要延时达到1S,可通过对延时为0.1秒的子程序调用10次来实现。 DELAY100MS: D1: D2: DELAY1S: LOOP: MOV R7,#10 ;计数10次 1 99795+2 ACALL RET DELAY100MS ;延时100ms子程序 MOV R6,#200 MOV R7,#250 NOP ;1个机器周期 ;1个机器周期 ;1个机器周期 ;2个机器周期,(1+753+2)*132=99792 ;2个机器周期,1+99792+2=99795,约100ms END ANL ORL A A,#17H ;A=03H 答: 17H,A ;(17H)=0011 0100 0000 0011=0011 0111 ;A= 0000 0011 0011 0111 =0011 0100 ;A=1100 1011 XRL CPL A,R0 DJNZ R7,D2 ;2个机器周期,3*251=753 DJNZ R6,D1 RET DJNZ R7,LOOP ;未达到10次则继续 10*(2+99795+2) ;返回2+10*(2+99795+2)=997992 8内部RAM从20H单元开始处有一数据块,以ODH为结束标志,试统计该数据块的长度,将该数据块送到外部数据存储器7E01H开始的单元,并将长度存入7E00H单元。 解:从20H的指针用R0,从外部RAM7E01开始的指针用DPTR,计数器用R7 MOV MOV MOV MOV INC INC INC MOV R7,#0 ;字节计数器赋初值 R0,#20H A,R0 R7 R0 DPTR A,R7 ;设片内RAM地址指针初值 ;取片内RAM中的一个字节 ;长度计数器加1 ;片内RAM地址指针加1 DPTR,#7E01H ;设片外RAM地址指针初值 ;存入片外RAM指针所指单元 CONT: MOVX DPTR,A ;片外RAM地址指针加1 ;取块计数长度值 CJNE A,#0DH,CONT ;未达到结束标志 MOVX DPTR,A SJMP $ END ;保存 ;暂停 9内部RAM从DATA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入SUM和SUM+1单元。 解:R7计数,R6保存累加和高8位,R0用作地址指针 ORG ORG EQU EQU MOV MOV CLR MOV ADD DA JNC INC INC MOV MOV SJMP $ END 0000H 100H 30H 40H R7,#10 A ;字节计数器赋初值 ;累加器清0 ;加RAM中的一个字节到ACC R0,#DATAA R6,A A,R0 A NEXT R6 R0 SUM,A ;若无进位则不用管高8位 ;有进位,高8位加1 ;片内RAM地址指针加1 ;保存低8位 ;设片内RAM地址指针初值 ;累加结果的高8位 LJMP MAIN SUM DATAA MAIN: CONT: NEXT: DJNZ R7,CONT ;未完继续 ;保存高8位 ;暂停 SUM+1,R6 10内部RAM从DATA1和DATA2单元开始处存放着两个等长的数据块,数据块的长度在LEN单元中。请编程检查这两个数据块是否相等,若相等,将0FFH写入RESULT单元,否则将0写入RESULT单元。 解:从DATA1开始的指针用R0,从DATA2开始的指针用R1,计数器用R7 LEN DATA1 DATA2 RESULT EQU EQU EQU EQU MOV MOV MOV MOV MOV INC INC MOV MOV 10 30H 40H 50H R7,#LEN R0,#DATA1 R1,#DATA2 A,R0 7FH,R1 R0 R1 ;字节计数器赋初值 ;设片内RAM地址指针初值 ;设片外RAM地址指针初值 ;取片内RAM R0所指的的一个字节 ;将R1所指单元内容取到片内RAM地址7FH中 ;比较,不相等则结束 ;DATA1 RAM地址指针加1 ;DATA2 RAM地址指针加1 CONT: CJNE A,7FH,NOEQ DJNZ R7,CONT SJMP DOWN ;未完,继续 ;相等,准备写入FFH ;不相等,准备写入00H ;转写入结果处 A,#0FFH A,#0 NOEQ: DOWN: MOV SJMP $ END RESULT,A ;保存比较结果标志 ;暂停 11编制程序,将内部RAM中M1、M2、M3和M4单元中的无符号数xl、x2、x3和x4相加,并把和存入RO和R1(R0中为高8位)中。 解: M1 M2 M3 M4 第4章 单片机的C51语言 习题 2C51语言的变量定义包含哪些关键因素?为何这样考虑? 答:C语言的变量定义格式如下: 存储种类 数据类型 存储类型 变量名 其中: 存储种类与标准C语言相同,包括:自动型(auto)、外部型(extern)、静态型(static)、寄存器型(register)。 数据类型除了包含标准C语言类型的字符型(char),整型(int),长整型(long),浮点型(float),双精度型(double)外,还有二进制位型(bit),特殊功能寄存器型(sfr),SFR可位寻址的位类型(sbit)。 存储类型包括:片内RAM区(data)、片内可位寻址区(bdata),片内RAM间接寻址区(idata),片外RAM页寻址区(pdata),片外RAM区(xdata)、ROM区(code)。 只所以比标准C语言多了存储类型,就是因为MCS51单片机的存储结构中有四个物理存储空间(片内RAM、片内ROM,片外RAM,片外ROM),三个逻辑地址空间(片内RAM,片外RAM,ROM),而且有多种寻址方式所致,所以在定义变量时,要根据其所在位置和寻址方式明确指定存储类型。 4指出下面程序的语法错误: #include<reg51.h> main a=C; EQU EQU EQU EQU MOV ADD JNC MOV ADD JNC INC ADD JNC INC MOV SJMP $ END 30H 40H 45H 4FH A,M1 A,M2 NEXT1 R0,#1 A,M3 NEXT2 R0 A,M4 NEXT3 R0 R1,A ;取第一个数 ;与第二个数相加 ;如果无进位,则转移至第三个相加 ;有进位,高8位置1 ;没有进位,则转至第四个数相加 ;有进位,高8位加1 ;没有进位,则转至结束 ;有进位,高8位再加1 NEXT1: ;与第三个数相加 NEXT2: ;与第四个数相加 NEXT3: ;低8位保存到R1 ;暂停 int a=7,C delay(10) void delay; cgar i; for(i=O; i<=255; ”+”); 答: #include<reg51.h> main a=C; int a=7,C delay(10) void delay; /a和C必须先定义才可使用 /缺分号,应该提在使用前说明 /延时子程序必须先定义,或先有函数原型说明 /作为函数定义,有函数定义不能嵌套的问题, /即不能在一个函数内定义另一个函数,而且“”前不应有分号 /作为函数原型说明,应该放在函数调用之前,且其后不应该接函数体 cgar i; /主函数没有结束,缺” 5定义变量a,b,c,其中a为内部RAM的可位寻址区的字符变量,b为外部数据存储区浮点型变量,c为指向 int 型 xdata 区的指针。 答: char bdata a; 6编程将8051的内部数据存储器20H单元和35H单元的数据相乘,结果存到外部数据存储器中(任意位置)。 解:方法一:用嵌入式汇编语言实现 #include<reg51.h> void main 方法二:单用C语言编程实现 #include<reg51.h> #pragma asm MOV A,20H MOV B,35H MUL AB MOV DPTR,#1234H MOVX DPTR,A INC MOV A,B MOVX DPTR,A #pragma endasm DPTR float xdata b; int xdata *c; /字符型应该是unsigned char for(i=O; i<=255; ”+”);/”+”应改成i+ #include<math.h> int movdata(char); void main unsigned int xdata x; unsigned char *ptr,a,b; ptr=0x25; a=*ptr; ptr=0x30; b=*ptr; x=a*b; 78051的片内数据存储器25H单元中存放有一个010的整数,编程求其平方根(精确到5位有效数字),将平方根放到30H单元为首址的内存中。 解:方法一:用C语言与汇编语言混合编程实现 /用C语言编写的主函数MAIN.C #include<reg51.h> #include<math.h> char getdata(char); void main char a=0x25,c; float f; c=getdata(a); f=sqrt(c); ;用汇编语言编写的取数据子函数,只有一个地址参数在R7中,返回值为指定地址单元中的内容,用R7返回主函数。 PUBLIC _GETDATA DE SEGMENT CODE RSEG DE _GETDATA: MOV A,R7 ;取地址参数 MOV MOV MOV RET END R0,A A,R0 R7,A ;返回地址单元中的内容 EXIT: 方法二:单用C语言编程实现 /MAIN.C #include<reg51.h> #include<math.h> int movdata(char); void main char n; char *ptr; float *ptr2; float f; ptr=0x25; n=*ptr; f=sqrt(n); ptr2=0x30; *ptr2=f; 8将外部RAM 10H15H单元的内容传送到内部RAM 10H15H单元。 解:方法一:采用C语言与汇编语言混合编程 /用C语言编写的主函数MAIN.C #include<reg51.h> char movdata(char,char); void main char a=0x10,b=0x06; movdata(a,b); ;用汇编语言编写的移动数据子函数MOVDATA,其中第一个参数在R7中为首地址,第二个参数在R5中为字节数 PUBLIC _MOVDATA DE SEGMENT CODE RSEG DE _MOVDATA: LOOP: MOV A,R7 ;取参数 R0,A R0,A MOV MOV RET END MOVX A,R0 DJNZ R5,LOOP EXIT: 方法二:单用C语言编程实现 /MAIN.C #include<reg51.h> int movdata(char); void main char n=6; char *ptr1=0x10; char xdata *ptr2; ptr2=0x20; while(n-) *ptr2+=*ptr1+; 9内部RAM 20H、21H和22H、23H单元分别存放着两个无符号的16位数,将其中的大数置于24H和25H单元。 解:方法一: #include<reg51.h> void main /设置一个内部RAM指针 unsigned int *ptr; unsigned int x,y,z; ptr=0x20; x=*ptr; y=*ptr; ptr=0x22; z=(x>y)?x:y; ptr=0x24; *ptr=z; 方法二: #include<reg51.h> #include<absacc.h> void main unsigned int x,y,z; /指向0x20单元 /取第一个数 /指向0x22单元 /取第二个数 /将两数中的较大者赋给z /指向地址为0x24的目标单元 /将大数存入目标单元 x=DBYTE0X20*256+DBYTE0X21; y=DBYTE0X22*256+DBYTE0X23; z=(x>y)?x:y; /将两数中的较大者赋给z DBYTE0X24=z/256; DBYTE0X25=z%256; 方法三: #include<reg51.h> unsigned int x _at_ 0x20; unsigned int y _at_ 0x22; unsigned int z _at_ 0x24; void main 第5章 单片机的中断系统 习题 3MCS-51中断的中断响应条件是什么? 答:(1) 中断源有中断请求; (2) 此中断源允许位为1,即中断源可以向CPU发中断请求; z=(x>y)?x:y; (3) CPU开总中断,即EA=1; (4) 无同级或者更高级中断正在服务 4MCS-51的中断响应过程是怎样的? 答:(1) 将相应的中断优先级状态触发器置1,以阻断后来的同级和低级中断请求; (2) 由硬件清除相应的中断请求标志,串行口的发送和接收中断除外; (3) 执行一条硬件LCALL指令,即把程序计数器PC的内容压入堆栈保存,再将相应的中断服务程序的入口地址送入PC; 5编写出外部中断1为下跳沿触发的中断初始化程序。 解: void Int1_init 6有一外部中断源,接入INT0端,当其中有中断请求时,要求CPU把一个从内部RAM 30H单元开始的50个字节的数据块传送到外部RAM从1000H开始的连续存储区。请编写对应的程序。 解: 7设fosc = 12MHz,利用定时器,TO(工作在方式2)在P1.1引脚上获取输出周期为O.4ms的方波信号,定时器溢出时采用中断方式处理,请编写,T0的初始化程序及中断服务程序。 解:fosc = 12MHz,则机器周期=1us;当T0工作在方式2时,其最大定时时间为256us,要输出周期为0.4mS即400us的方波信号,则其高、低电平应各为200us,显然当定时器T0按方式2工作时,只需计数达到200次即可,因此其时间常数初值为256-200=56。在T0的中断服务程序中,只需将P1.1引脚求反即可。 #include<reg51.h> sbit P1_1=P11; voidtimer0interrupt 1 using 1 P1_1=!P1_1; void main P1_1=0; TMOD=0x02; #include<reg51.h> void main void intx0 interrupt 0 using 1 char * ptr1=0x30; char xdata * ptr2=0x1000; for(i=0;i<50;i+) *ptr2+=*ptr1+; IT0=1 ; EA=1; EX0=1; while(1) ; IT1=1; EA=1;EX1=1; /IE=0x84;/ IE|=0x84; TH0=56; TL0=56; IE=0x82; TR0=1; for(;) 8设fosc = 6MHz,要求每隔50ms,从内部RAM以30H开始的数据存储区传送一个字节数据到外部RAM以2000H开始的连续存储区,共传送50个数据。要求:采用定时器T1以方式2实现定时,数据传送在中断服务程序中完成。 解:fosc = 6MHz,机器周期=12/6*10S=2us,T1工作在方式2时,最大定时时间为512us,要定时50ms,可以计数100次,每次定时500us来实现,方式2定时500us需计数250次,故其时间常数为256-250=6。 #include<reg51.h> char intcnt=0; char movcnt=0; char * ptr1=0x30; char xdata *ptr2=0x2000; voidtimer1interrupt 3 using 1 intcnt+; if(intcnt=100) *ptr2+=*ptr1+; movcnt+; void main TMOD=0x20; TH1=6; TL1=6; IE=0x84; TR1=1; for(;) 9805l单片机只有两个外部中断源,若要扩展成8个外部中断源,请画出实现这种扩展的硬件线路图,并说明如何确定各中断源的优先级。 解:用按钮开关模拟中断源的中断请求,INT0单独作为一个中断源,INT1扩展成7个中断源,有中断请求时,借助于P2口识别是这七个中断源是哪个请求中断,为了验证正确性,如果是INT0中断,则在P0口的数码管上显示0,是INT1中断,则根据从上到下是哪个中断源在P0口的数码管上显示17。具体电路和程序如下: else EX1=0; intcnt=0; -6if(mocnt<50) #include <reg51.h> char led_mod=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07; void INT0_srv (void) interrupt 0 using 1 /外部中断0处理程序 P0=led_mod0; void INT1_srv (void) interrupt 2 using 2 /外部中断1处理程序 char intnum; intnum=P2; switch(intnum) case 0xfe:P0=led_mod1;break; void main EA=1; EX0=1; EX1=1; P0=0; while(1); case 0xfd:P0=led_mod2;break; case 0xfb:P0=led_mod3;break; case 0xf7:P0=led_mod4;break; case 0xef:P0=led_mod5;break; case 0xdf:P0=led_mod6;break; case 0xbf:P0=led_mod7; 第6章 单片机的定时器/计数器 习题 7设MCS-51单片机的晶振频率为12MHz,请编程使P1.O端输出频率为20kHz的方波。 解:fosc = 12MHz,所以机器周期为1us。20kHz的方波周期为1/(20×1000)=50us,方波即高电平和低电平和时间相等,所以只需设一个定时器定时25us将P1.O求反一次即可。由于题目没有规定,所以可以用查询方式,也可以用中断方式进行编程实现。 方法一:采用查询方式实现 #include<reg51.h> sbit P1_0=P10;/定义输出引脚变量 void main P1_0=0; /输出初值为0 TMOD=0x02; /T0方式2定时 TH0=256-25; /计25次,计数初值为模256减25 TL0=TH0; TR0=1; while(1) 方法二:采用中断方式实现 #include<reg51.h> sbit P1_0=P10; /定义输出引脚变量 void main P1_0=0; /输出初值为0 TMOD=0x02; /T0方式2定时 TH0=256-25; /计25次,计数初值为模256减25 TL0=TH0; IE=0x82; TR0=1; timer0interrupt 1 using 1 P1_0=!P1_0; /输出求反 8采用定时/计数器TO对外部脉冲进行计数,每计数10O个脉冲,TO切换为定时工作方式。定时1ms后,又转为计数方式,如此循环不止。假定MCS-5l单片机的晶体振荡器的频率为6MHz,要求T0工作在方式1状态,请编写出相应程序。 解:晶体振荡器的频率为6MHz,则机器周期为12×1/(6*10)= 2us, 要定时1ms,需计数次数为1000/2=500次 #include<reg51.h> sbit P1_0=P10; void main while(1) 6/无限循环 /启动T0 if(TF0) /查询T0溢出标志 TF0=0; /溢出标志复位 P1_0=!P1_0; /输出求反 /允许CPU响应中断,允许T0发中断请求 /启动T0 for(;) /无限循环等待中断 TMOD=0x05;/T0计数,方式一 TH0=(65536-100)/256;/计数100次 TL0=(65536-100)%256; TR0=1; while(!TF0);/等待计数100次的溢出 TF0=0; /溢出标志复位 TMOD=0x01;/T0定时,方式一 TH0=(65536-500)/256;/计数100次 TL0=(65536-500)%256; TR0=1; TF0=0; 9设单片机的fosc = 12MHz,使P1.O和P1.1分别输出周期为1ms和lOms的方波,请用定时器TO方式2编程实现。 解:fosc = 12MHz,所以机器周期为1us。 要使P1.0输出周期为1000us的方波,可以通过定时中断方式实现,定时时间为250us,定时计数2次来实现,对P1.0求反即可。 要使P1.1输出周期为10ms的方波,也可以通过定时中断方式实现,定时时间为5ms,当时间到时,对P1.1求反即可。由于5ms/250us=20,所以也可以通过对250us的定时计数20次来实现。程序如下: #include<reg51.h> sbit P1_0=P10;/输出周期为400us的方波的引脚 sbit P1_1=P11; /输出周期为10ms的方波的引脚 unsigned char num1=0,num2=0;/中断次数计数器,初值为0 void main P1_0=0; P1_1=0; /输出初值为0 /输出初值为0 /启动T0 /溢出标志复位 while(!TF0); /等待定时时间到1ms的溢出 TMOD=0x02; /T0方式2定时 TH0=256-250;/计200次,计数初值为模256减200 TL0=TH0; IE=0x82; TR0=1; voidtimer0interrupt 1 using 1 num1+;num2+; /中断次数加1 if(num1=2) / 中断次数达到2次 P1_0=!P1_0; /输出P1_0求反 num1=0;

    注意事项

    本文(单片机原理及应用基于Proteus和KeilC林立课后习题答案.docx)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开