参考程序.docx

上传人:b****7 文档编号:15267389 上传时间:2023-07-03 格式:DOCX 页数:11 大小:102.44KB
下载 相关 举报
参考程序.docx_第1页
第1页 / 共11页
参考程序.docx_第2页
第2页 / 共11页
参考程序.docx_第3页
第3页 / 共11页
参考程序.docx_第4页
第4页 / 共11页
参考程序.docx_第5页
第5页 / 共11页
参考程序.docx_第6页
第6页 / 共11页
参考程序.docx_第7页
第7页 / 共11页
参考程序.docx_第8页
第8页 / 共11页
参考程序.docx_第9页
第9页 / 共11页
参考程序.docx_第10页
第10页 / 共11页
参考程序.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

参考程序.docx

《参考程序.docx》由会员分享,可在线阅读,更多相关《参考程序.docx(11页珍藏版)》请在冰点文库上搜索。

参考程序.docx

参考程序

第一次测验:

已知(A)=02H,(30H)=10H,(SP)=50H

ORG1000H

DB30H,50H,60H;程序存储器(1000H)=30H,(1001H)=50H,(1002H)=60H

MOVDPTR,#1000H;(DPTR)=1000H

MOVCA,@A+DPTR;(A)=程序存储器(02H+1000H)=60H

ANL30H,#05H;(30H)和05H相与,即10H和05H相与,结果(30H)=00H

PUSH30H;(SP)+1→(SP),(SP)=51H;

(30H)=00H进栈,即(51H)=00H

1、红色标记操作数的寻址方式依次为:

立即寻址方式、基址寄存器加变址寄存器的间接寻址方式、直接寻址方式

2、程序执行后,

(A)=60H,(SP)=51H,(51H)=00H,(30H)=00H

 

课后习题3-22:

试编写程序,查找在内部RAM的20H~40H单元中是否有0AAH这一数据。

若有,则将41H单元置为“01H”;

若未找到,则将41H单元置为“00H”。

 

START:

MOVR0,#20H

MOVR2,#21H;设置循环次数

LOOP:

MOVA,@R0

CJNEA,#0AAH,NEXT;比较不相等则转移

MOV41H,#01H

LJMPEXIT;跳转指令

NEXT:

INCR0;R0增1

DJNZR2,LOOP;R2先减1,若不为0则转移

MOV41H,#00H

EXIT:

RET

要点:

1、寄存器间接寻址

2、DJNZ指令,实现控制程序循环

 

3-23:

试编写程序,查找在内部RAM的20H~40H单元中出现“00H”这一数据的次数。

并将查找到的结果存入41H单元。

 

START:

MOV41H,#00H

MOVR0,#20H

MOVR2,#21H

LOOP:

MOVA,@R0

JNZNEXT;A不为0则转移

INC41H

NEXT:

INCR0

DJNZR2,LOOP

RET

3-11:

已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=FFH。

下述程序执行后:

POPDPH;(52H)→DPH,(SP)=51H

POPDPL;(51H)→DPL,(SP)=50H

MOVDPTR,#4000H;(DPTR)=4000H

RLA;左移(A)=04H

MOVB,A;(B)=04H

MOVCA,@A+DPTR;(A)=(程序存储器4004H)=30H

PUSHAcc;(SP)+1→SP,(SP)=51H,(51H)=30H

MOVA,B;(A)=04H

INCA;(A)=05H

MOVCA,@A+DPTR;(A)=(程序存储器4005H)=50H

PUSHAcc;(SP)+1→SP,(SP)=52H,(52H)=50H

RET;((SP))→PCH,(SP)-1→SP

;((SP))→PCL,(SP)-1→SP

ORG4000H

DB10H,80H,30H,50H,30H,50H

请问:

(A)=(),(SP)=(),(51H)=(),(52H)=(),PC=()。

 

(A)=50H,(SP)=50H,(51H)=30H,(52H)=50H,PC=5030H

外部中断程序实例1

硬件电路图如上,要求:

1、发光二极管D0开始时不亮;

2、按下S0按键,当外部中断0响应的时候,就点亮D0。

ORG0000H

LJMPMAIN;跳向主程序

ORG0003H

LJMPINT0;进入外部中断0的中断服务程序

ORG0100H

MAIN:

MOVSP,#50H;设置堆栈指针

SETBEA;CPU开中断

SETBEX0;允许外部中断0产生中断

SETBPX0;外部中断0设置为高优先级中断

SETBIT0;外部中断0设置为跳沿触发方式

MOVP1,#0FFH;P1.0高电平,发光二极管不亮

LOOP:

LJMPLOOP;循环等待

ORG1000H

INT0:

CLRP1.0;P1.0变低电平,点亮发光二极管

RETI;中断返回

END;程序结束

外部中断程序实例2:

 

硬件电路图如上,要求:

1、发光二极管D0开始时点亮;

2、每按一下S0按键,熄灭亮的二极管,点亮下一个发光二极管(顺序:

……-D0-D1-D2-D3-……D7-D0-D1……)。

3、每按一下S1按键,熄灭亮的二极管,点亮下一个发光二极管(逆序:

……-D7-D6-D5-……D1-D0-D7……)。

 

ORG0000H/*起始地址*/

LJMPMAIN/*跳转到主程序*/

ORG0003H/*外部中断0的入口地址*/

LJMPINTA/*跳转到中断服务程序INTA执行*/

ORG0013H/*外部中断1的入口地址*/

LJMPINTB/*跳转到中断服务程序INTB执行*/

ORG0100H/*主程序的起始地址*/

MAIN:

MOVA,#0FEH/*将FEH送给A*/

SETBIT0/*外部中断0跳沿触发方式*/

SETBEX0/*外部中断0开中断*/

SETBIT1/*外部中断1跳沿触发方式*/

SETBEX1/*外部中断1开中断*/

SETBEA/*CPU开中断*/

MOVP1,A/*将A送给P1*/

LOOP:

LJMPLOOP/*循环等待*/

INTA:

RLA/*A循环左移*/

MOVP1,A/*将A的数值送给P1*/

RETI/*中断返回*/

INTB:

RRA/*A循环右移*/

MOVP1,A/*将A的数值送给P1*/

RETI/*中断返回*/

定时器/计数器的编程和应用

例5.1假设时钟频率6MHz,在P1.0上输出一个周期为2ms的方波信号。

A、定时中断法

ORG0000H

RESET:

AJMPMAIN;转主程序

ORG000BH;T0中断入口

AJMPIT0P

ORG0100H

MAIN:

MOVSP,#60H;堆栈指针设置

MOVTMOD,#00H;设定T0定时模式、方式0

MOVTL0,#0CH;设置T0初值

MOVTH0,#0F0H

SETBTR0;启动定时器T0

SETBET0;允许T0溢出中断

SETBEA;CPU开中断

HERE:

AJMPHERE;等待中断

IT0P:

MOVTL0,#0CH;重装T0初值

MOVTH0,#0F0H

CPLP1.0;P1.0取反

RETI

B、查询法

MOVTMOD,#00H;置T0为方式0

MOVTL0,#0CH;T0装入初值

MOVTH0,#0F0H

SETBTR0;启动T0

LOOP:

JBCTF0,NEXT;TF0是1则转移,且将TF0清0

SJMPLOOP

NEXT:

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

MOVTH0,#0F0H

CPLP1.0;输出取反

SJMPLOOP;重复循环

例5.3

ORG0000H

RESET:

LJMPMAIN;转主程序

ORG000BH;T0中断入口

AJMPIT0P

ORG1000H

MAIN:

MOVSP,#60H

MOVB,#0AH;设循环次数

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

MOVTL0,#0B0H;设置T0初值

MOVTH0,#3CH

SETBTR0;启动定时器T0

SETBET0;允许T0溢出中断

SETBEA;CPU开中断

HERE:

SJMPHERE;等待中断

IT0P:

MOVTL0,#0B0H;重装T0初值

MOVTH0,#3CH

DJNZB,LOOP;减1不为0则转移

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

LOOP:

RETI

END

例5.4

ORG0000H

RESET:

AJMPMAIN;转主程序

ORG000BH;T0中断入口

AJMPIT0P

ORG001BH;T1中断入口

AJMPIT1P

ORG0100H

MAIN:

MOVSP,#60H

MOVTMOD,#25H;T1方式2定时,T0方式1计数

MOVTL0,#0FFH;设置T0初值

MOVTH0,#0FFH

MOVTL1,#06H;设置T1初值

MOVTH1,#06H

SETBTR0;启动定时器T0

SETBET0;允许T0溢出中断

SETBEA;CPU开中断

HERE:

AJMPHERE;等待T1溢出中断

IT0P:

CLRTR0

SETBTR1;启动T1定时

SETBET1;允许T1溢出中断

RETI

IT1P:

CPLP1.0

RETI

例5.6

ORG0000H

LJMPMAIN;转主程序

ORG000BH;T0中断入口

LJMPTL0INT;跳TL0中断服务程序

ORG001BH;T1中断入口

LJMPTH0INT;跳TH0中断服务程序

ORG0100H

MAIN:

MOVTMOD,#27H;T0方式3(TL0计数),T1方式2定时

MOVTL1,#datal;设置T1初值,作波特率发生器

MOVTH1,#datah

MOVTL0,#0FFH;设置TL0初值

MOVTH0,#9CH;设置TH0初值

SETBTR0;启动计数器TL0

SETBET0;允许TL0溢出中断

SETBEA;CPU开中断

HERE:

AJMPHERE;原地循环,等待中断

TL0INT:

MOVTL0,#0FFH;重置TL0初值

SETBTR1;启动TH0定时

SETBET1;允许TH0溢出中断

RETI

TH0INT:

MOVTH0,#9CH;重置TH0初值

CPLP1.0

RETI

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2