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