电子教案单片机原理与应用技术_单片机原理与应用技术

2020-02-28 教案模板 下载本文

电子教案单片机原理与应用技术由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机原理与应用技术”。

电子教案——单片机原理与应用技术

⒉ 计算机汇编

四.程序设计的基本方法 编写程序要求:

不仅要完成规定的功能任务,而且还要求:

执行速度快、占用内存少、条理清晰、阅读方便、便于移植、巧妙而实用。一般应按以下几个步骤进行:

⑴ 分析问题,确定算法或解题思路 ⑵ 画流程图 ⑶ 编写源程序 ⑷ 汇编和调试

§1-2 汇编语言程序设计举例

一.顺序程序

顺序程序是指按顺序依次执行的程序,也称为简单程序或直线程序。

顺序程序结构虽然比较简单,但也能完成一定的功能任务,是构成复杂程序的基础。

根据不同条件转向不同的处理程序,这种结构的程序称为分支程序。

80C51指令系统中的条件转移指令、比较转移指令和位转移指令,可以实现分支程序。【例】 已知16位二进制负数存放在R1R0中,试求其补码,并将结果存在R3R2中

解:二进制负数的求补方法可归结为“求反加1”,符号位不变。利用CPL指令实现求反;加1时,则应低8位先加1,高8位再加上低位的进位。注意这里不能用INC指令,因为INC指令不影响标志位。程序如下:

CONT:

MOV

A,R0;读低8位

CPL A;取反

ADD

A,#1;加1

MOV

R2,A;存低8位

MOV

A,R1;读高8位

CPL A;取反

ADDC

A,#80H;加进位及符号位

MOV

R3,A;存高8位

RET

;二.分支程序

根据不同条件转向不同的处理程序,这种结构的程序称为分支程序。

80C51指令系统中的条件转移指令、比较转移指令和位转移指令,可以实现分支程序。① S0单独按下,红灯亮,其余灯灭; ② S1单独按下,绿灯亮,其余灯灭; ③ 其余情况,黄灯亮。

解:程序如下

SGNL:ANL

P1,#11100011B;红绿黄灯灭

ORL

P1,#00000011B;置P1.0、P1.1输入态, P1.5~P1.7状态不变 SL0: JNB

P1.0,SL1

;P1.0=0,S0未按下,转判S1

JNB

P1.1,RED

;P1.0=1,S0按下;且P1.1=0,S1未按下,转红灯亮 YELW:SETB P1.4

;黄灯亮

CLR

P1.2

;红灯灭

CLR

P1.3

;绿灯灭

SJMP SL0

;转循环

SL1: JNB

P1.1,YELW

;P1.0=0,S0未按下;P1.1=0,S1未按下,转黄灯亮 GREN:SETB P1.3

;绿灯亮

CLR

P1.2

;红灯灭

CLR

P1.4

;黄灯灭

SJMP SL0

;转循环 RED: SETB P1.2

;红灯亮

CLR

P1.3

;绿灯灭

CLR

P1.4

;黄灯灭

SJMP SL0

;转循环

课堂练习题:

电路及灯亮灭要求同上述【例】题,其中

三.循环程序

循环程序一般包括以下几个部分:

⑴ 循环初值;

⑵ 循环体;

⑶ 循环修改;

⑷ 循环控制;

以上四部分可以有两种组织形式,其结构如图4-6所示.【例】 编制一个循环闪烁灯的程序。

设80C51单片机的P1口作为输出口,经驱动电路74LS240(8反相三态缓冲/驱动器)接8只发光二极管,如图4-8所示。当输出位为“1”时,发光二极管点亮,输出位为“0”时为暗。试编程实现:每个灯闪烁点亮10次,再转移到下一个灯闪烁点亮10次,循环不止。

解:程序如下:

FLASH:MOV

A,#01H;置灯亮初值 FSH0: MOV

R2,#0AH;置闪烁次数 FLOP: MOV

P1,A;点亮

LCALL DY1s;延时1s

MOV

P1,#00H;熄灭

LCALL DY1s;延时1s

DJNZ

R2,FLOP;闪烁10次

RL

A;左移一位

SJMP

FSH0;循环

RET

;【例】设Xi均为单字节数,并按顺序存放在以50H为首地址的内RAM存储单元中,数据长度(个数)N存在R2中,试编程求和S=X1+X2+‥‥+XN,并将S(双字节)存放在R3R4中,(设S<65536)。解:程序如下:

SXN: MOV

R2,#N

;置数据长度(循环次数)

MOV

R3,#00H ;和单元(高8位)清0

MOV

R4,#00H ;和单元(低8位)清0

MOV

R0,#50H ;求和数据区首址 LOOP:MOV

A,R4

;读前次低8位和

ADD

A,@R0 ;低8位累加

MOV

R4,A

;存低8位和

CLR

A;

ADDC

A,R3

;高8位加进位

MOV

R3,A

;存高8位和

INC

R0

;指向下一数据

循环修改

DJNZ

R2,LOOP ;判N个数据累加完否?

循环控制

RET

;退出循环

退出循环

【例】编写延时10ms子程序,fosc=12MHz。

解:fosc=12MHz,一个机器周期为。DY10ms:MOV R6,#20;置外循环次数 DLP1: MOV R7,#250;置内循环次数

DLP2: DJNZ R7,DLP2;2机周×250 =500机周DJNZ R6,DLP1;500机周×20= 10000机周RET

;说明:MOV Rn指令为1个机器周期;

DJNZ指令为2个机器周期;

RET指令为2个机器周期;{[(2机周×机周≈10ms 【课堂练习题】 按下列要求编写延时子程序: ⑴ 延时2ms,fosc=6MHz; ⑵ 延时5ms,fosc=12MHz; ⑶ 延时10s,fosc=12MHz;

设80C51单片机的P1口作为输出口,经驱动电路74LS240(8反相三态缓冲/驱动器)接8只发光二极管,如图4-8所示。当输出位为¡°1¡±时,发光二极管点亮,输出位为¡°0¡±时为暗。试编程实现:每个灯闪烁点亮10次,再转移到下一个灯闪烁点亮10次,循环不止。

FLASH:MOV

A,#01H;置灯亮初值 FSH0: MOV

R2,#0AH;置闪烁次数 FLOP: MOV

P1,A;点亮

LCALL DY1s;延时1s

MOV

P1,#00H;熄灭

LCALL DY1s;延时1s

DJNZ

R2,FLOP;闪烁10次

RL

A;左移一位

SJMP

FSH0;循环

RET

;

【课堂练习题】

根据图4-8电路,设计灯亮移位程序,要求8只发光二极管每次点亮一个,点亮时间为250ms,顺序是从下到上一个一个地循环点亮。设fosc=6MHz。

【例】已知P1口数据每隔10ms刷新一次,试求其1s内的平均值, 平均值存30H。解:本题需求100个数据的平均值,一般有两种方法:

一种是全部累加后再平均;

另一种是边平均边累加,现给出两种方法的程序。

AVRG1: MOV

R2,#0

;低8位累加寄存器清0

MOV

R3,#0

;高8位累加寄存器清0

MOV

R4,#100

;置平均次数 ALOP: MOV

A,P1;读P1口数据

ADD

A,R2;低8位累加

MOV

R2,A;回存

CLR

A;高8位与进位累加

ADDC

A,R3;

MOV

R3,A;回存

LCALL

DY10ms

;延时10ms

DJNZ

R4,ALOP;判100次累加完否?未完继续

MOV

A,R3;100次累加完,求平均值,被除数→A、B

MOV

B,R2;

MOV

R0,30H

;置商间址

MOV

R6,#0;置除数100,除数→R6R5

MOV

R5,#100;

LCALL

SUM;(A、B)÷(R6、R5)= 商 @R0, 余数A

CJNE

A,#50,NEXT;四舍五入 NEXT: JC GRET;C=1,<50, 舍

INC 30H;C=0,≥50, 入 GRET: RET;

AVRG2: MOV 30H,#0;商累加寄存器清0

MOV 31H,#0;余数累加寄存器清0

MOV R4,#100;置平均次数 ALOP: MOV A,P1;读P1口数据

MOV B,#100;置除数(平均次数)

DIV AB;P1口数据除以100

ADD A,30H;商累加

MOV

30H,A;回存

MOV

A,B;

ADD A,31H;余数累加

MOV 31H,A;回存

CLR C

;

SUBB A,#100;

JC GON;余数累加<100,余数累加寄存器不变

INC 30H;余数累加≥100, 商累加寄存器+1

MOV 31H,A;减去100后差→余数累加寄存器 GON: LCALL DY10ms;延时10ms

DJNZ R4,ALOP

;判100次累加完否?未完继续

MOV A,31H;100次累加完毕,余数累加四舍五入

CJNE A,#50,NEXT;NEXT: JC GRET;C=1,<50, 舍

INC 30H;C=0,≥50, 入 GRET: RET

;

【课堂练习题】

已知某单片机系统每隔20ms测一次温度,8位温度A/D值存在特殊功能寄存器SBUF中,试分别求其1s和1分内的平均值, 分别存30H和31H。

当用PC作基址寄存器时,其表格首地址与PC值间距不能超过256字节,且编程要事先计算好偏移量,比较麻烦。因此,一般情况下用DPTR作基址寄存器。解:编程如下:

CHAG:MOV

DPTR,#TABD;置共阴字段码表首址

MOV

A,30H

;读显示数字

MOVC A,@A+DPTR;查表,转换为显示字段码

MOV

30H,A

;存显示字段码

RET

;TABD:DB 3FH,06H,5BH,4FH,66H;0~4共阴字段码表

DB 6DH,7DH,07H,7FH,6FH;5~9共阴字段码表 四.查表程序

用于查表的指令有两条: ⑴

MOVC

A,@A+DPTR ⑵ MOVC

A,@A+PC 当用DPTR作基址寄存器时,查表的步骤分三步: ① 基址值(表格首地址)→DPTR;

② 变址值(表中要查的项与表格首地址之间的间隔字节数)→A; ③ 执行MOVC A,@A+DPTR。

当用PC作基址寄存器时,其表格首地址与PC值间距不能超过256字节,且编程要事先计算好偏移量,比较麻烦。因此,一般情况下用DPTR作基址寄存器。

【例】 在单片机应用系统中,常用LED数码管显示数码,但显示数字(≤9)与显示数字编码并不相同,需要将显示数字转换为显示字段码,通常是用查表的方法。现要求将30H中的显示数字转换为显示字段码并存入30H。已知共阴字段码表首址为TABD。解:编程如下:

CHAG:MOV

DPTR,#TABD;置共阴字段码表首址

MOV

A,30H

;读显示数字

MOVC A,@A+DPTR;查表,转换为显示字段码

MOV

30H,A

;存显示字段码

RET

;TABD:DB 3FH,06H,5BH,4FH,66H;0~4共

DB 6DH,7DH,07H,7FH,6FH;5~9共阴字段码表

【例】 用查表程序求0~40之间整数的立方。已知该整数存在内RAM 30H中,查得立方数存内RAM 30H(高8位)31H。已知立方表(双字节)首地址为TAB。解:编程如下:

CUBE: MOV

DPTR,#TAB;置立方表首址

MOV

A,30H

;读数据

ADD

A,30H

;数据×2→A

MOV

30H,A

;暂存立方表数据序号

MOVC A, @A+DPTR;读立方数据高8位

XCH

A,30H

;存立方数据高8位,立方表数据序号→A

INC

A

;指向立方数据低8位

MOVC A,@A+DPTR;读立方数据低8位

MOV

31H,A

;存立方数据低8位

RET

;TAB: DW 0,0,0,1,0,8,0,27,0,64;0~40立方表

DW 0,125,0,216,„,0FAH,00H;说明:数据×2→A原因是立方表数据为双字节 【课堂练习题】

已知8位显示数字已存入首址为30H的内RAM中,试将其转换为共阴显示字段码,存入首址为40H的内RAM中。五.散转程序

散转程序是一种并行多分支程序。【例】 单片机四则运算系统。

在单片机系统中设置四个运算命令键,它们的键号分别为0、1、2、3。当其中一个键按下时,进行相应的运算。操作数由P1口和P3口输入,运算结果仍由P1口和P3口输出。具体如下:P1口输入被加数、被减数、被乘数和被除数,输出运算结果的低8位或商;P3口输入加数、减数、乘数和除数,输出进位(借位)、运算结果的高8位或余数。键盘号已存放在30H中。解:程序如下:

PRGM: MOV

P1,#0FFH

;P1口置输入态

MOV

P3,#0FFH

;P3口置输入态

MOV

DPTR,#TBJ;置¡°+-×÷¡±表首地址

MOV

A,30H

;读键号

RL

A

;键号2→A

ADD

A,30H

;键号3→A

JMP

@A+DPTR

;散转

TBJ:

LJMP

PRGM0

;转PRGM0(加法)

LJMP

PRGM1

;转PRGM1(减法)

LJMP

PRGM3

;转PRGM3(除法)

LJMP

PRGM2

;转PRGM2(乘法)PRGM0: MOV

A,P1

;读加数

ADD

A,P3

;P1+P3

MOV

P1,A

;和→P1

CLR

A

;

ADDC

A,#00H

;进位→A

MOV

P3,A

;进位→P3

RET

;

PRGM1: MOV

A,P1

;读被减数

CLR

C

;

SUBB A,P3

;P1-P3

MOV

P1,A

;差→P1

CLR

A

;

RLC

A

;借位→A

MOV

P3,A

;借位→P3

RET

;PRGM2: MOV

A,P1

;读被乘数

MOV

B,P3

;置乘数

MUL

AB;P1×P3

MOV

P1,A;积低8位→P1

MOV

P3,B;积高8位→P3

RET;PRGM3: MOV

A,P1

;读被除数

MOV

B,P3

;置除数

DIV

AB;P1÷P3

MOV

P1,A

;商→P1

MOV

P3,B

;余数→P3

RET

;说明:由于LJMP为3字节指令,因此键号需先乘3,以便转到正确的位置。

《电子教案单片机原理与应用技术.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
电子教案单片机原理与应用技术
点击下载文档
相关专题 单片机原理与应用技术 应用技术 单片机 教案 单片机原理与应用技术 应用技术 单片机 教案
[教案模板]相关推荐
    [教案模板]热门文章
      下载全文