单片机程序题库.docx

上传人:b****1 文档编号:314430 上传时间:2022-10-08 格式:DOCX 页数:11 大小:46.01KB
下载 相关 举报
单片机程序题库.docx_第1页
第1页 / 共11页
单片机程序题库.docx_第2页
第2页 / 共11页
单片机程序题库.docx_第3页
第3页 / 共11页
单片机程序题库.docx_第4页
第4页 / 共11页
单片机程序题库.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

单片机程序题库.docx

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

单片机程序题库.docx

单片机程序题库

单片机程序题库

1.实现片外数据存储器数据传送(2000H)-->(2100H)

MOVDPTR,#2000H

MOVXA,@DPTR

MOVDPTR,#2100H

MOVX@DPTR,A

2.查表法求Y=X2。

设X(0≤X≤15)在片内RAM的20H

单元中,要求查表求Y,存入片内RAM21H单元。

1)ORG1000H

SQU:

MOVDPTR,#3000H;确定表首地址(基地址)

MOVA,20H;取X(变量:

偏移量)

MOVCA,@A+DPTR;查表求Y=X2

MOV21H,A;保存Y(结果)

RET;子程序结束

…;其它程序段

ORG3000H;常数表格首地址

TAB:

DB00,01,04,09,…,225;平方表

END

2)ORG1000H;程序起始地址

SQU:

MOVA,20H;取X

ADDA,#3;修正偏移量

MOVCA,@A+PC;查表求Y=X2(PC=1005H)

MOV21H,A;存结果

RET;子程序结束

TAB:

DB00,01,04…;平方表

DB09,…,225

3.分析下面程序

MOVR0,#0C8H;(R0)=200

CLRP1.7;P1.7为低电平

LOOP:

CPLP1.7;P1.7变反(1µs)

NOP;(1µs)

NOP;(1µs)

DJNZR0,LOOP;(R0)≠0则转(2µs)

4.设计一个延时10ms的延时子程序,已知单片机使用的晶振为6MHZ。

机器周期数ORG0020H

1MOVR0,#0AH;外循环10次

1DL2:

MOVR1,#MT;内循环MT次

1DL1:

NOP

1NOP;空操作指令

2DJNZR1,DL1

2DJNZR0,DL2

RET

内循环DL1到指令DJNZR1,DL1的计算:

(1+1+2)ⅹ2μsⅹMT=1000μs

MT=125=7DH总的延时时间:

{1+[1+(1+1+2)ⅹ125+2]ⅹ10}ⅹ2μs=10.062ms

5.试计算延时程序的执行时间

DELAY:

MOVR6,#64H(=100)1

I1:

MOVR7,#0FFH(=255)1

I2:

DJNZR7,I22

DJNZR6,I12

RET2

延时时间计算:

(设时钟fOSC=12MHz)T=1us

t=(1×1+1×100+2×100×255+2×100+2×1)×T=51.303ms

6.DELAY:

MOVR6,#1001

D1:

MOVR7,#101

D2:

NOP1

DJNZR7,D22t=6.606ms

DJNZR6,D12

RET2

计算延时程序的执行时间(设时钟fOSC=6MHz,T=2us)。

7.十六进制数转换为ASCII码:

HASC:

CJNEA,#0AH,N

N:

JNCN1(C=0跳N1)

ADDA,#30H

SJMPSE

N1:

ADDA,#37H

SE:

RET

8.设从片内RAM30H单元和40H单元有两个16字节数,把它们相加,结果放于30H单元开始的位置处(设结果不溢出)。

ORG1000H

MOVR0,#30H

MOVR1,#40H

MOVR2,#16

CLRC

LOOP:

MOVA,@R0

ADDCA,@R1

MOV@R0,A

INCR0

INCR1

DJNZR2,LOOP

END

9.按下面公式编写程序,x为无符号数,存在20h单元y存放在21h单元

 

ORG0030H

MOVA,20H

CJNEA,#21H,LOOP1

LOOP1:

JCNEXT1

CJNEA,#40H,LOOP2

LOOP2:

JNCNEXT2

MOVB,#2

MULAB

AJMPNEXT2

NEXT1:

CPLA

NEXT2:

MOV21H,A

END

从内部RAM22h单元开始存有一个无符号数数据块,长度n存于21h中。

求出数据块中的最小数,存于20h中。

ORG0030H

MOVR0,#22H;数据块起始地址

MOVR1,21H;数据个数n

MOV20H,#0FFH;最大数

LOOP:

MOVA,@R0;取新数

INCR0;为取下一个新数作准备

CJNEA,20H,LOOP1;与原最大数比较

LOOP1:

JNCNEXT;大,原最小数保留

MOV20H,A;小,改变最小数

NEXT:

DJNZR1,LOOP;循环

END

10.ASCII码转换为十六进制数:

AHEX:

CLRC

SUBBA,#30H

CJNEA,#0AH,N

N:

JCN1

SJMPAE

N1:

SUBBA,#11H

CJNEA,#06H,N2

N2:

JNCERR

ADDA,#0AH

SJMPAE

ERR:

MOVA,#0FFH

AE:

RET

8位二进制转换成BCD码。

(用十进制表达的二进制码)

BINBCD1:

MOVB,#100

DIVAB

MOV@R0,A

INCR0

MOVA,#10

XCHA,B;(A)=原(B),(B)=10

DIVAB

MOV@R0,A

INCR0

XCHAB

MOV@R0,A

RET

11.要求每次按动按键,使外接发光二极管LED改变一次亮灭状态。

解:

INT0输入按键信号,P1.0输出改变LED状态。

1、跳变触发:

每次跳变引起一次中断请求。

ORG0000H;复位入口AJMPMAIN

ORG0003H;中断入口AJMPPINT0

ORG0100H;主程序

MAIN:

MOVSP,#40H;设栈底

SETBEA;开总允许开关

SETBEX0;开INT0中断

SETBIT0;负跳变触发中断

H:

SJMPH;执行其它任务

ORG0200H;中断服务程序

PINT0:

CPLP1.0;改变LED

RETI;返回主程序

2、电平触发:

可避免一次按键引起多次中断响应。

1)软件等待按键释放(撤消低电平);

(2)硬件清除中断信号(标志位)。

ORG0000H;复位入口

AJMPMAIN

ORG0003H;中断入口

AJMPPINT0

ORG0100H;主程序

MAIN:

MOVSP,#40H;设栈底

SETBEA;开总允许开关

SETBEX0;开INT0中断

CLRIT0;低电平触发中断

H:

SJMPH;执行其它任务

ORG0200H;中断服务程序

PINT0:

CPLP1.0;改变LED

WAIT:

JNBP3.2,WAIT;等按键释放(P3.2即INT0)

RETI;返回主程序

假设系统时钟为6MHz,编写定时器T0产生1秒定时的程序。

(1)T0工作方式的确定

定时时间较长,采用哪一种工作方式?

由各种工作方式的特性,可计算出:

方式0最长可定时16.384ms;

方式1最长可定时131.072ms;

方式2最长可定时512s。

选方式1,每隔100ms中断一次,中断10次为1s。

(2)计算计数初值

因为:

(216-X)×2×10-6=10-1

所以:

X=15536=3CB0H

因此:

TH0=3CH,TL0=B0H

(3)10次计数的实现

采用循环程序法。

(4)程序设计

ORG0000H

RESET:

LJMPMAIN;上电,转主程序入口MAIN

ORG000BH;T0的中断入口

LJMPIT0P;转T0中断处理程序IT0P

ORG1000H

MAIN:

MOVSP,#60H;设堆栈指针

MOVB,#0AH;设循环次数10次

MOVTMOD,#01H;设T0工作在方式1

MOVTL0,#0B0H;给T0设初值

MOVTH0,#3CH

SETBTR0;启动T0

SETBET0;允许T0中断

SETBEA;CPU开放中断

HERE:

SJMPHERE;等待中断

ITOP:

MOVTL0,#0B0H;T0中断子程序,重装初值

MOVTH0,#3CH;

DJNZB,LOOP

CLRTR0;1s定时时间到,停止T0工作

LOOP:

RETI

12.由P1.0输出方波信号,周期为2ms,设fosc=12MHz。

每隔1ms改变一次P1.0的输出状态。

用T0非门控方式1定时。

计算时间常数:

X=216-t/T=216-1000/1=FC18H

START:

MOVTMOD,#01H

MOVTL0,#18H

MOVTH0,#0FCH

SETBTR0

LOOP:

JBCTF0,PTF0

SJMPLOOP

PTF0:

CPLP1.0

MOVTL0,#18H

MOVTH0,#0FCH

SJMPLOOP

ORG0000H

AJMPMAIN

ORG000BH;T0定时器

AJMPPT0INT

ORG0100H

MAIN:

MOVSP,#60H

MOVTMOD,#01H

MOVTL0,#18H

MOVTH0,#0FCH

SETBEA

SETBET0

SETBTR0

HERE:

SJMPHERE

PT0INT:

CPLP1.0

MOVTL0,#18H

MOVTH0,#0FCH

RETI

13.P1.7驱动LED亮1秒灭1秒地闪烁,设时钟频率为6MHz。

本题采用硬件方式:

T0定时,定时10ms;T1计数T0的定时跳变信号P1.0的负跳变次数,计满100个跳变为1秒。

(查询方法)T=2µs,X=5×105个T,而最大只能65536个T,

不能满足要求,必须借助硬件计数器或软件循环。

T0定时初值:

(方式1)t=10ms,X=5000D=1388H,C=(1388H)补=EC78HT1计数初值:

(方式2)

START:

MOVTMOD,#61H

MOVTL1,#0CDH

MOVTH1,#0CDH

CLRP1.0

SETBTR1

LOOP1:

CPLP1.7

LOOP2:

MOVTL0,#78H

MOVTH0,#0ECH

SETBTR0

LOOP3:

JBCTF0,LOOP4

SJMPLOOP3

LOOP4:

MOVTL0,#78H

MOVTH0,#0ECH

CPLP1.0

JBCTF1,LOOP1

SJMPLOOP2

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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