第六章单片机基础学习知识原理与应用第二版习题集规范标准答案.doc
.*习 题1.何为“准双向I/O接口”?在MCS-51单片机的四个并口中,哪些是“准双向I/O接口”?答:准双向I/O接口是能实现输入输出功能,但在使用时只能从输入和输出中选择一个。MCS-51单片机的四个并口中P1、P2、P3是准双向I/O接口。2.80C51单片机内部有几个定时/计数器?它们由哪些功能寄存器组成?怎样实现定时功能和计数功能?答:80C51单片机内部有两个16位的可编程定时/计数器,由TH0,TL0,TH1,TL1,TMOD和TCON功能寄存器组成。通过TMOD中的C/T位选择对机器周期计数实现计数功能,选择对外部脉冲计数实现计数功能。3.定时/计数器T0有几种工作方式?各自的特点是什么?答:有四种工作方式,特点见下表:M1M0工作方式方式说明00013位定时/计数器01116位定时/计数器1028位自动重置定时/计数器113两个8位定时/计数器(只有T0有)4.定时/计数器的四种工作方式各自的计数范围是多少?如果要计10个单位,不同的方式初值应为多少?答:有四种方式。方式0计数范围:18192;方式1计数范围:165536;方式2计数范围:1256;方式3计数范围:1256。如果计10个单位,方式0初值为:8192-10=8182;方式1初值为:65536-10=65526;方式2初值为:256-10=246;方式2初值为:256-10=246。5.设振荡频率为12MHz,如果用定时/计数器T0产生周期为100ms的方波,可以选择哪几种方式,其初值分别设为多少?答:只能选择方式1,初值为65536-50000=15536。6.何为同步通信?何为异步通信?各自的特点是什么?答:异步通信方式的特点是数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态,空闲线路约定为高电平“1”。特点是对发送时钟和接收时钟的要求相对不高,线路简单,但传送速度较慢。同步通信方式的特点是数据在线路上传送时以字符块为单位,一次传送多个字符,传送时须在前面加上一个或两个同步字符,后面加上校验字符。特点是对发送时钟和接收时钟要求较高,往往用同一个时钟源控制,控制线路复杂,传送速度快。7.单工、半双工和全双工有什么区别?答:单工方式只有一根数据线,信息只能单向传送;半双工方式也只有一根数据线,但信息可以分时双向传送;全双工方式有两根数据线,在同一个时刻能够实现数据双向传送。8.设某异步通信接口,每帧信息格式为10位,当接口每秒传送1000个字符时,其波特率为多少?答:10000波特9.串行口数据寄存器SBUF有什么特点?答:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄存器),执行MOV SBUF,A发送时为发送数据寄存器,执行MOV A, SBUF接收时为接收数据寄存器。10.MCS-51单片机串行口有几种工作方式?各自特点是什么?答:有四种工作方式,分别是方式0、方式1、方式2和方式3。其中:方式0,称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。方式1,称为8位的异步通信方式,通常用于双机通信。方式2和方式3,称为9位的异步通信方式,通常用于多机通信。11.说明SM2在方式2和方式3对数据接收有何影响。答:通过SM2对方式2和方式3数据接收进行控制, SM2=1,那么只有接收的第9位为“1”才接收有效。如SM2=0,接收的第9位无论为1还是0都接收有效。12.怎样来实现利用串行口扩展并行输入/输出口?答:利用串行口在方式0时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口;当外接一个并入串出的移位寄存器时,就可以扩展并行输入口。13.什么是中断、中断允许和中断屏蔽?答:在计算机中,由于计算机内外部的原因或软硬件的原因,使CPU从当前正在执行的程序中暂停下来,而自动转去执行预先安排好的为处理该原因所对应的服务程序。执行完服务程序后,再返回被暂停的位置继续执行原来的程序,这个过程称为中断,实现中断的硬件系统和软件系统称为中断系统。中断允许是允许中断请求送CPU产生中断,中断屏蔽是禁止中断请求信号送CPU产生中断。14.8051有几个中断源?中断请求如何提出?答:MCS-51单片机提供5个硬件中断源:两个外部中断源(P3.2)和(P3.3),两个定时/计数器T0和T1中断;1个串行口中断。外部中断源和的中断请求信号从外部引脚P3.2和P3.3输入;两个定时/计数器T0和T1的溢出中断TF0和TF1定时/计数器T0(或T1)溢出时提出;串行口中断由发送中断标志T1和接收中断标志R1产生。15.8051的中断源中,哪些中断请求信号在中断响应时可以自动清除?哪些不能自动清除?应如何处理?答:工作在边沿触发方式下的两个外部中断源和两个定时/计数器中断中断请求信号在中断响应时可以自动清除,工作在电平触发方式下的两个外部中断源和串行口中断不能自动清除。工作在电平触发方式下的两个外部中断源的中断请求信号通过外加硬件和加软件的方式清除,串行口中断标志T1和标志R1完全由软件清除。16.8051的中断优先级有几级?在形成中断嵌套时各级有何规定?答:8051的中断优先级有两级;形成中断嵌套时规定(1)正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令后,CPU才响应新的中断请求。(2)正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现两级中断嵌套。(3)CPU同时接收到几个中断请求时,首先响应优先级最高的中断请求。17.设8051的P1中各位接发光二极管,分别用汇编语言和C语言编程实现逐个轮流点亮二极管,并循环显示。参考程序:ORG 0000HLJMP MAINORG 0100H ;主程序MAIN:MOV A,#01HLOOP:MOV P1,ACALL DELAYRL ASJMP LOOPSJMP $DELAY:MOV R7,#0FFHDJNZ R7,$RETENDC语言程序:#include /包含特殊功能寄存器库void delay(unsigned int x);void main()unsigned char i,j;while(1)i=01;for (j=0;j8;j+)P1=i;delay(100);i=i*2;void delay(unsigned int x)unsigned char j;while(x-)for (j=0;j125;j+);18.8051系统中,已知振荡频率为12MHz,用定时/计数器T0,实现从P1.0产生周期为2ms的方波。要求分别用汇编语言和C语言进行编程。解:分析:从P1.0输出周期为2ms的方波,只须P1.0每1ms取反一次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式1时,最大的定时时间为65.536ms,满足1ms的定时要求,方式控制字应设定为00000001B(01H)。定时1ms,计数值N为1000,初值X=65536-1000=64536,则TH0=FCH,TL0=18H。采用中断处理方式:程序如下:ORG 0000HLJMP MAINORG 000BH ;中断处理程序MOV TH0,#0FCHMOV TL0,#18HCPL P1.0RETIORG 0100H ;主程序MAIN:MOV TMOD,#01HMOV TH0,#0FCHMOV TL0,#18HSETB EASETB ET0SETB TR0SJMP $ENDC语言程序:#include /包含特殊功能寄存器库sbit P1_0=P10;void main()TMOD=0x01;TH0=0xFC;TL0=0x18;EA=1;ET0=1;TR0=1;while(1);void time0_int(void) interrupt 1 /中断服务程序 TH0=0xFC;TL0=0x18;P1_0=!P1_0;19.8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生周期为2s的方波。要求分别用汇编语言和C语言进行编程。解:从P1.1产生2s的方波,应产生500ms的周期性的定时,定时到对P1.1取反就可实现。由于定时时间较长,一个定时/计数器T1不能直接实现,采用定时/计数器T1产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数100次来实现。系统时钟为12MHZ,定时/计数器T1定时10ms,计数值N为10000,只能选方式1,方式控制字为00010000B(10H),初值X:X=65536-10000=55536=1101100011110000B则TH1=11011000B=D8H,TL1=11110000B=F0H。定时/计数器T1采用中断处理方式。汇编程序:ORG 0000HLJMP MAINORG 001BHLJMP INTT1ORG 0100HMAIN:MOV TMOD,#10HMOV TH1,#0D8HMOV TL1,#0F0HMOV R2,#00HSETB EASETB ET1SETB TR1SJMP $INTT1:MOV TH1,#0D8HMOV TL1,#0F0HINC R2CJNE R2,#64H,NEXTCPL P1.1MOV R2,#00HNEXT:RETIENDC语言程序:#include /包含特殊功能寄存器库sbit P1_1=P11;char i;void main()TMOD=0x10;TH1=0xD8;TL1=0xf0;EA=1;ET1=1;i=0;TR1=1;while(1);void time0_int(void) interrupt 3 /中断服务程序TH1=0xD8;TL1=0xf0;i+;if (i= =100) P1_1=! P1_1;i=0;20.8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生高电平宽度为10ms,低电平宽度为20ms的矩形波。要求分别用汇编语言和C语言进行编程。解:本题处理方式有多种,这里采用对定时/计数器T1形成10ms周期定时,用R2对10ms计数,当计到1,则对P1.1置1,当计到2和3,则对P1.1置0来实现。用定时/计数器T1形成10ms周期定时见上题。程序如下:ORG 0000HLJMP MAINORG 001BHLJMP INTT1ORG 0100HMAIN:MOV TMOD,#10HMOV TH1,#0D8HMOV TL1,#0F0HMOV R2,#00HSETB EASETB ET1SETB TR1SJMP $INTT1:MOV TH1,#0D8HMOV TL1,#0F0HINC R2CJNE R2,#01H,NEXTSETB P1.1SJMP EXITNEXT:CJNE R2,#02H,NEXT1CLR P1.1SJMP EXITNEXT1:CJNE R2,#03H,NEXTSETB P1.1MOV R2,#00EXIT:RETIENDC语言程序:#include /包含特殊功能寄存器库sbit P1_1=P11;char i;void main()TMOD=0x10;TH1=0xD8;TL1=0xf0;EA=1;ET1=1;i=0;TR1=1;while(1) if (i= =0) P1_1=1;if (i= =1) P1_1=0;if (i= =2) P1_1=0;void time0_int(void) interrupt 3 /中断服务程序TH1=0xD8;TL1=0xf0;i+;if (i= =3) i=0;21.用8051单片机的串行口扩展并行I/O接口,控制16个发光二极管依次发光,画出电路图,用汇编语言和C语言分别编写相应的程序。解:采用在串口连接两个CD4094来实现,电路图如下: 8051 RXD TXD P1.0 DATA CLK STB DATA CLK STB程序如下;ORG 0000HLJMP MAINORG 0100HMAIN:MOV SCON,#00HMOV R4,#10HMOV R3,#00HMOV R2,#01HCLR P1.0START:MOV A,R3MOV SBUF,ALOOP:JNB TI,LOOPMOV A,R2MOV SBUF,ALOOP1:JNB TI,LOOP1SETB P1.0ACALL DELAYCLR TICLR CMOV A,R2RLC AMOV R2,AMOV A,R3RLC AMOV R3,ACLR P1.0DJNZ R4,START1SJMP MAINDELAY:MOV R7,#05HLOOP2:MOV R6,#0FFHLOOP1:DJNZ R6,LOOP1DJNZ R7,LOOP2RETENDC语言程序:#include void delay(unsigned int x);unionunsigned int word;structunsigned char high;unsigned char low;bytes;number;void main()int i;SCON=0x00;while(1)number.word=0x01;for (i=0;i16;i+)SBUF=number.bytes.low;while(!TI);TI=0;SBUF=number.bytes.high;while(!TI);TI=0;delay(10);number.word=number.word*2;void delay(unsigned int x)unsigned char j;while(x-)for (j=0;j125;j+);22.用汇编语言编程设计一个8051双机通信系统,将A机的片内RAM中30H3FH的数据块通过串行口传送到B机的片内RAM的40H4FH中,并画出电路图。解:线路连接如图所示。分析:甲、乙两机都选择方式1即8位异步通信方式,最高位用作奇偶校验,波特率为1200bps,甲机发送,乙机接收,因此甲机的串口控制字为40H,乙机的串口控制字为50H。由于选择的是方式1,波特率由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定,则需对定时/计数器T1初始化。设SMOD=0,甲、乙两机的振荡频率为12MHz,由于波特率为1200bps。定时/计数器T1选择为方式2,则初值如下。初值=256 - fosc2SMOD /(12波特率32)=256-12000000/(12120032)230=E6H根据要求,定时/计数器T1的方式控制字为20H。甲机的发送程序:TSTART:MOV TMOD,#20H MOV TL1,#0E6HMOV TH1,#0E6HMOV PCON,#00HMOV SCON,#40HMOV R0,#30HMOV R7,#10HSETB TR1LOOP:MOV A,R0MOV C,PMOV ACC.7,C MOV SBUF,AWAIT:JNB TI,WAIT CLR TI INC R0 DJNZ R7,LOOP RET乙机的接收程序:RSTART:MOV TMOD,#20H MOV TL1,#0E6H MOV TH1,#0E6HMOV PCON,#00HMOV R0,#40H MOV R7,#10HSETB TR1LOOP:MOV SCON,#50H WAIT:JNB RI,WAITMOV A,SBUFMOV C,PJC ERROR ANL A,#7FH MOV R0,AINC R0DJNZ R7,LOOPRET
收藏
编号:2626765
类型:共享资源
大小:92.71KB
格式:DOC
上传时间:2020-04-25
8
金币
- 关 键 词:
-
第六
单片机
基础
学习
知识
原理
应用
利用
运用
第二
习题集
规范
标准答案
- 资源描述:
-
.*
习 题
1. 何为“准双向I/O接口”?在MCS-51单片机的四个并口中,哪些是“准双向I/O接口”?
答:准双向I/O接口是能实现输入输出功能,但在使用时只能从输入和输出中选择一个。MCS-51单片机的四个并口中P1、P2、P3是准双向I/O接口。
2. 80C51单片机内部有几个定时/计数器?它们由哪些功能寄存器组成?怎样实现定时功能和计数功能?
答:80C51单片机内部有两个16位的可编程定时/计数器,由TH0,TL0,TH1,TL1,TMOD和TCON功能寄存器组成。通过TMOD中的C/T位选择对机器周期计数实现计数功能,选择对外部脉冲计数实现计数功能。
3. 定时/计数器T0有几种工作方式?各自的特点是什么?
答:有四种工作方式,特点见下表:
M1
M0
工作方式
方式说明
0
0
0
13位定时/计数器
0
1
1
16位定时/计数器
1
0
2
8位自动重置定时/计数器
1
1
3
两个8位定时/计数器(只有T0有)
4. 定时/计数器的四种工作方式各自的计数范围是多少?如果要计10个单位,不同的方式初值应为多少?
答:有四种方式。方式0计数范围:1~8192;方式1计数范围:1~65536;方式2计数范围:1~256;方式3计数范围:1~256。
如果计10个单位,方式0初值为:8192-10=8182;方式1初值为:65536-10=65526;方式2初值为:256-10=246;方式2初值为:256-10=246。
5. 设振荡频率为12MHz,如果用定时/计数器T0产生周期为100ms的方波,可以选择哪几种方式,其初值分别设为多少?
答:只能选择方式1,初值为65536-50000=15536。
6. 何为同步通信?何为异步通信?各自的特点是什么?
答:异步通信方式的特点是数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态,空闲线路约定为高电平“1”。特点是对发送时钟和接收时钟的要求相对不高,线路简单,但传送速度较慢。
同步通信方式的特点是数据在线路上传送时以字符块为单位,一次传送多个字符,传送时须在前面加上一个或两个同步字符,后面加上校验字符。特点是对发送时钟和接收时钟要求较高,往往用同一个时钟源控制,控制线路复杂,传送速度快。
7. 单工、半双工和全双工有什么区别?
答:单工方式只有一根数据线,信息只能单向传送;半双工方式也只有一根数据线,但信息可以分时双向传送;全双工方式有两根数据线,在同一个时刻能够实现数据双向传送。
8. 设某异步通信接口,每帧信息格式为10位,当接口每秒传送1000个字符时,其波特率为多少?
答:10000波特
9. 串行口数据寄存器SBUF有什么特点?
答:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄存器),执行MOV SBUF,A发送时为发送数据寄存器,执行MOV A, SBUF接收时为接收数据寄存器。
10. MCS-51单片机串行口有几种工作方式?各自特点是什么?
答:有四种工作方式,分别是方式0、方式1、方式2和方式3。其中:
方式0,称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。
方式1,称为8位的异步通信方式,通常用于双机通信。
方式2和方式3,称为9位的异步通信方式,通常用于多机通信。
11. 说明SM2在方式2和方式3对数据接收有何影响。
答:通过SM2对方式2和方式3数据接收进行控制, SM2=1,那么只有接收的第9位为“1”才接收有效。如SM2=0,接收的第9位无论为1还是0都接收有效。
12. 怎样来实现利用串行口扩展并行输入/输出口?
答:利用串行口在方式0时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口;当外接一个并入串出的移位寄存器时,就可以扩展并行输入口。
13. 什么是中断、中断允许和中断屏蔽?
答:在计算机中,由于计算机内外部的原因或软硬件的原因,使CPU从当前正在执行的程序中暂停下来,而自动转去执行预先安排好的为处理该原因所对应的服务程序。执行完服务程序后,再返回被暂停的位置继续执行原来的程序,这个过程称为中断,实现中断的硬件系统和软件系统称为中断系统。中断允许是允许中断请求送CPU产生中断,中断屏蔽是禁止中断请求信号送CPU产生中断。
14. 8051有几个中断源?中断请求如何提出?
答:MCS-51单片机提供5个硬件中断源:两个外部中断源(P3.2)和(P3.3),两个定时/计数器T0和T1中断;1个串行口中断。
外部中断源和的中断请求信号从外部引脚P3.2和P3.3输入;两个定时/计数器T0和T1的溢出中断TF0和TF1定时/计数器T0(或T1)溢出时提出;串行口中断由发送中断标志T1和接收中断标志R1产生。
15. 8051的中断源中,哪些中断请求信号在中断响应时可以自动清除?哪些不能自动清除?应如何处理?
答:工作在边沿触发方式下的两个外部中断源和两个定时/计数器中断中断请求信号在中断响应时可以自动清除,工作在电平触发方式下的两个外部中断源和串行口中断不能自动清除。工作在电平触发方式下的两个外部中断源的中断请求信号通过外加硬件和加软件的方式清除,串行口中断标志T1和标志R1完全由软件清除。
16. 8051的中断优先级有几级?在形成中断嵌套时各级有何规定?
答:8051的中断优先级有两级;形成中断嵌套时规定(1) 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令后,CPU才响应新的中断请求。
(2) 正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现两级中断嵌套。
(3) CPU同时接收到几个中断请求时,首先响应优先级最高的中断请求。
17. 设8051的P1中各位接发光二极管,分别用汇编语言和C语言编程实现逐个轮流点亮二极管,并循环显示。
参考程序:
ORG 0000H
LJMP MAIN
ORG 0100H ;主程序
MAIN: MOV A,#01H
LOOP:MOV P1,A
CALL DELAY
RL A
SJMP LOOP
SJMP $
DELAY:MOV R7,#0FFH
DJNZ R7,$
RET
END
C语言程序:
#include //包含特殊功能寄存器库
void delay(unsigned int x);
void main()
{
unsigned char i,j;
while(1)
{i=01;
for (j=0;j<8;j++)
{P1=i;
delay(100);
i=i*2;
}
}
}
void delay(unsigned int x)
{
unsigned char j;
while(x--)
{for (j=0;j<125;j++);}
}
18. 8051系统中,已知振荡频率为12MHz,用定时/计数器T0,实现从P1.0产生周期为2ms的方波。要求分别用汇编语言和C语言进行编程。
解:分析:从P1.0输出周期为2ms的方波,只须P1.0每1ms取反一次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式1时,最大的定时时间为65.536ms,满足1ms的定时要求,方式控制字应设定为00000001B(01H)。定时1ms,计数值N为1000,初值X=65536-1000=64536,则TH0=FCH,TL0=18H。
采用中断处理方式:
程序如下:
ORG 0000H
LJMP MAIN
ORG 000BH ;中断处理程序
MOV TH0,#0FCH
MOV TL0,#18H
CPL P1.0
RETI
ORG 0100H ;主程序
MAIN: MOV TMOD,#01H
MOV TH0,#0FCH
MOV TL0,#18H
SETB EA
SETB ET0
SETB TR0
SJMP $
END
C语言程序:
#include //包含特殊功能寄存器库
sbit P1_0=P1^0;
void main()
{
TMOD=0x01;
TH0=0xFC;TL0=0x18;
EA=1;ET0=1;
TR0=1;
while(1);
}
void time0_int(void) interrupt 1 //中断服务程序
{
TH0=0xFC;TL0=0x18;
P1_0=!P1_0;
}
19. 8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生周期为2s的方波。要求分别用汇编语言和C语言进行编程。
解:
从P1.1产生2s的方波,应产生500ms的周期性的定时,定时到对P1.1取反就可实现。由于定时时间较长,一个定时/计数器T1不能直接实现,采用定时/计数器T1产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数100次来实现。系统时钟为12MHZ,定时/计数器T1定时10ms,计数值N为10000,只能选方式1,方式控制字为00010000B(10H),初值X:
X=65536-10000=55536=1101100011110000B
则TH1=11011000B=D8H,TL1=11110000B=F0H。
定时/计数器T1采用中断处理方式。
汇编程序:
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP INTT1
ORG 0100H
MAIN: MOV TMOD,#10H
MOV TH1,#0D8H
MOV TL1,#0F0H
MOV R2,#00H
SETB EA
SETB ET1
SETB TR1
SJMP $
INTT1: MOV TH1,#0D8H
MOV TL1,#0F0H
INC R2
CJNE R2,#64H,NEXT
CPL P1.1
MOV R2,#00H
NEXT: RETI
END
C语言程序:
#include //包含特殊功能寄存器库
sbit P1_1=P1^1;
char i;
void main()
{
TMOD=0x10;
TH1=0xD8;TL1=0xf0;
EA=1;ET1=1;
i=0;
TR1=1;
while(1);
}
void time0_int(void) interrupt 3 //中断服务程序
{
TH1=0xD8;TL1=0xf0;
i++;
if (i= =100) {P1_1=! P1_1;i=0;}
}
20. 8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生高电平宽度为10ms,低电平宽度为20ms的矩形波。要求分别用汇编语言和C语言进行编程。
解:
本题处理方式有多种,这里采用对定时/计数器T1形成10ms周期定时,用R2对10ms计数,当计到1,则对P1.1置1,当计到2和3,则对P1.1置0来实现。用定时/计数器T1形成10ms周期定时见上题。
程序如下:
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP INTT1
ORG 0100H
MAIN: MOV TMOD,#10H
MOV TH1,#0D8H
MOV TL1,#0F0H
MOV R2,#00H
SETB EA
SETB ET1
SETB TR1
SJMP $
INTT1: MOV TH1,#0D8H
MOV TL1,#0F0H
INC R2
CJNE R2,#01H,NEXT
SETB P1.1
SJMP EXIT
NEXT: CJNE R2,#02H,NEXT1
CLR P1.1
SJMP EXIT
NEXT1:CJNE R2,#03H,NEXT
SETB P1.1
MOV R2,#00
EXIT: RETI
END
C语言程序:
#include //包含特殊功能寄存器库
sbit P1_1=P1^1;
char i;
void main()
{
TMOD=0x10;
TH1=0xD8;TL1=0xf0;
EA=1;ET1=1;
i=0;
TR1=1;
while(1)
{
if (i= =0) {P1_1=1;}
if (i= =1) {P1_1=0;}
if (i= =2) {P1_1=0;}
}
;
}
void time0_int(void) interrupt 3 //中断服务程序
{
TH1=0xD8;TL1=0xf0;
i++;
if (i= =3) {i=0;}
}
21. 用8051单片机的串行口扩展并行I/O接口,控制16个发光二极管依次发光,画出电路图,用汇编语言和C语言分别编写相应的程序。
解:
采用在串口连接两个CD4094来实现,电路图如下:
8051
RXD
TXD
P1.0
DATA
CLK
STB
DATA
CLK
STB
程序如下;
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV SCON,#00H
MOV R4,#10H
MOV R3,#00H
MOV R2,#01H
CLR P1.0
START:MOV A,R3
MOV SBUF,A
LOOP: JNB TI,LOOP
MOV A,R2
MOV SBUF,A
LOOP1:JNB TI,LOOP1
SETB P1.0
ACALL DELAY
CLR TI
CLR C
MOV A,R2
RLC A
MOV R2,A
MOV A,R3
RLC A
MOV R3,A
CLR P1.0
DJNZ R4,START1
SJMP MAIN
DELAY:MOV R7,#05H
LOOP2:MOV R6,#0FFH
LOOP1:DJNZ R6,LOOP1
DJNZ R7,LOOP2
RET
END
C语言程序:
#include
void delay(unsigned int x);
union
{
unsigned int word;
struct{unsigned char high;unsigned char low;}bytes;
}number;
void main()
{
int i;
SCON=0x00;
while(1)
{
number.word=0x01;
for (i=0;i<16;i++)
{SBUF=number.bytes.low;
while(!TI);
TI=0;
SBUF=number.bytes.high;
while(!TI);
TI=0;
delay(10);
number.word=number.word*2;
}
}
}
void delay(unsigned int x)
{
unsigned char j;
while(x--)
{for (j=0;j<125;j++);}
}
22. 用汇编语言编程设计一个8051双机通信系统,将A机的片内RAM中30H~3FH的数据块通过串行口传送到B机的片内RAM的40H~4FH中,并画出电路图。
解:线路连接如图所示。
分析:甲、乙两机都选择方式1即8位异步通信方式,最高位用作奇偶校验,波特率为1200bps,甲机发送,乙机接收,因此甲机的串口控制字为40H,乙机的串口控制字为50H。
由于选择的是方式1,波特率由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定,则需对定时/计数器T1初始化。
设SMOD=0,甲、乙两机的振荡频率为12MHz,由于波特率为1200bps。定时/计数器T1选择为方式2,则初值如下。
初值=256 - fosc2SMOD /(12波特率32)
=256-12000000/(12120032)≈230=E6H
根据要求,定时/计数器T1的方式控制字为20H。
甲机的发送程序:
TSTART: MOV TMOD,#20H
MOV TL1,#0E6H
MOV TH1,#0E6H
MOV PCON,#00H
MOV SCON,#40H
MOV R0,#30H
MOV R7,#10H
SETB TR1
LOOP: MOV A,@R0
MOV C,P
MOV ACC.7,C
MOV SBUF,A
WAIT: JNB TI,WAIT
CLR TI
INC R0
DJNZ R7,LOOP
RET
乙机的接收程序:
RSTART: MOV TMOD,#20H
MOV TL1,#0E6H
MOV TH1,#0E6H
MOV PCON,#00H
MOV R0,#40H
MOV R7,#10H
SETB TR1
LOOP: MOV SCON,#50H
WAIT: JNB RI,WAIT
MOV A,SBUF
MOV C,P
JC ERROR
ANL A,#7FH
MOV @R0,A
INC R0
DJNZ R7,LOOP
RET
展开阅读全文
得力文库 - 分享文档赚钱的网站所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。