单片机程序.docx
- 文档编号:25127631
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:23
- 大小:68.75KB
单片机程序.docx
《单片机程序.docx》由会员分享,可在线阅读,更多相关《单片机程序.docx(23页珍藏版)》请在冰豆网上搜索。
单片机程序
1、编程将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去。
解:
STRAT:
MOVR0,#30H
MOVR7,#0FH
MOVDPTR,#3000H
LOOP:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR7,LOOP
RET
2、编程将片内RAM40H单元中的内容送到片外RAM2000H单元中。
解:
ORG0100H
MOVA,40H
MOVDPTR,#2000H
MOVX@DPTR,A
END
3、将内部RAM40H开始的10个字节的数搬到外部RAM2000H处
MOVDPTR,#2000H
MOVR0,#40H
MOVR2,#0AH
LOOP:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR2,LOOP
SJMP$
END
4、将存于外部RAM8000H开始的50H数据传送0010H的区域,请编程实现。
MOVDPTR,#8000H
MOVR0,#10H
MOVR2,#50H
LOOP:
MOVXA,@DPTR;取数
MOVX@R0,A;存数
1NCDPTR
1NCR0
DJNZR2,LOOP
RET
5.片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中.
解START:
MOVR0,#40H;数据块首地址送R0
MOVR7,#09H;比较次数送R7
MOVA,@R0;取数送A
LOOP:
INCR0
MOV30H,@R0;取数送30H
CJNEA,30H,NEHT;(A)与(30H)相比
NEXT:
JNCBIE1(A)≥(30H)转BIR1
MOVA,30H;(A)<(30H),大数送A
BIE1:
DJNZR7,LOOP;比较次数减1,不为0,继续比较
MOV50H,A;比较结束,大数送50H
RET
6.片内RAM30H开始的单元中有10B的二进制数,请编程求它们之和(和<256).
解 ADDIO:
MOVR0,30H
MOVR7,#9
MOVA,@R0
LOOP:
INCR0
ADDA,@R0
DJNZR7,LOOP
MOV30H,A
RET
7、设从内存BLOCK单元开始存放一无符号数的数据块,其长度为LEN。
试找出其最小数,并存入MIN单元。
COMP:
MOVA,#0FFH;置比较的初始值
MOVR2,#LEN;置数据块长度
MOVR1,#BLOCK;置地址指针
LOOP:
CLRC
SUBBA,@R1;比较
JCNEXT;若小,则恢复原值
MOVA,@R1
SJMPNEXT1
NEXT:
ADDA,@R1
NEXT1:
INCR1;若大,则取下个数比较
DJNZ:
DJNZR2,LOOP
MOVMN,A;存最小数
SJMP$
8、比较存放在ONE,TWO,TRE三个单元的无符号数,并将小数存放在20H单元中。
MOVA,ONE
CJNEA,TWO,RR
RR:
JCSS
MOVA,TWO
CJNEA,TRE,TT
TT:
JCWW
SJMPUU
SS:
CJNEA,TRE,VV
VV:
JCWW
UU:
MOVA,TRE
WW:
MOV20H,A
9、设在单片机内部RAM中从STR单元开始存放有一数据块,该数据块以#00H结束,试统计其中为#0FFH的单元个数并存入NUM单元。
COUNT:
CLRA;清计数单元
MOVR0,#STR;置地址指针
LOOP:
CJNE#0FFH,LOOP1;数据为#0FFH则计数单元加1
INCA
LOOP1:
INCR0
CJNE@R0,#000H,LOOP;数据块取完?
MOVNUMA;存统计结果
SJMP$
10、将片内RAM-2单元(如20H)的内容分成两段,并将它们分别存入2单元和3单元。
(高位清零)。
MOVR0,#21H
MOVA,20H
ANLA,#0FH
MOV@R0,A
INCR0
MOVA,20H
SWAPA
ANLA,#0FH
MOV@R0
11、从1加到5,最终结果存入35H,试编写程序。
解:
方法
(1)
ORG1000H
CLRA
MOVR0,#5
L2:
ADDA,R0
DJNZR0,L2
MOV35H,A
END
方法
(2)
ORG1000H
CLRA
MOVR0,#0
L1:
INCR0
ADDA,R0
CJNER0,#5,L1
MOV35H,A
END
12.从内部RAM30H单元开始,有10个单字节数据。
试编一个程序,把其中的正数、负数分别送40H和50H开始的内部RAM单元。
MOVR0,#30H
MOVR1,#40H
MOVA,#50H
MOVR7,#10
LOOP:
MOV20H,@R0
JB,FSHU
ZSHU:
MOV@R1,20H
INCR1
SJMPNEXT
FSHU:
XCHA,R1
MOV@R1,A
XCHA,R1
INCA
NEXT:
DJNZR7,LOOP
SJMP$
13、编一程序段,将字节地址30H~3FH单元的内容逐一取出减1,然后再放回原处,如果取出的内容为00H,则不要减1,仍将0放回原处。
MOVR7,#10H
MOVR1,#30H
LOOP:
CJNE@R1,#00H,NEXT
MOV@R1,#00H
SJMPNEXT1
NEXT:
DEC@R1
NEXT1:
INCR1
DJNZR7,LOOP
SJMP$
END
14、求平方子程序计算X=a^2+b^2
先建立0~9的平方表(十进制),TAB为表首地址指针。
子程序所完成的功能是用查表的方式求出平方值。
计算X=a^2+b^2时只要两次调用子程序分别求出a^2和b^2,然后相加即可。
(设X,a,b分别存于内部RAM的ONE,TWO和TRE三个单元中)。
子程序入口:
(A)=待查表的数子程序入口:
(A)=平方值
MAIN:
MOVA;ONE;调求平方子程序
ACALLSQR
MOVR1,A
MOVA,TWO
ACALLSQR
ADDA,R1;求平方和
MOVTRE,A
SJMP$
SQR:
INCA;修正查表偏移量(入口A)
MOVCA,@A+PC;查表求平方值(出口A)
RET;返回
TAB:
DB:
0,1,4,9,16;平方表
DB:
25,36,49,64,81
15、编程实现字符串长度统计:
设在单片机内RAM中从STR单元开始有一字符串《以ASCII码存放》,该字符串以$<其值为24H>结束,试统计该字符串的长度,其结果存于LON单元。
START:
CLRA;计数单元清零
MOVR0,#STR
LOOP:
CJNER0,#24H,NEXT;判断字符串是否结束
SJMPCOMP
NEXT:
INTA
INCR0
SJMPLOOP
COMP:
MOVLON,A;将长度存入LON单元
SJMP$
16、将31H、32H单元与41H、40H单元的双字节十进制无符号数相加,结果存入32H,31H,30H单元。
即(31H)(30H)+(41H)(40H)32H、31H、30H。
MOVR0,#30H
MOVR1,#40H
MOVR2,#02H
CLRC
L1:
MOVA,@R0
ADDCA,@R1
DAA
MOV@R0,A
INCR0
INCR1
DJNZR2,L1
CLRA
MOV,C
MOV@R0,A
17、编程实现逻辑运算:
Q=(U*(V+W))++Z。
设U~Z的位地址为00H~的位地址为07H。
《实际中U~Z可以是外部输入端口信号或软件设定的一些控制位
MOVC,01H
ORLC,02H
ANLC,00H
MOVF0,C;暂存U*(V+W)的值
MOVC,03H
ANLC,/04H
ORLC,F0
ORLC,/05H
MOV07H,C;保存结果
18已知一MCS—51单片机系统的片内RAM20H单元存放了一个8位无符号数7AH,片外扩展RAM的8000H存放了一个8位无符号数86H,试编程完成以上两个单元中的无符号数相加,并将和值送往片外RAM的01H、00H单元中,同时将所编写程序运行完成后的数据和状态添入下表中给出的PSW的有关位以及寄存器A、DPTR和RAM单元中。
CY
A
DPTR
片外01H
片外00H
片外8000H
0
01H
8000H
0lH
00H
86H
MOVDPTR,#8000H;加数单元地址送DPTR
MOVXA,@DPTR;取加数之一
ADDA,20H;两数相加
MOVR0,#00H;和值的低位送片外00H单元
MOVx@R0,A
INCR0
CLRA;计算和值的高位
ADDCA,#00H
MOVx@R0,A;高位送片外01H单元
RET
19.已知变量X存于VAR单元,函数值Y存于FUNC单元,按下式编程求Y值。
Y=
MOVA,VAR
CJNEA,#0,COMP
SJMPRES;x=0,Y=0
COMP:
JNCPOSI;x>0,Y=1
MOVA,#0FFH;x<0,Y=-1
SJMPRES
POSI:
MOVA,#01H
RES:
MOVFUNC,A
RET
20.已知在R2中存放一个压缩的BCD码,请将它拆成个BCD字节,结果存于SUM开始的单元(低位在前)。
MOVR0,#SUM
MOVA,R2
ANLA,#OFH
MOV@R0,A;存低字节BCD
MOVA,R2
ANLA,#0F0H
SWAPA
1NCR0
MOV@R0,A;存高字节BCD
RET
21将A中的16进制数据(0—FFH)转换为BCD码存放在30H(百位)、31H(十位)、32H(个位)
HEXBCD:
MOVB,#100
DIVAB
MOV30H,A
MOVA,B
MOVB,#10
DIVAB
MOV31H,A
MOV32H,B
RET
22、将二位压缩的BCD码转换为二进制数,入口、出口均是A。
若是非法的BCD码,则A返回值为255。
SUBP:
MOVR1,A
ANLA,#0F0H
SWAPA
CJNEA,#10,NEXT1
NEXT1:
JNCERROR
MOVB,#10
MULAB
XCHA,R1
ANLA,#0FH
CJNEA,#10,NEXT2
NEXT2:
JNCERROR
ADDA,R1
RET
ERROR:
MOVA,#255
RET
23.编制一个循环闪烁灯的程序。
有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。
画出电路图。
(20分)
MOVA,#01H;灯亮初值
SHIFT:
LCAILFLASH;调闪亮10次子程序
RRA;右移一位
SJMPSHIFT;循环
FLASH:
MOVR2,#0AH闪烁10次计数
FLASH1;MOVP1,A;点亮
LCALLDELAY;延时
MOVP1,#00H;熄灭
LCALLDELAY;延时
DJNZR2,FLASH1;循环
RET
24、用8051输出控制8个LED从LED1到LED8、再到LED1…,每次一个LED发光,并不断循环。
一个开关控制引起中断,电平触发,中断后8个LED一起闪5下,然后恢复前面的循环。
写出完整的程序。
(软件延时用循环5*126*200次控制)
ORG0000H
LJMPSTART
ORG3H
LJMPINT00
START:
SETBEA
SETBEX0
CLRIT0
MOVA,#1
AGAIN:
MOVP1,A
ACALLDELAY
RLA
SJMPAGAIN
DELAY:
MOVR1,#5
LOOP1:
MOVR2,#200
LOOP2:
MOVR3,#126
DJNZR3,$
DJNZR2,LOOP2
DJNZR1,LOOP1
RET
INT00:
PUSHACC
PUSH1
PUSH2
PUSH3
MOVR4,#5
AGAIN:
MOVP1,#0FFH
ACALLDELAY
MOVP1,#0
ACALLDELAY
DJNZR4,AGAIN
POP3
POP2
POP1
POPACC
RETI
END
25、利用80C51的P0口控制8个发光二极管LED。
相邻的4个LED为一组,使2组每隔1s交替发光一次,周而复始。
设计出硬件电路图,编写程序。
解:
(1)程序设计(设fosc=12MHz)
ORG0100H
MOVA,#0FH
ABC:
MOVP0,A
ACALLDELAY1S
SWAPA
SJMPABC
DELAY1S:
MOVR5,#04
DEL1:
MOVR6,#250
DEL2:
MOVR7,#250
DEL3:
NOP
NOP
DJNZR7,DEL3
DJNZR6,DEL2
DJNZR5,DEL1
RET
END
(2)硬件电路图如图:
二、定时器,计数器
1、若8051的晶振频率fosc为6MHz,定时器/计数器T0工作在工作方式1,要求产生10ms定时,写出定时器的方式控制字和计数初值(分别写出TH0与TL0值)。
(1)T0:
定时方式,工作在方式1。
方式字TMOD=01H
(2)fosc=6MHz,16位计数器,10ms定时,设计数初值为a,
t=12/fosc*(216-a)10*103=12/6*(216-a)
a=60536=EC78H即TH0=ECHTL0=78H
所以:
TMOD=01HTH0=ECHTL0=78H
2、将定时器/计数器做脉冲信号发生器。
编程利用定时器T0定时,在端输出周期性方波信号,方波周期为2ms,已知晶振频率为6MHz。
解:
1)T0工作模式的设定:
选择模式1(16位方式)(最大定时131ms)
2)定时初值的设定:
X=216-(1ms×6×106/12)=65036=FE0CH,即:
TH0应装0FEH,TL0应装0CH。
ORG0000H
LJMPMAIN
ORG000BH
LJMPG
ORG0500H
MAIN:
MOVTMOD,#01H
MOVTL0,#0CH
MOVTH0,#0FEH
SETBEA
SETBET0
SETBTR0
HERE:
SJMPHERE
G:
MOVTL0,#0CH
MOVTH0,#0FEH
CPL
RETI
END
3、应用单片机内部定时器T0工作在方式1下,从输出周期为1ms的方波脉冲信号,已知单片机的晶振频率为6MHZ。
(1)计算时间常数X,应用公式X=216-t(f/12)
(2)写出程序清单
解:
解:
X=216-t(F/12)
=216-1*10-3*6*106/12
=OFEOCH
ORG3000H
START:
MOVTMOD,#01H
MOVTL0,#OCH
MOVTHO,#OFEH
SETBTR0
LOOP:
JBCTFO,DONE
SJMPLOOP
DONE:
MOVTL0,#OCH
MOVTHO,#OFEH
CPL
SJMPLOOP
4、应用单片机内部定时器T0工作在方式1下,从输出周期为2ms的方波脉冲信号,已知单片机的晶振频率为6MHZ。
(1)计算时间常数X,应用公式X=216-t(f/12)
(2)写出程序清单
解:
X=216-t(F/12)
=216-1*10-3*6*106/12
=OFEOCH
ORG3000H
START:
MOVTMOD,#01H
MOVTL0,#OCH
MOVTHO,#OFEH
SETBTR0
LOOP:
JBCTFO,DONE
SJMPLOOP
DONE:
MOVTL0,#OCH
MOVTHO,#OFEH
CPL
SJMPLOOP
5、已知晶振频率为6MHz,在引脚上输出周期为500微秒的等宽矩形波,若采用T1中断,工作方式2,试写出中断初始化程序
MOVTMOD,#20H
MOVTL1,#06H
MOVTH1,#06H
SETBEA
SETBET1
SETBTR1
SJMP$
6、按以下要求编写8051单片机定时器的初始化程序:
(1)T0作为定时,定时时间为10ms.
(2)T1作为计数,记满1000溢出。
解
(1)R7,#10H
MOVR1,#30H
LOOP:
CJNE@R1,#00H,NEXT
MOV@R1,#00H
SJMPNEXT1
NEXT:
DEC@R1
NEXT1:
INCR1
DJNZR7,LOOP
SJMP$
END
1T0的工作方式0时:
tmax=213×=213×2us=
定时10ms可达要求,则X=213-=213-=3192=C78H=6318H
②T0工作在方式1时:
tmax=216×=216×2us=
定时10ms也可达要求,则X=216-=EC78H
③T0工作在方式2或3时:
tmax=28×=28×2us=512us
定时500us,循环20次,X=28-=06H
(2)方式0:
213-100=8092=1F9CH=FC1CH
X=M-计数值方式1:
216-100=FF9CH
方式2或3:
28-100=9CH
DELAY:
MOVTMOD#00H(#01H/#10H/#11H)
(MOVR3,#14H)
MOVTH0,#63H
MOVTL0,#18H
SETBTR0
LP1:
JBCTF0,CLOSE
SJMPLP1
CLOSE:
SJMP$
RET
三、绘图
阅读下列硬件图,补齐连接线(5分),并回答问题(各5分):
1、 ALE、PSEN、WR、RD的功能
ALE作地址锁存的选通信号,以实现低八位地址的锁存,PSEN信号作扩展程序存储器的读选通信号
WR、RD作为扩展数据存储器和I/O端口的读写选通信号。
2、 图中各芯片的功能
74LS373:
地址锁存器,用来锁存P0口发送的地址低8位
2764:
容量为8KB的程序存储器(EPROM)用来存储程序
6264:
容量为8KB的数据存储器(RAM)用来存储数据
8031:
不含程序存储器的8位单片机芯片,是不带I/O设备的微型计算机。
3、2764、6264的地址范围(取”0”)
2764:
8000H~9FFFH6264:
4000H~5FFFH
1.已知如图,8155的PA口用于输出,PB口用于输入,PC口用于输出,请:
(1)写出8155的各I/O口的口地址和存储器的地址范围。
2.已知如图并给出下列程序,请在读图并理解程序后回答下列问题:
(1)程序功能为_______。
(2)ADC0809的口地址为_______。
(3)EOC的作用是_______。
(4)程序运行结果存于_______。
ADC:
MOVDPTR,#7FFOH
MOVR0,#0A0H
MOVR2,#8
MOVA,#0
LOOP:
MOVX@DPTR,A
JB,$
MOVXA,@DPTR
MOVX@R0,A
1NCDPTR
1NCR0
DJNZR2,LOOP
AJMPADC
(1)巡回采集8个通道的数据
(2)ADC0809口地址为7FF0H~7FF7H(或7FF8~7FFFH)
(3)EOC为A/D转换结束信号,用来引起中断或查询,以便读取A/D的转换结果。
(4)结果存入外部RAM的A0H~A7H。
3、在两个8051间用模式2进行串行通信,A机并行采集外部开关的输入,然后串行传输给B机;B机接收后并行输出控制LED发光。
画出连接示意图,写出完整的程序。
(共15分)
A机程序ORG0000H
AJMPSTART
ORG4100H
START:
MOVP1,#0FFH
MOVSCON,#80H
AGAIN1:
MOVSBUF,P1
JNBTI,$
CLRTI
SJMPAGAIN1
END
B机程序ORG0000H
AJMPSTART
ORG4100H
START:
MOVSCON,#90H
AGAIN1:
JNBRI,$
MOVP1,SBUF
CLRRI
SJMPAGAIN1
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 程序