试验一P1口试验一.docx
《试验一P1口试验一.docx》由会员分享,可在线阅读,更多相关《试验一P1口试验一.docx(14页珍藏版)》请在冰豆网上搜索。
试验一P1口试验一
篇章计划
第四章80C51的程序设计
(共5次课)
教学目标及基本要求:
1、掌握80C51汇编语言程序编制步骤;
2、掌握80C51常用伪指令的使用方法;
3、熟悉几种基本的程序结构。
各节(单元)教学内容及学时分配:
§4.1~§4.2程序编制的方法和技巧源程序的编制2学时
§4.3基本程序结构4学时
测验
(一)2学时
教学内容的重点、难点及处理方法:
重点:
1、源程序形成目标程序的步骤;
2、伪指令与单片机指令的本质区别;
3、分支、循环和子程序的设计要点。
处理方法:
课堂讲授
难点:
分支程序、循环程序、查表程序、散转程序设计。
处理方法:
课堂讲授
教学内容的深化和拓展:
教学方式(手段)及教学过程中应注意的问题:
教学方式:
讲授与多媒体相结合
教学过程中应注意的问题:
结合实际进行讲解
主要参考书目及网络资源:
1、《单片机原理与应用》中国机械教育协会组编
2、《单片机应用新技术教材》朱宇光主编
3、《单片机应用技术》刘守义主编
4、《单片机原理与控制技术》及习题集张志良主编
实践教学安排:
实验一P1口实验
(一)2学时
第16次课
一、教学简要说明:
1、本单元教学重点、难点及处理方法:
重点:
80C51汇编语言语句结构的基本格式及伪指令的功能和应用。
处理方法:
举例讲解。
难点:
伪指令的功能和应用。
处理方法:
举例讲解。
2、本单元教学方式(手段)或教学内容要点与时间分配:
§4.1程序编制的方法和技巧45分
§4.2源程序的编制45分
3、本单元师生活动设计:
二、授课内容:
1、复习:
位操作类指令特点、格式及其用途。
2、本单元教学内容(具体到知识点)
1)掌握80C51汇编语言语句结构的基本格式;
2)掌握程序设计的步骤和基本方法;
3)掌握伪指令的功能和应用。
3、本单元的讲课提纲、板书设计(或多媒体教学)
§4.1程序编制的方法与技巧
一、程序编制的步骤:
(一)预完成任务的分析:
1.深入分析——明确任务、功能要求及技术指标
2.分析硬件资源及工作环境
(二)进行算法的优化:
利用数学方法或数学模型将实际问题转化为由计算机进行处理的问题
程序总体设计及流程图绘制:
1.程序总体构思;2.确定程序结构、数据形式、资源分配及参数计算;
3.勾画流程图。
二、编制程序的方法和技巧:
(一)采用模块化程序设计:
将某些具体功能程序进行独立的模块化设计(如:
延时、打印或显示等)。
(二)采用循环结构和子程序:
可减少程序容量,提高程序效率。
三、汇编语言汇编格式:
[标号:
]操作码[目的操作数,源操作数][;注释]
§4.2源程序的编制
一、源程序的编辑和汇编:
(一)源程序的编辑:
依据汇编语言基本规则进行,最后以“.ASM”扩展名存盘。
(二)汇编:
将汇编语言源程序转换为计算机所能识别的机器语言代码程序的过程称为汇编。
汇编可分为:
⒈手工汇编;
⒉计算机汇编
二、伪指令:
在汇编时起控制作用,自身并不产生机器码,而仅是为汇编服务的一些指令,称为伪指令。
伪指令不属于80C51指令系统。
常用的伪指令有以下几种:
⒈起始伪指令ORG(Origin)
格式:
ORG16位地址
功能:
规定ORG下面目标程序的起始地址。
⒉结束伪指令END
格式:
END
功能:
汇编语言源程序的结束标志。
在END后面的指令,汇编程序不再处理。
⒊等值伪指令EQU(Equate)
格式:
字符名称EQU数据或汇编符号
功能:
将一个数据或特定的汇编符号赋予规定的字符名称。
⒋数据地址赋值伪指令DATA
格式:
字符名称DATA表达式
功能:
将数据地址或代码地址赋予规定的字符名称。
⒌定义字节伪指令DB(DefineByte)
格式:
DB8位二进制数表
功能:
从指定的地址单元开始,定义若干个8位内存单元的数据。
数据与数据之间用“,”分割。
⒍定义字伪指令DW(DefineWord)
格式:
DW16位二进制数表
功能:
从指定的地址单元开始,定义若干个16位数据。
⒎定义位地址伪指令BIT
格式:
字符名称BIT位地址
功能:
将位地址赋予所规定的字符名称。
4、本单元的作业布置:
5、小结:
1)80C51汇编语言语句结构的基本格式;
2)程序设计的步骤和基本方法;
3)伪指令的功能、特点和应用。
第17、18次课
一、教学简要说明:
1、本单元教学重点、难点及处理方法:
重点:
顺序程序、分支程序、循环程序设计和子程序及其调用。
处理方法:
举例讲解。
难点:
分支程序、循环程序设计。
处理方法:
举例讲解。
2、本单元教学方式(手段)或教学内容要点与时间分配:
1)复习20分
2)讲授140分
3)小结10分
4)自行消化10分
3、本单元师生活动设计:
提问。
二、授课内容:
1、复习:
1)80C51汇编语言语句结构的基本格式;
2)程序设计的步骤和基本方法;
3)伪指令的功能、特点和应用。
2、本单元教学内容(具体到知识点)
掌握顺序程序、分支程序、循环程序设计和子程序及其调用。
3、本单元的讲课提纲、板书设计(或多媒体教学)
§4.3基本程序结构
一.顺序程序
顺序程序是指按顺序依次执行的程序,也称为简单程序或直线程序。
顺序程序结构虽然比较简单,但也能完成一定的功能任务,是构成复杂程序的基础。
【例】已知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位
CPLA;取反
ADDCA,#80H;加进位及符号位
MOVR3,A;存高8位
RET;
二.分支程序
根据不同条件转向不同的处理程序,这种结构的程序称为分支程序。
80C51指令系统中的条件转移指令、比较转移指令和位转移指令,可以实现分支程序。
【例】已知电路如图4-5所示,要求实现:
①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.2;红灯灭
CLRP1.4;黄灯灭
SJMPSL0;转循环
RED:
SETBP1.2;红灯亮
CLRP1.3;绿灯灭
CLRP1.4;黄灯灭
SJMPSL0;转循环
三.循环程序
循环程序一般包括以下几个部分:
⑴循环初值;⑵循环体;⑶循环修改;⑷循环控制;
以上四部分可以有两种组织形式,其结构如图4-6所示。
左图为“先执行后判断”的结构,右为“先判断后执行”的结构。
【例】P79
四.子程序及其调用:
1、子程序的定义
在实际编程中,常常回遇到功能完全相同的程序段,或不在同一程序模块,或虽在同一模块而需重复执行,但又不是连续重复执行。
为了避免重复编制同一段程序,节省存储空间,把程序段独立开来,附加少量额外语句,将其编制成公用子程序,供程序其他地方需要时调用。
这种程序的设计方法称之为子程序设计。
2、子程序的调用:
子程序的结构与一般的程序并无多大区别,它的主要特点是,在执过程中需要由其他程序来调用,执行完后又需要把执行流程返回到该子程序的主程序。
子程序调用时应注意两点:
一是现场保护和恢复;二是主程序与子程序的参数传递。
3、现场保护和恢复:
第一:
在主程序中进行;第二:
在子程序中进行;
4、参数传递:
传递参数的方法主要有:
第一:
利用累加器或寄存器;
第二:
利用存储器;
第三:
利用堆栈。
5、编制子程序的基本要求:
1)子程序要有一定的通用性;
2)选用适当的方法在主程序和子程序之间进行参量传递,
3)注意信息的保存,保存方法有:
4、本单元的作业布置:
P896、7
5、小结:
1)顺序程序、分支程序、循环程序的特点及其设计;
2)子程序及其调用。
第19次课
一、教学简要说明:
1、本单元教学重点、难点及处理方法:
重点:
第一章、第二章、第三章、第四章中各节的重点内容;
处理方法:
先总结,再进行测验。
难点:
测验。
处理方法:
独立完成。
2、本单元教学方式(手段)或教学内容要点与时间分配:
测验
(一)90分
3、本单元师生活动设计:
二、授课内容:
1、复习:
第一章、第二章、第三章、第四章中各节的重点内容小结。
2、本单元教学内容(具体到知识点)
1)将第一章、第二章、第三章、第四章的内容进行总结,加深对其理解;
2)检查学生对第一章、第二章、第三章、第四章的内容的掌握情况。
3、本单元的讲课提纲、板书设计(或多媒体教学)
测验
(一)
一、单选题(3分/题)
1.十进制数126对应的十六进制表示为()
A.8FHB.8EHC.FEHD.7EH
2.二进制数110010010对应的十六进制数表示为()
A.192HB.1B6HC.DB0HD.666H
3.-3的补码为()
A.10000011B.11111100C.11111110D.11111101
4.Intel80C51单片机CPU是()位的单片机
A.16B.4C.8D.准16
5.在单片机中,通常将一些中间计算结果存放在()
A.累加器B.控制器C.程序存储器D.数据存储器
6.80C31复位后,PC与SP的值分别为()
A.0000H,00HB.0000H,07HC.0003H,07HD.0800H,00H
7.80C31单片机片内RAM共有()字节
A.128B.256C.4KD.64K
8.当进行外部扩展时,80C51单片机的P0口用作()
A.传输高8位地址B.传输低8位地址
C.传输低8位数据D.传输低8位地址/数据总线
9.下列指令中错误的是()
A.MOVA,R4B.MOV20H,R4C.MOVR4,P0D.MOV@R0,R3
10.若(A)=45H,(C)=1,执行指令RLCA后,(A)的值为()
A.8AHB.0D1HC.8BHD.0A2H
二、程序分析:
1.读程序
(一)(4分/空)
MOVR0,#30H若(30H)=8DH,(40H)=4AH,(41H)=
MOVR1,#40H66H,(CY)=1
MOVA,@R0执行以上程序后:
ADDCA,@R1(A)=,(30H)=
MOV@R1,A(40H)=,(41H)=
INCR1(R1)=。
SUBBA,@R1
MOV30H,A
2.读程序
(二)(10分)
MOVDPTR,#2000H
CLRA
MOVCA,@A+DPTR
MOVDPTR,#1000H
MOVX@DPTR,A
上述程序段实现的功能是()
A.将累加器A中的内容送至数据指针存储器DPTR中
B.将ROM2000H单元的内容送至外部RAM1000H单元
C.将累加器A中的内容送至1000H地址单元中
D.将RAM2000H单元的内容送至外部ROM1000H单元
3.读程序(三)(5分/空)
(1)若(SP)=40H,(3FH)=30H,(40H)=60H,执行
POPDPH
POPDPL
指令后,DPTR的内容为,SP的内容为。
(2)若(SP)=22H,(PC)=2233H,执行LCALL2B3CH指令后,
(SP)=,(PC)=,
(23H)=,(24H)=。
三、改错(2分/题)
判断下列指令是否有错,若有错,则改正之。
1.MULR0R12.MOVA,@R7
3.MOVA,#3000H4.MOVC@A+DPTR,A
5.LJMP#1000H
第20次课
一、教学简要说明:
1、本单元教学重点、难点及处理方法:
重点:
汇编语言建立、运行的上机操作方法。
处理方法:
上机操作。
难点:
同上。
2、本单元教学方式(手段)或教学内容要点与时间分配:
实验一P1口实验
(一)90分
3、本单元师生活动设计:
实际操作。
二、授课内容:
1、复习:
2、本单元教学内容(具体到知识点)
l、学习P1口的使用方法。
2、学习延时子程序的编写和使用。
3、本单元的讲课提纲、板书设计(或多媒体教学)
实验一P1口实验
(一)
一、实验内容
1、P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
2、P1口做输入口,接八个扭子开关,以实验台上74LS273做输出口,编写程序读取开关状态,将此状态,在发光二极管上显示出来。
二、实验目的
l、学习P1口的使用方法。
2、学习延时子程序的编写和使用。
三、有关说明
P1口为准双向口,P1的每一位都能独立地定义为输出线或输入线,作输入的口线,必须首先向锁存器相应位写入“l”,该位才能作为输入。
8031中所有口锁存器在复位时均置为“l”,如果后来在口锁存器写入过“0”,在需要时应写入一个“1”使它再成为一个输入。
可以用第二个实验做一下试验。
先按要求做好程序并调试成功后,可将P1口锁存器中置“0”,此时将P1作输入口,会有什么结果。
再来看一下延时程序的实现。
现常用的有两种方法,一是用定时器中断来实现,一是用指令循环来实现。
在系统时间允许的情况下可以采用后一种方法。
本实验系统晶振为6.144MHZ,则一个机器周期为12÷6.144us即
1÷0.512us。
现要写一个0.1s的程序,可大致写出如下:
MOVR7,#200
(1)
DE1:
MOVR6,#X
(2)
DE2:
DJNZR6,DE2(3)
DJNZR7,DE1(4)
上面MOV.DJNZ指令均需两个机器周期,所以每执行一条指令需1÷0.256us,现求出X值:
(x×1÷0.256+1÷0.256+1÷0.256)×200+1÷0.256=0.1×106
指令(3)
(2)(4)
(1)
所需时间需时间需时间需时间
指出X=126。
代入上式可知实际延时约0.100004S,很精确了。
四、连线方法
执行程序1时:
P1.0—P1.7接发光二极管L1—L8
执行程序2时:
P1.0—P1.7接钮开关K1—K8;74LS273(U4)的O11—O18接发光二极管L1—L8;74LS273片选端CS接08—0F端。
此时7LS273的I/O口地址为1B08H。
五、实验电路
程序一图
程序二图
六、参考程序
程序一、
ST_ADDREQU4000H
ORGST_ADDR
LJMPSTART
ORGST_ADDR+200H
START:
MOVA,#01H
LOOP:
MOVP1,A
MOVR1,#10
DEL1:
MOVR2,#200
DEL2:
MOVR3,#126
DEL3:
DJNZR3,DEL3
DJNZR2,DEL2
DJNZR1,DEL1
RLA
LJMPLOOP
END
程序二、
ST_ADDREQU4000H
PORTEQU1B08H
ORGST_ADDR
LJMPS1
ORGST_ADDR+200H
S1:
MOVP1,#0FFH
START:
MOVA,P1
MOVDPTR,#PORT
MOVX@DPTR,A
LJMPSTART
END
4、本单元的作业布置:
独立撰写实验报告。
5、小结:
1、P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
2、P1口做输入口,接八个扭子开关,以实验台上74LS273做输出口,编写程序读取开关状态,将此状态,在发光二极管上显示出来。