当前位置:首页 > (完整版)单片机原理及应用——基于Proteus和Keil_C 林立_张俊亮毕业论文
CONT: CJNE @R0,#0AAH,NEXT;比较查找值与指针所指单元的值,不相等转移
MOV
A,#0FFH
;相等,则准备好要赋的标志值0FFH ;转存到保存结果处 ;修改地址指针
SJMP DOWN
R0
NEXT: INC
CJNE R0,#42H,CONT ;若指针未越过终点,则继续 MOV
A,#00H 50H,A
;查找失败,则将00H存入结果标志单元 ;将比较结果标志存入50H单元 ;暂停
DOWN: MOV
SJMP $ END
程序2: 节
MOV
R0,#32H
;设地址指针初值
;比较查找值与指针所指单元的
MOV
R7,#16
;计数器赋初值,从20H到30H共16个字
CONT: CJNE @R0,#0AAH,NEXT 值,不相等转移
MOV
A,#0FFH
;相等,则准备好要赋的标志值0FFH ;转存到保存结果处 ;修改地址指针
;计数器减1,非0,则继续
;查找失败,则将00H存入结果标志单元 ;将比较结果标志存入50H单元 ;暂停
SJMP DOWN
R0
NEXT: INC
DJNZ R7,CONT MOV
A,#00H 50H,A
DOWN: MOV
SJMP $ END
5.查找20H~4FH单元中出现00H的次数,并将查找结果存入50H单元。
解:从20H到4FH共48个字节
MOV MOV
R7,#48 R0,#20H
;字节计数器赋初值 ;设地址指针初值
CONT: CJNE @R0,#00H,NEXT ;比较查找值与指针所指单元的值,不相等转移
INC
R6 R0
;相等,0的个数计数器加1 ;修改地址指针
;计数器减1,非0,则继续 ;保存O的个数计数值到50H单元 ;暂停
NEXT: INC
DJNZ R7,CONT MOV
50H,R6
SJMP $ END
END
6.已知A=83H,R0=17H,(17H)=34H,写出下列程序段执行之后的A中的内容。 ANL ORL XRL CPL
END
A,#17H 17H,A A
答:
ANL ORL
A,#17H 17H,A
;A=03H
;(17H)=0011 0100 ∨ 0000 0011=0011
0111 XRL CPL
;A= 0000 0011 ∨ 0011 0111 =0011 0100
;A=1100 1011
A
7.已知单片机的晶振频率为12MHz,分别设计延时为0.1s、1s的子程序。
答:已知单片机的晶振频率为12MHz,则机器周期为1us,延时子程序是通过执行指令序列中机器周期数来达到,如果要0.1s,即100ms,也就是100000us,所以需要机器周期数达到100000。要延时达到1S,可通过对延时为0.1秒的子程序调用10次来实现。 DELAY100MS: D1: D2: 100ms DELAY1S: LOOP:
MOV
R7,#10
;计数10次
1 99795+2 次则继续
MOV R6,#200 MOV R7,#250
NOP
;1个机器周期 ;1个机器周期
;1个机器周期
DJNZ R7,D2 DJNZ R6,D1 RET
;2个机器周期,3*251=753
;2个机器周期,(1+753+2)*132=99792 ;2个机器周期,1+99792+2=99795,约
ACALL DELAY100MS ;延时100ms子程序 DJNZ R7,LOOP
;未达到
10
10*(2+99795+2)
RET
;返回2+10*(2+99795+2)=997992
8.内部RAM从20H单元开始处有一数据块,以ODH为结束标志,试统计该数据块的长度,将该数据块送到外部数据存储器7E01H开始的单元,并将长度存入7E00H单元。
解:从20H的指针用R0,从外部RAM7E01开始的指针用DPTR,计数器用R7
MOV MOV MOV
R7,#0 R0,#20H
;字节计数器赋初值 ;设片内RAM地址指针初值
DPTR,#7E01H ;设片外RAM地址指针初值
;取片内RAM中的一个字节
CONT: MOV
MOVX @DPTR,A INC INC INC
R7 R0
;存入片外RAM指针所指单元 ;长度计数器加1 ;片内RAM地址指针加1 ;片外RAM地址指针加1
DPTR
CJNE A,#0DH,CONT ;未达到结束标志 MOV
A,R7
;取块计数长度值 ;保存 ;暂停
MOVX @DPTR,A SJMP $ END
9.内部RAM从DATA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入SUM和SUM+1单元。
解:R7计数,R6保存累加和高8位,R0用作地址指针
ORG
0000H
LJMP MAIN ORG EQU
100H 30H 40H R7,#10
;字节计数器赋初值 ;设片内RAM地址指针初值 ;累加器清0 ;累加结果的高8位
SUM
DATAA EQU MAIN: MOV
MOV CLR MOV
R0,#DATAA A
R6,A A NEXT R6
CONT: ADD
DA JNC INC
;加RAM中的一个字节到ACC
;若无进位则不用管高8位 ;有进位,高8位加1
共分享92篇相关文档