单片机上机试题.docx

上传人:b****8 文档编号:9979182 上传时间:2023-02-07 格式:DOCX 页数:52 大小:63.60KB
下载 相关 举报
单片机上机试题.docx_第1页
第1页 / 共52页
单片机上机试题.docx_第2页
第2页 / 共52页
单片机上机试题.docx_第3页
第3页 / 共52页
单片机上机试题.docx_第4页
第4页 / 共52页
单片机上机试题.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

单片机上机试题.docx

《单片机上机试题.docx》由会员分享,可在线阅读,更多相关《单片机上机试题.docx(52页珍藏版)》请在冰豆网上搜索。

单片机上机试题.docx

单片机上机试题

1.片内RAM40H、41H单元中分别存放着两个8位二进数,要求取出两个单元中的低半字节合并成一个字节存放在42H。

(40H的低半字节在高位上)

常用直接寻址方式:

ORG0000H

START:

MOVA,40H

ANLA,#0FH

SWAPA

MOV42H,A

MOVA,41H

ANLA,#0FH

ORL42H,A

SJMP$

END

采用间址:

ORG0000H

START:

MOVR1,#40H

MOVA,@R1

ANLA,#0FH

SWAPA

INCR1

XCHA,@R1

ANLA,#0FH

ORLA,@R1

INCR1

MOV@R1,A

SJMP$

END

使用变量:

•BUFEQU40H

•ORG0000H

•MOVR1,#BUF

•MOVA,@R1

•ANLA,#0FH

•SWAPA

•INCR1

•XCHA,@R1

•ANLA,#0FH

•ORLA,@R1

•INCR1

•MOV@R1,A

•SJMP$

•END

2.编制程序使y按下式赋值:

VAREQU30H

FUNCEQU31H

START:

MOVA,VAR

JZCOMP

JNBACC.7,POSI

MOVA,#0FFH

SJMPCOMP

POSI:

MOVA,#01H

COMP:

MOVFUNC,A

SJMP$

END

3.求无符号数累加和。

•片内RAM从60H开始的连续8个单元数据之和,放在R3R4中

ORG0000H

LJMPADD1

ORG0100H

ADD1:

MOVR3,#00H

MOVR4,#00H

MOVR2,#8

MOVR0,#60H

LOOP:

MOVA,R4

ADDA,@R0

MOVR4,A

CLRA

ADDCA,R3

MOVR3,A

INCR0

DJNZR2,LOOP

SJMP$

END

4已知数据0~9的平方,设变量x的值在工作寄存器R0中,查表后求x2的值放回累加器,试编制程序。

ORG0000H

MOVA,R0

MOVDPTR,#TABLE

MOVCA,@A+DPTR

SJMP$

TABLE:

DB00H,01H,04H,09H,16H,25H,36H,49H,64H,81H

END

5.用程序实现c=a2+b2。

设a、b均小于10,a存在片内RAM31H单元中,b存在32H单元中,把c存入33H单元中。

ORG0000H

MOVSP,#60H

MOVA,31H

LCALLSQR

MOVR1,A

MOVA,32H

LCALLSQR

ADDA,R1

MOV33H,A

L:

SJMPL

;子程序

SQR:

MOVDPTR,#TAB

MOVCA,@A+DPTR

RET

TAB:

DB0,1,4,9,16,25,36,49,64,81

END

6.P1.0~P1.3为输出口,P3.0~P3.3为输入口,使LED灯显示开关的状态。

ORG0000H

L1:

MOVC,P3.0

MOVP1.0,C

MOVC,P3.1

MOVP1.1,C

MOVC,P3.2

MOVP1.2,C

MOVC,P3.3

MOVP1.3,C

SJMPL1

END

7.使用外部中断0,以P1口的8个LED灯显示外部中断次数。

每中断一次,LED指示灯显示按照二进制加1。

同时,采用P3.4~P3.7控制4个LED灯进行“跑马灯”循环显示,来模拟CPU执行主程序。

ORG0000H

LJMPMAIN

ORG0003H;中断入口

LJMPINTN0

ORG0030H

MAIN:

MOV30H,#00H;计中断次数,开始清零

SETBEX0;允许INT0中断

SETBIT0;边沿触发方式

SETBEA;开中断

MOVP1,#0FFH;P1口指示灯初始状态

;----------模拟主程序-------------------------

LOOP1:

MOVA,#0EFH

LOOP:

MOVP3,A

LCALLDELAY;延时0.25S

RLA

JBACC.0,LOOP

SJMPLOOP1

;-------中断服务程序---------------------

INTN0:

PUSHACC;保护现场

INC30H;中断次数加1

MOVA,30H

CPLA

MOVP1,A;点亮指示灯

POPACC;恢复现场

RETI;中断返回

;-------------------------------------------------------------

DELAY:

MOVR5,#04H;延时子程序

DL1:

MOVR6,#0

DL2:

MOVR7,#0

DJNZR7,$

DJNZR6,DL2

DJNZR5,DL1

RET

•8.P1口接有8个发光二极管,编程使8个指示灯轮流点亮,每个灯亮0.25s,单片机晶振为12MHz。

•分析:

fosc=12MHz,1M=1μs

•16位定时器最大定时时间:

•t=(216-初值)×机器周期

•=(65536-0)×1μs=65.5ms

•0.25s=5×50ms

•定时50ms初值:

•50×103=65536-初值;

•初值=15536=3CB0H

ORG0000H

AJMPMAIN

ORG000BH;中断入口

AJMPINTT0

ORG0030H;主程序

MAIN:

MOV31H,#0FEH

MOVP1,31H;置第一个LED亮

MOVTMOD,#01H;T0工作于定时方式1

MOVTH0,#3CH

MOVTL0,#0B0H;定时50ms

SETBTR0;启动T1工作

SETBET0;允许T1中断

SETBEA

MOV30H,#00H;软件计时单元

WAIT:

SJMPWAIT;等待中断

INTT0:

MOVTH0,#3CH;中断服务程序

MOVTL0,#0B0H;重装计数初值

INC30H;计时单元加1

MOVA,30H

CJNEA,#05H,L1;0.25S到?

MOV30H,#00H;计时单元清0

MOVA,31H

RLA;左移一位

MOV31H,A

MOVP1,A;下一个发光二极管亮

L1:

RETI;中断返回

•9.P1口接有8个发光二极管,使用T1作为计数器,计外部脉冲的个数,每计3个脉冲产生中断,利用LED指示灯显示中断的次数。

ORG0000H

AJMPMAIN

ORG001BH;T1中断入口

AJMPINTT1

ORG0030H;主程序

MAIN:

MOVTMOD,#60H;T1工作于计数方式2

MOVTH1,#253;T1计数初值(256-3)

MOVTL1,#253

SETBTR1;启动T1工作

SETBET1;允许T1中断

SETBEA;开中断

MOV30H,#00H;中断次数计数单元清零

WAIT:

SJMPWAIT;等待中断

;-------------------------------;中断服务程序

INTT1:

INC30H;次数单元加1

MOVA,30H

CPLA

MOVP1,A

RETI;中断返回

10.方式0数据发送的设计

查询方式:

ORG0000H

LJMPMAIN

ORG0030H

MAIN:

MOVSCON,#00H;串口方式0

MOVSBUF,#0fH;发送数据

L1:

JNBTI,L1;等待串口方式完毕

CLRTI;清发送中断标志

SJMP$

END

采用中断方式

ORG0000H

LJMPMAIN

ORG0023H;串口中断向量入口

LJMPUARTINT

ORG0030H

MAIN:

MOVSP,#60H

MOVSCON,#00H;串口方式0

SETBEA;开中断

SETBES;允许串口中断

MOVSBUF,#0f0H;发送数据

SJMP$

UARTINT:

CLRTI;中断服务程序

RETI

END

11.让P1口灯轮流亮起来

•ORG0000H

•LJMPMAIN

•ORG0030H

MAIN:

MOVA,#0FEH;初始值

MOVSCON,#00H;串口方式0

•L1:

MOVSBUF,A;发送数据

•JNBTI,$;发送完毕?

•CLRTI

•LCALLDLEAY;延时0.3S

•RLA;左移1位

•JBACC.7,L1;8位循环完毕?

•L2:

MOVSBUF,A;发送数据

•JNBTI,$

•CLRTI

•LCALLDLEAY;延时

•RRA;右移1位

•JBACC.0,L2;8位循环完毕?

•SJMPL1;重新开始

•DLEAY:

MOVR7,#03H

DL1:

MOVR6,#0

DL2:

MOVR5,#0

DJNZR5,$

DJNZR6,DL2

DJNZR7,DL1

RET

•12.在某控制系统中有甲、乙两个单片机,甲单片机首先将P1口上拨动开关状态发送给乙单片机。

乙单片机将接收的数据输出至P1,点亮相应端口的LED。

设串口波特率采用9600(实验台fosc=11.0592MHz),电路如图所示:

•方式1的波特率:

•B=T1的溢出率×2SMOD/32

=2SMOD/32×fosc/(12×(256-TH1))

•取SMOD=0则:

9600=11.0592×106/((12×(256-TH1))×32)

•TH1=253,串口禁止中断。

•定时器T1工作于方式2(8位自动重装初值),禁止中断。

ORG0000H

MOVTMOD,#20H;T1方式2

MOVTH1,#253;初值253,B=9600

MOVTL1,#253

MOVSCON,#40H;串口方式1

MOVPCON,#00H;SMOD=0

SETBTR1;启动T1

LL:

MOVP1,#0FFH

MOVSBUF,P1;发送数据

JNBTI,$

CLRTI

SJMPLL

END

ORG0000H

MOVTMOD,#20H;T1方式2

MOVTH1,#253;初值253,B=9600

MOVTL1,#253

MOVSCON,#40H;串口方式1

MOVPCON,#00H;SMOD=0

SETBTR1;启动T1

SETBREN;允许串口接收

LL:

MOVP1,SBUF;接收数据

JNBRI,$

CLRRI

SJMPLL

END

13.P1口控制LED进行倒计时显示。

ORG0000H

LJMP0030H

ORG000BH

LJMPINTT0

ORG0030H

MOVTMOD,#01H

MOVTH0,#3CH

MOVTL0,#0B0H;50ms

SETBTR0

SETBET0

SETBEA

MOV30H,#00;计时单元清零

MOV31H,#09H;初值

MOVDPTR,#TAB

MOVA,31H

MOVCA,@A+DPTR

MOVP1,A;显示“9”

SJMP$

;---------

INTT0:

MOVTH0,#3CH

MOVTL0,#0B0H

INC30H

MOVA,30H

CJNEA,#20,L2;1S到?

MOV30H,#0;计时单元清零

DEC30H;倒计时单元减1

MOVA,30H

CJNEA,#0FFH,L1;9秒完成?

CLRTR0

SJMPL2

L1:

MOVDPTR,#TAB

MOVCA,@A+DPTR;转换成七段码

MOVP1,A

L2:

RETI

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H

DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH;共阳极7段码表

14.在LED显示器上显示“12345678”

使用P1口作段口、P3口作位口

;---------------------------------------------

;74LS138:

C-->P27,B-->P26,A-->P25,Y7-->8255CS,A1A0-->A1A0

;---------------------------------------------

ORG0000H

LJMP0030H

ORG0030H

MOVR0,#30H;显示缓冲器首址

MOVA,#01

MOVR7,#08;8个LED

CHU:

MOV@R0,A

INCA;送入12345678

INCR0

DJNZR7,CHU

;-------------------

MOVDPTR,#7FFFH;8255初始化

MOVA,#10000000H;控制字

MOVX@DPTR,A

;-------------------

STAR:

LCALLDISP

AJMPSTAR

;-------------------------

DISP:

MOVR0,#30H;显示缓冲器首址

MOVR3,#01H;位码

MOVR7,#08H;8个LED

DIR1:

MOVA,@R0;取显示数据

MOVDPTR,#TAB;7段码表

MOVCA,@A+DPTR;查表求得7段码

MOVDPTR,#7FFCH

MOVX@DPTR,A;7段码送段口

MOVA,R3;位码

INCDPTR

MOVX@DPTR,A;位码送位口

LCALLDL1;延时1ms

RLA;位码左移

MOVR3,A

INCR0;指向下一位

DJNZR7,DIR1;8位显示完毕?

MOVDPTR,#7FFCH;段口

MOVA,#00H;暗码

MOVX@DPTR,A;关显示

RET

;-----------------------

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H

DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH;共阳极7段码表

;------------------------

DL1:

MOVR6,#02H;1ms延时

DL11:

MOVR5,#248

DJNZR5,$

DJNZR6,DL11

RET

;------------------------

•15YE_JING.ASM

;-----------------------------------------------------------------------

;E=P10RW=P11RS=P12I/O操作

;-----------------------------------------------------------------------

COMEQU27H;命令寄存器单元

TIMEEQU30H;延时单元

;-------------------------------------

HANG1EQU80H;液晶第一行

HANG2EQU90H;液晶第二行

HANG3EQU88H;液晶第三行

HANG4EQU98H;液晶第四行

;------------------------------------

EEQUP1.0

RWEQUP1.1

RSEQUP1.2

;------------------------------------

ORG0000H

AJMP0030H

ORG0030H

LCALLINI;初始化

;---------------------------

MAIN1:

MOVCOM,#HANG1;第1行

MOVDPTR,#WEL_1

LCALLW_LINE

MOVCOM,#HANG2;第2行

MOVDPTR,#WEL_2

LCALLW_LINE

MOVCOM,#HANG3;第3行

MOVDPTR,#WEL_3

LCALLW_LINE

MOVCOM,#HANG4;第4行

MOVDPTR,#WEL_4

LCALLW_LINE

;--------------------------

STAR:

LJMPSTAR

;----------------------------

W_LINE:

MOVA,COM

LCALLSEND_I;写行

MOVR2,#16;16个

W_L1:

MOVA,#00H

MOVCA,@A+DPTR;取数据

LCALLSEND_D

INCDPTR

DJNZR2,W_L1

RET

;-----------------------------------------------------

INI:

MOVA,#33H;基本指令,8bit模式,基本指令

LCALLSEND_I

LCALLDELAY

MOVA,#0cH;显示开,游标关,反白关

LCALLSEND_I

LCALLDELAY

MOVA,#01H;清除显示

LCALLSEND_I

LCALLDELAY

MOVA,#06H;进入设定点,游标右移,画面不移动

LCALLSEND_I

LCALLDELAY

RET

;------------------------

DELAY:

MOVR7,#6;延时3ms

D2:

MOVR6,#248

DJNZR6,$

DJNZR7,D2

RET

;----------------------------

WEL_1:

DB'山东理工大学'

WEL_2:

DB'电气电子工程学院'

WEL_3:

DB'单片机互动教学室'

WEL_4:

DB'DTS-A教学平台'

;-----------------------------

;发送数据子程序

;-----------------------------

SEND_D:

LCALLCHK_BUSY;检测模块内部工作状态

SETBRS;RS=1选择数据寄存器

CLRRW;RW=0写状态

MOVP0,A;送数据到数据口

SETBE

NOP

NOP

CLRE

RET

;----------------------

;发送指令子程序

;----------------------

SEND_I:

LCALLCHK_BUSY;检测模块内部工作状态

CLRRS;RS=0选择指令寄存器

CLRRW;RW=0写状态

MOVP0,A;送数据到数据口

SETBE

NOP

NOP

CLRE

RET

;----------------------

;测忙碌子程序

;----------------------

CHK_BUSY:

MOVP0,#0FFH

CLRRS;RS=0选择指令寄存器

SETBRW;RW=1读状态

SETBE

JBP0.7,$;判别BF位

CLRE

RET

;--------------------

16.8255做显示器接口

1、设计8255的译码电路;

•2、确定8255的端口地址;

•3、在LED显示器上显示“12345678”

;---------------------------------------------

;74LS138:

C-->P27,B-->P26,A-->P25,Y7-->8255CS,A1A0-->A1A0

;---------------------------------------------

ORG0000H

LJMP0030H

ORG0030H

MOVR0,#30H;显示缓冲器首址

MOVA,#01

MOVR7,#08;8个LED

CHU:

MOV@R0,A

INCA;送入12345678

INCR0

DJNZR7,CHU

;-------------------

MOVDPTR,#7FFFH;8255初始化

MOVA,#10000000H;控制字

MOVX@DPTR,A

;-------------------

STAR:

LCALLDISP

AJMPSTAR

;-------------------------

DISP:

MOVR0,#30H;显示缓冲器首址

MOVR3,#01H;位码

MOVR7,#08H;8个LED

DIR1:

MOVA,@R0;取显示数据

MOVDPTR,#TAB;7段码表

MOVCA,@A+DPTR;查表求得7段码

MOVDPTR,#7FFCH

MOVX@DPTR,A;7段码送段口

MOVA,R3;位码

INCDPTR

MOVX@DPTR,A;位码送位口

LCALLDL1;延时1ms

RLA;位码左移

MOVR3,A

INCR0;指向下一位

DJNZR7,DIR1;8位显示完毕?

MOVDPTR,#7FFCH;段口

MOVA,#00H

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1