电子教案单片机原理与应用技术Word文件下载.docx
- 文档编号:22933387
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:16
- 大小:39.74KB
电子教案单片机原理与应用技术Word文件下载.docx
《电子教案单片机原理与应用技术Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子教案单片机原理与应用技术Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
将汇编语言源程序转换为计算机所能识别的机器语言代码程序的过程称为汇编。
汇编可分为:
⒈手工汇编
⒉计算机汇编
四.程序设计的基本方法
编写程序要求:
不仅要完成规定的功能任务,而且还要求:
执行速度快、占用内存少、条理清晰、
阅读方便、便于移植、巧妙而实用。
一般应按以下几个步骤进行:
⑴分析问题,确定算法或解题思路
⑵画流程图
⑶编写源程序
⑷汇编和调试
1-2汇编语言程序设计举例
一.顺序程序
顺序程序是指按顺序依次执行的程序,也称为简单程序或直线程序。
顺序程序结构虽然比较简单,但也能完成一定的功能任务,是构成复杂程序的基础。
根据不同条件转向不同的处理程序,这种结构的程序称为分支程序。
80C51指令系统中的条件转移指令、比较转移指令和位转移指令,可以实现分支程序。
【例】已知16位二进制负数存放在R1R0中,试求其补码,并将结果存在R3R2中
解:
二进制负数的求补方法可归结为“求反加1”,符号位不变。
利用CPL指令实现求反;
加1时,则应低8位先加1,高8位再加上低位的进位。
注意这里不能用INC指令,因为INC指令不影响标志位。
程序如下:
CONT:
MOVA,R0;
读低8位
CPLA;
取反
ADDA,#1;
加1
MOVR2,A;
存低8位
MOVA,R1;
读高8位
ADDCA,#80H;
加进位及符号位
MOVR3,A;
存高8位
RET;
二.分支程序
根据不同条件转向不同的处理程序,这种结构的程序称为分支程序。
①S0单独按下,
红灯亮,其余灯灭;
②S1单独按下,
绿灯亮,其余灯灭;
③其余情况,
黄灯亮。
程序如下
SGNL:
ANLP1,#11100011B;
红绿黄灯灭
ORLP1,#00000011B;
置P1.0、P1.1输入态,P1.5~P1.7状态不变
SL0:
JNBP1.0,SL1;
P1.0=0,S0未按下,转判S1
JNBP1.1,RED;
P1.0=1,S0按下;
且P1.1=0,S1未按下,转红灯亮
YELW:
SETBP1.4;
黄灯亮
CLRP1.2;
红灯灭
CLRP1.3;
绿灯灭
SJMPSL0;
转循环
SL1:
JNBP1.1,YELW;
P1.0=0,S0未按下;
P1.1=0,S1未按下,转黄灯亮
GREN:
SETBP1.3;
绿灯亮
CLRP1.4;
黄灯灭
RED:
SETBP1.2;
红灯亮
转循环
课堂练习题:
电路及灯亮灭要求同上述【例】题,其中第3、4两条指令JNBP1.0和JNBP1.1按下列要求修改,试重新编程。
⑴JBP1.0,¡
JBP1.1,¡
⑵JBP1.0,¡
JNBP1.1,¡
⑶JNBP1.0,¡
三.循环程序
循环程序一般包括以下几个部分:
⑴循环初值;
⑵循环体;
⑶循环修改;
⑷循环控制;
以上四部分可以有两种组织形式,其结构如图4-6所示.
【例】编制一个循环闪烁灯的程序。
设80C51单片机的P1口作为输出口,经驱动电路74LS240(8反相三态缓冲/驱动器)接8只发光二极管,如图4-8所示。
当输出位为“1”时,发光二极管点亮,输出位为“0”时为暗。
试编程实现:
每个灯闪烁点亮10次,再转移到下一个灯闪烁点亮10次,循环不止。
FLASH:
MOVA,#01H;
置灯亮初值
FSH0:
MOVR2,#0AH;
置闪烁次数
FLOP:
MOVP1,A;
点亮
LCALLDY1s;
延时1s
MOVP1,#00H;
熄灭
LCALLDY1s;
DJNZR2,FLOP;
闪烁10次
RLA;
左移一位
SJMPFSH0;
循环
RET;
【例】设Xi均为单字节数,并按顺序存放在以50H为首地址的内RAM存储单元中,数据长度(个数)N存在R2中,试编程求和S=X1+X2+‥‥+XN,并将S(双字节)存放在R3R4中,(设S<65536)。
SXN:
MOVR2,#N;
置数据长度(循环次数)
MOVR3,#00H;
和单元(高8位)清0
MOVR4,#00H;
和单元(低8位)清0
MOVR0,#50H;
求和数据区首址
LOOP:
MOVA,R4;
读前次低8位和
ADDA,@R0;
低8位累加
MOVR4,A;
存低8位和
CLRA;
ADDCA,R3;
高8位加进位
MOVR3,A;
存高8位和
INCR0;
指向下一数据循环修改
DJNZR2,LOOP;
判N个数据累加完否?
循环控制
RET;
退出循环退出循环
【例】编写延时10ms子程序,fosc=12MHz。
解:
fosc=12MHz,一个机器周期为1ms。
DY10ms:
MOVR6,#20;
置外循环次数
DLP1:
MOVR7,#250;
置内循环次数
DLP2:
DJNZR7,DLP2;
2机周×
250=500机周
DJNZR6,DLP1;
500机周×
20=10000机周
RET;
说明:
MOVRn指令为1个机器周期;
DJNZ指令为2个机器周期;
RET指令为2个机器周期;
{[(2机周×
250)+1+2]×
20+1+2}×
1ms/机周=10063ms≈10ms
【课堂练习题】按下列要求编写延时子程序:
⑴延时2ms,fosc=6MHz;
⑵延时5ms,fosc=12MHz;
⑶延时10s,fosc=12MHz;
设80C51单片机的P1口作为输出口,经驱动电路74LS240(8反相三态缓冲/驱动器)接8只发光二极管,如图4-8所示。
当输出位为¡
°
1¡
±
时,发光二极管点亮,输出位为¡
0¡
时为暗。
【课堂练习题】
根据图4-8电路,设计灯亮移位程序,要求8只发光二极管每次点亮一个,点亮时间为250ms,顺序是从下到上一个一个地循环点亮。
设fosc=6MHz。
【例】已知P1口数据每隔10ms刷新一次,试求其1s内的平均值,平均值存30H。
本题需求100个数据的平均值,
一般有两种方法:
一种是全部累加后再平均;
另一种是边平均边累加,
现给出两种方法的程序。
AVRG1:
MOVR2,#0;
低8位累加寄存器清0
MOVR3,#0;
高8位累加寄存器清0
MOVR4,#100;
置平均次数
ALOP:
MOVA,P1;
读P1口数据
ADDA,R2;
MOVR2,A;
回存
CLRA;
高8位与进位累加
ADDCA,R3;
MOVR3,A;
LCALLDY10ms;
延时10ms
DJNZR4,ALOP;
判100次累加完否?
未完继续
MOVA,R3;
100次累加完,求平均值,被除数→A、B
MOVB,R2;
MOVR0,30H;
置商间址
MOVR6,#0;
置除数100,除数→R6R5
MOVR5,#100;
LCALLSUM;
(A、B)÷
(R6、R5)=商@R0,余数A
CJNEA,#50,NEXT;
四舍五入
NEXT:
JCGRET;
C=1,<50,舍
INC30H;
C=0,≥50,入
GRET:
AVRG2:
MOV30H,#0;
商累加寄存器清0
MOV31H,#0;
余数累加寄存器清0
MOVR4,#100;
MOVB,#100;
置除数(平均次数)
DIVAB;
P1口数据除以100
ADDA,30H;
商累加
MOV30H,A;
MOVA,B;
ADDA,31H;
余数累加
MOV31H,A;
CLRC;
SUBBA,#100;
JCGON;
余数累加<100,余数累加寄存器不变
INC30H;
余数累加≥100,商累加寄存器+1
减去100后差→余数累加寄存器
GON:
LCALLDY10ms;
DJNZR4,ALOP;
MOVA,31H;
100次累加完毕,余数累加四舍五入
CJNEA,#50,NEXT;
【课堂练习题】
已知某单片机系统每隔20ms测一次温度,8位温度A/D值存在特殊功能寄存器SBUF中,试分别求其1s和1分内的平均值,分别存30H和31H。
当用PC作基址寄存器时,其表格首地址与PC值间距不能超过256字节,且编程要事先计算好偏移量,比较麻烦。
因此,一般情况下用DPTR作基址寄存器。
编程如下:
CHAG:
MOVDPTR,#TABD;
置共阴字段码表首址
MOVA,30H;
读显示数字
MOVCA,@A+DPTR;
查表,转换为显示字段码
MOV30H,A;
存显示字段码
TABD:
DB3FH,06H,5BH,4FH,66H;
0~4共阴字段码表
DB6DH,7DH,07H,7FH,6FH;
5~9共阴字段码表
四.查表程序
用于查表的指令有两条:
⑴MOVCA,@A+DPTR
⑵MOVCA,@A+PC
当用DPTR作基址寄存器时,查表的步骤分三步:
①基址值(表格首地址)→DPTR;
②变址值(表中要查的项与表格首地址之间的
间隔字节数)→A;
③执行MOVCA,@A+DPTR。
当用PC作基址寄存器时,其表格首地址与PC值间距不能超过256字节,且编程要事先计算好偏移量,比较麻烦。
【例】在单片机应用系统中,常用LED数码管显示数码,但显示数字(≤9)与显示数字编码并不相同,需要将显示数字转换为显示字段码,通常是用查表的方法。
现要求将30H中的显示数字转换为显示字段码并存入30H。
已知共阴字段码表首址为TABD。
0~4共
DB6DH,7DH,07H,7FH,6FH;
【例】用查表程序求0~40之间整数的立方。
已知该整数存在内RAM30H中,查得立方数存内RAM30H(高8位)31H。
已知立方表(双字节)首地址为TAB。
CUBE:
MOVDPTR,#TAB;
置立方表首址
读数据
ADDA,30H;
数据×
2→A
MOV30H,A;
暂存立方表数据序号
MOVCA,@A+DPTR;
读立方数据高8位
XCHA,30H;
存立方数据高8位,立方表数据序号→A
INCA;
指向立方数据低8位
读立方数据低8位
MOV31H,A;
存立方数据低8位
RET;
TAB:
DW0,0,0,1,0,8,0,27,0,64;
0~40立方表
DW0,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:
MOVP1,#0FFH;
P1口置输入态
MOVP3,#0FFH;
P3口置输入态
MOVDPTR,#TBJ;
置¡
+-×
÷
¡
表首地址
读键号
RLA;
键号2→A
键号3→A
JMP@A+DPTR;
散转
TBJ:
LJMPPRGM0;
转PRGM0(加法)
LJMPPRGM1;
转PRGM1(减法)
LJMPPRGM3;
转PRGM3(除法)
LJMPPRGM2;
转PRGM2(乘法)
PRGM0:
MOVA,P1;
读加数
ADDA,P3;
P1+P3
和→P1
CLRA;
ADDCA,#00H;
进位→A
MOVP3,A;
进位→P3
PRGM1:
读被减数
CLRC;
SUBBA,P3;
P1-P3
差→P1
RLCA;
借位→A
借位→P3
PRGM2:
读被乘数
MOVB,P3;
置乘数
MULAB;
P1×
P3
积低8位→P1
MOVP3,B;
积高8位→P3
RET;
PRGM3:
读被除数
MOVB,P3;
置除数
DIVAB;
P1÷
商→P1
余数→P3
由于LJMP为3字节指令,因此键号需先乘3,
以便转到正确的位置。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 教案 单片机 原理 应用技术