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中,并画出电路图。
解:线路连接如图所示。
8051 RXD 甲机 TXD GND 8051 TXD 乙机 RXD GND
分析:甲、乙两机都选择方式1即8位异步通信方式,最高位用作奇偶校验,波特率为1200bps,甲机发送,乙机接收,因此甲机的串口控制字为40H,乙机的串口控制字为50H。
由于选择的是方式1,波特率由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定,则需对定时/计数器T1初始化。
设SMOD=0,甲、乙两机的振荡频率为12MHz,由于波特率为1200bps。定时/计数器T1选择为方式2,则初值如下。
初值=256 - fosc×2SMOD /(12×波特率×32) =256-12000000/(12×1200×32)≈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
第七章
1. 什么是MCS-51单片机的最小系统?
答:所谓最小系统,是指一个真正可用的单片机的最小配置系统。对于单
片机内部资源已能够满足系统需要的,可直接采用最小系统。
2. 简述存储器扩展的一般方法。
答:存储器芯片与单片机扩展连接具有共同的规律。即不论何种存储器芯片,其引脚都呈三总线结构,与单片机连接都是三总线对接。另外,电源线接电源线,地线接地线。
3. 什么是部分译码法?什么是全译码法?它们各有什么特点?用于形成什么信号?
答:部分译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后,剩余的高位地址线仅用一部分参加译码。部分译码使存储器芯片的地址空间有重叠,造成系统存储器空间的浪费。全译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后,剩余的高位地址线全部参加译码。这种译码方法中存储器芯片的地址空间是唯一确定的,但译码电路要相对复杂。译码形成存储器芯片的片选信号线CE。
4. 采用部分译码为什么会出现地址重叠情况,它对存储器容量有何影响? 答:部分译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后,剩余的高位地址线仅用一部分参加译码。参加译码的地址线对于选中某一存储器芯片有一个确定的状态,而与不参加译码的地址线无关。也可以说,只要参加译码的地址线处于对某一存储器芯片的选中状态,不参加译码的地址线的任意状态都可以选中该芯片。正因为如此,部分译码使存储器芯片的地址空间有重叠,造成系统存储器空间减少。
5. 存储器芯片的地址引脚与容量有什么关系? 答:容量(Q)与地址线数目(N)满足关系式:Q=2N。 6. MCS-51单片机的外部设备是通过什么方式访问的?
答:MCS-51单片机扩展的外部设备与片外数据存储器统一编址,即外部设备占用片外数据存储器的地址空间。按片外数据存储器的访问方式访问。
7. 何为键抖动?键抖动对键位识别有什么影响?怎样消除键抖动? 答:按键时,无论按下键位还是放开键位都会产生抖动,如果对抖动不作处理,必然会出现按一次键而输入多次,为确保按一次键只确认一次,必须消除按键抖动。消除按键抖动通常有硬件消抖和软件消抖两种方法。
8. 矩阵键盘有几种编码方式?怎样编码? 答:通常有以下两种方法进行编码;(1) 组合进行编码。(2) 顺序排列编码。
9. 简述对矩阵键盘的扫描过程。
答:矩阵式键盘的工作过程可分为两步:第一步是CPU首先检测键盘上是否有键按下;第二步是识别哪一个键按下。
(1) 检测键盘上是否有键按下的处理方法是:将列线送入全扫描字,读入行线的状态来判别。
(2) 识别键盘中哪一个键按下的处理方法是:将列线逐列置成低电平,检查行输入状态,称为逐列扫描。
10.
共阴极数码管与共阳极数码管有何区别?
用连接键盘的I/O线的二进制
答:共阴极结构,8段发光二极管的阴极端连接在一起,阳极端分开控制,使用时公共端接地,要使哪根发光二极管亮,则对应的阳极端接高电平;共阳极结构,8段发光二极管的阳极端连接在一起,阴极端分开控制,使用时公共端接电源,要使哪根发光二极管亮,则对应的阴极端接地。
11.
简述LED数码管显示的译码方式。
答:所谓译码方式是指由显示字符转换得到对应的字段码的方式。对于LED数码管显示器,通常的译码方式有硬件译码方式和软件译码方式两种。
12.
简述LED动态显示过程。
答:LED动态显示是将所有的数码管的段选线并接在一起,用一个I/O接口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的I/O接口线控制,工作过程为:第一步使右边第一个数码管的公共端D0为1,其余的数码管的公共端为0,同时在I/O(1)上发送右边第一个数码管的字段码,这时,只有右边第一个数码管显示,其余不显示;第二步使右边第二个数码管