编程题:
2. 编一个子程序,将寄存器R0中的内容*10(积<256)
3. 编程将片内RAM 30H单元开始的15B的数据送到片外RAM 3000H开始的单元中去.
4. 用查表法编一子程序,将40H单元中的BCD码转换成ASCII码.
4.片内RAM50H、51H单元中有一个10B的二进制数,高位在前,低位在后,请编程将其求补,存回原单元中去。
5.片内RAM30H开始的单元中有10B的二进制数,请编程求它们的和。
6.R1中存有一BCD码,请编程将它转换成ASKII码,存入外RAM1000H单元中去。
7.编一个程序,将累加器中的一个字符从串行接口发送出去。
8.片外RAM2000H开始的单元中有5B的数据,编程将它们传送到片内RAM20H开始的
单元中去。
9用查表法编一子程序,将R3中的BCD码转换成ASKII码。
10.片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中。
11.编程将片外RAM3000H开始的20B的数据传送到片内RAM30H开始的单元中。
12.编程将R1、R2中的16位二进制数增1后送回原单元。
13.编程将片内RAM40H开始的单元存放的10B的二进制数传送到片外RAM4000H开始的单元中去。
14.编一子程序,从串行接口接受一个数据。
15.编写将30H和31H单元中2B二进制数乘2的子程序。
16.片外RAM2000H单元中有一BCD码,编程将其转换成ASKII码。
17.试编制单字节BCD码数的减法程序。
18.利用调子程序的方法,进行两个4B无符号数相加。请编主程序及子程序。
19.若图11-2中数据为无符号数,求数据 中最大值送A 。编程并注释。
图11-2 片外 RAM中的数据块 片外 RAM
数据块长度 |
D1 |
D2 |
D3 |
┆ |
0000H
0001H
┆
图11-2
20. 若图11-2中数据块是有符号数,求正数个数。编程并注释。
21. 若图11-2中数据块为无符号数,求其累加和。编程并注释。
22.已知20H单元有一位十进制数,通过查表找出与其对应的共阴极七段码,并存于30H单元。若20H的数大于或等于0AH,将FF装入30H单元。
在ROM中存储的共阴极七段码表如下:
表格地址 七段码 |
表格地址 七段码 |
2000 3F |
2005 6D |
23.将片外RAM空间2000H~200AH中的数据的高四位变零,低四位不变,原址存放。
24.将累加器A和状态寄存器内容压入堆栈保护,然后再恢复A和状态寄存器内容。
25.求片外RAM 3000H、3001H单元数据的平均值,并传送给3002H单元。
26.分别写出实现如下功能的程序段。
(1)将片外RAM 30H的中间4位,31H的低2位,32H得高2位按序拼成一个新字节,
存入33H单元。
(2)将DPTR中间8位取反,其余位不变。
27.写出达到下列要求的指令(不能改变各未涉及位的内容)。
(1)使A的最低位置1。
(2)清除A得高4位。
(3)使ACC.2和ACC.3置1。
(4)清除A的中间4位。
28.有一段程序如下:
地址码 机器码 标号 汇编助记符
200AH E8 CHAR: MOV A,R0
...... ....... ...... .......
2010H 80 rel SJMP CHAR
(1)计算指令“SJMP CHAR”的相对便移量rel的值(十六进制机器码形式)。
(2)支出相对偏移量值rel所在的地址单元。
29.编写程序将片内RAM 30H中的2位十进制数转换为ASCII码,并存入31H和32H中。
30.编写程序段,用三种方法实现累加器A与寄存器B的内容转交换。
31.将如图11-3所示片外RAM中两个无符号数按从小到大顺序排列,编程并注释。
0000H D1
0001H D2
图11-3 片外RAM 数据
32.编程将一个按高低字节存放在21H、20H中的双字节数乘2后,在按高低次序将结果存放到22H、21H、20H单元。
33.编程将存放在片外RAM 1000H、1001H中的两个数,按大小次序存放到片内RAM的30H、31H
单元。
34.多字节减法编程,一直有两个多字节数,从高到低依次存放如下:
X1--(13H)(12H)(11H)(10H)
X2--(23H)(22H)(21H)(20H)
计算X1-X2,差存放在13H、12H、11H、10H中。
35.计算下面逻辑值(用x表示逻辑乘,+表示逻辑加)。
P1.0=P1.1xP1.2+ACC.7xC+/PSW.0
36.在ROM空间建立一个10以内的平方值表,根据R0中的数查出平方值,若平方值超出表的范围则将FF装入A。
37.三字节无符号数相加,被加数在片外RAM的200H-2002H(低位在前),加数在片内RAM的20H-22H(低位在前),要求把相加之和存放在20H-22H之中,请编程。
38.将片内RAM 30H-3FH中的数据按顺序传送到片外RAM 2000H-200FH,请编程。
39.列举4条能使累加器A清0的指令。
40.已知A=7AH,R0=30H,片内RAM 30H单元的内容为A5H,请问下列程序段执行后,(A)=?
ANL A,#17H
ORL 30H,A
XRL A,@R0
CPL A
41.编程将片外RAM 1000-1010H内容传入片内RAM 30H开始的单元。
42.8255A控制字地址为300FH,请按:A口方式0输入,B口方式1输出,C口高位输出、C口低位输入,确定8255A控制字并编程初始化程序。
43.复位后,跳过中断区,重新设置堆栈,并将工作寄存器切换至3区。
44.在片外RAM空间有一个数据块如图11-4所示。
(1)若该数据块为无符号数,求该数据块 1000H 数据块长度
中数据最小值,并存放于片内RAM 20H单元。 1001H X1
(2)若该数据块是有符号数,求正数、负 1002H X2
数和0的个数,并将它们的个数分别存到12H、 1003H X3
11H、10H单元中。 ...
图11-4 数据块
45.编写一个软件延时1s和1min的子程序。设fosc=6MHz,则1个机器周期=2us。
46.试用DAC0832芯片设计单脉冲方式的D/A转换接口电路,并编写两个程序,分别使DAC0832输出负向
锯齿波和15个正向阶梯波。
47.试设计DAC0809对1路模拟信号进行转换的电路,并编制采集100个数据存入89C51的程序。
48.请编制串行通信的数据发送程序,发送片内RAM 50H-5FH的16B数据,串行接口设定为方式2,采用
偶校验方式。设晶振频率为6MHz。
49.请编制串行通信数据接收程序,将接收的16B数据送入片内RAM 58H-5FH单元中,串行接口设定为工作方式3,波特率为1200波特,fosc=6MHz。
50.在89C51片内RAM 20H-3FH单元中有32B数据,若采用方式1进行串行通信,波特率为1200波特,
fosc=12MHz,用查询和中断两种方式编写发送/接收程序对。
51.已知当前PC值为2000H,请用两种方法将程序存储器20F0H中的常数送入累加器A中。
52.请用两种方法实现累加器A与寄存器B的内容交换。
53.请用位操作指令编写下面逻辑表达值的程序。
P1.7=ACC.0X(B.0+P2.1)+P3.2
54.编程将片内20H单元开始的30个数据送到片外RAM 3000H开始的单元中。
55.在片外2000H开始的单元中有100个有符号数,试编程统计其中正数、负数和0的个数的程序。
56.在2000H-2004H单元中,存有5个压缩BCD码,编程将他们转换成ASCII码,存入2005H开始的连续单元中。
57.编程将累加器A的低4位数据送P1口的高4位,P1口的低4位保持不变。
58.编程将片内RAM 40H单元的中间4位取反,其余位不变。
59.如果R0的内容0,将R1置为0,如R0内容非0,置R1为FFH,试进行编程。
60.编程将片内数据存储器20H-24H单元压缩的BCD码转换成ASCII存放在25H开始的单元。
61.片内存储单元40H中有一个ASCII字符,试编一程序给该数的最高位加上奇校验。
62.编写一段程序,将存放在自DATA单元开始的一个4B数(高位在高地址),取补后送回原单元。
63.将片内RAM的20H单元中的十六进制数变换成ASCII存入22H、21H单元,高位存入22H单元,要求用调子程序编写。
64.编写一段程序,以实现图11-5种硬件的逻辑运算功能。
图11-5 逻辑运算图
65.用位操作指令实现下面的逻辑方程。
P1.2=(ACC.3XP1.4X/ACC.5)+(/B.4X/P1.5)
66.利用89C51的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意)。画出电路,编出汇编语言程序。
67.利用89C51的P1口控制8个发光二极管LED。相邻的4个LED位一组,使2组每隔0.5s交替发亮一次,周而复始。画出电路,编写程序(设延时0.5s子程序为D05,已存在)。
68.设计一个4位数码显示电路,并用汇编语言编程使“8”从右到左显示1遍。
69.编制一个循环闪烁灯的程序。有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。画出电路图。
70.设计89C51和ADC0809的接口,采集2通道10个数据,存入内部RAM的50H-59H单元,画出电路图,编出
(1)延时方式;
(2)查询方式;
(3)中断方式中的一种程序。