(2) 接着Y0输出低电平,Y1~Y3输出高平,扫描P1.0~P1.3,若全为高电平,则没有键按下,
若有低电平,则找出相位,得到所按的键。
(3) 再Y1输出低电平,Y0,Y2,Y3输出高电平,重复第2 步骤作. (4) 再Y2输出低电平,Y0,Y1,Y3输出高电平扫描 (5) 再Y3输出低电平,Y0,Y1,Y2输出高电平扫描 根据据以上扫描,确定以上各键是否按下。
五.编程(12分)
设系统时钟频率为12MHZ,编程实现从P1.1输出周期为1s的方波。 定时器方式控制字(TMOD) 89H:
GATE C/T M1 M2 GATE C/T M1
要求:
T1
T0
M2 1. 选择定时器的工作模式,并给定时器方式控制字赋值; 2. 计算定时器的初值;
3. 用中断处理方式,写出相应的程序。 (A7,K5+K6,D3)
答案:
1.选择T0,定时10ms,用R2对10ms计数50次。T0选择方式1,方式控制字00000001B
2.初始值X=65536-10000=1101100011110000B,TH0=D8H,TL0=F0H
3.汇编:
ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0
MAIN:
ORG 0100H
MOV TMOD,#01H MOV TH0,#0DBH MOV TL0,#0F0H MOV R2,#00H SETB EA SETB ET0
SETB TR0 SJMP $
INTT0: MOV TH0,#0DBH
MOV TL0,#0F0H INC R2
CJNE R2,#32H,NEXT CPL P1.1
MOV R2,#00H
NEXT: RETI END
C语言:
#include
TMOD=0x01;
TH0=0xDB;TL0=0xf0; EA=1;ET0=1; i=0; TR0=1; while(1);
}
void time0_int(void) interrupt 1 {
TH0=0xDB;TL0=0xf0; i++;
if(i= =50){P1_1=!P1_1;i=0;} }
六.编程(12分) (A7,K10+k8,D3)
已知D/A转换器DAC0832如图所示,口地址为7FFFH,运放电源为+5V,Vref=+5V,
(1)连线(4根),使得DAC0832与单片机之间采用单缓冲接口方式
装
(2)编程产生正向锯齿波 (3)编程产生三角波
答案:
(2)编程产生正向锯齿波
DASAW:MOV DPTR,#7FFFH
MOV,A,#0
LOOP:MOVX @DPRT,A
INC A NOP
AJMP LOOP
(3)编程产生三角波 MOV DPTR,#7FFFH MOV A,#00H
LOOP1:MOVX @DPTR,A
INC A
CJNE A,#0FFH,LOOP1 LOOP2:MOVX @DPTR,A DEC A
JNZ LOOP2
SJMP LOOP1 RET
七.编程:(12分)(A7,K9,D3)
以下是8031通过8255和微型打印机接口的连接图。设8255的A口地址70H,B口地址71H,C口地址72H,控制口地址73H。用C口的PC0模拟负脉冲,提供打印机所需的选通信号,以驱动打印机开始接收数据。从PC7接收并查询打印机送来的BUSY信号,BUSY=1表示打印机忙。请编程将内部RAM从20H开始存放的50个数据输出打印。并对8255工作方式控制字的选择作必要说明。
答案:
说明部分2分,程序初始化部分4分,查询部分3分,循环部分3分, 8255工作方式:A口方式0输出D6D5=00,D4=0
B口无关,设D2D1=00,C口高4位输入,低4位输出,D3=1,D0=0
控制字:88H
ORG
0000H
MOV R0,#73H
MOV A,#88H MOVX @R0,A MOV R1,#20H
R2,#32H
R0,#72H A,@R0
ACC.7,LOOP1 R0,#70H
MOV LOOP: MOV LOOP1:MOVX JB MOV
MOV A,@R1 MOVX @R0,A INC MOV
R1
R0,#73H
MOV
A,#00H
MOVX @R0,A MOV
A,#01H
MOVX @R0,A DJNZ R2,LOOP
END
八.编程(12分)(A7,K5+K6,D3) 用单片机内部定时器和中断方式产生矩形波。
要求:设单片机晶振频率为6MHZ。利用定时器,从P1.0输出矩形波,高电平宽度50μs,
相关推荐: