华中科技大学单片机实验二报告_第1页
华中科技大学单片机实验二报告_第2页
华中科技大学单片机实验二报告_第3页
华中科技大学单片机实验二报告_第4页
华中科技大学单片机实验二报告_第5页
已阅读5页,还剩6页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机实验报告实验名称分支程序设计指导教师刘冬生专业班取得学位联系方式1 .任务要求掌握排练环境下汇编语言程序的调试方法,加深对汇编语言指令、机械代码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计和调试方法,理解并行IO端口的使用。8位s符号数x保存在外部RAM单元中,如下计算结果y也保存在外部RAM单元中,因此请根据需要创建程序。使用2.51系列的单片机,设计了24小时制的电子表,电子表的时、分、秒的数值分别通过P0、P1、P2端口输出(以压缩了BCD代码的形式)。 P3.0为低电平时开始计时,高电平时停止计时。提高(选择)部分:实现a.4位的十进制加法、负1计数,千位、百位从P1

2、端口输出,十位、个位从P2端口输出。 利用P3.7的状态,选择加法减法方式。b .利用P3端口的下位4比特的状态来控制计数的开始和停止、控制方式的定制。2 .设计构想1 .分段函数设计第一个任务根据变量x的值进行适当的计算。 因此,首先,判断为x的值属于该范围。 使用比较迁移命令CJNE,判断x是否等于阈值20,40,如果不相等,可以根据执行CJNE命令后的进位CY的值,判断x和阈值的大小关系。 如果CY=0则x大于阈值、如果CY=1则x小于阈值,并且根据x的值存在的区间来进行相应的计算。 请注意,除法可能会产生馀数,商和馀数应分别存储,如果幂运算的结果大于255,则应分别存储高8位和低8位二

3、.二十四进制时钟这个程序必须能够建立两个循环。 首先,构建三重环路实现“延迟一秒”,环路体用NOP命令(单字节命令,一s )多次循环,达到延迟一秒的效果。 利用已经建立的“一秒延迟”部分,设计计时系统的三重循环,秒(0-59 )、分(0-59 )、时(0-23 )。 秒和分是60次,时间是24次,但是从0开始数,分,秒是59,时间是23时,下一个应该是0。 执行程序时通过变更P3.0的值,可以实现暂停和恢复的功能3 .资源分配1 .分段函数根据主题条件,首先,该8比特的无符号数设为30H,在其上分配芯片外地址4000H,并将芯片外地址4001H和4002H分配到用段函数计算的结果y。 每位的逆

4、计算结果存在于4001H单元中,除法结果的商和馀数与幂计算的结果的上位、下位8位被存储在4001H-4002H单元中。 用寄存器a、b保存乘法除法得到的中间结果。二.二十四进制时钟工作寄存器R0、R1、R2分别用于秒、分、时循环数的设定,R3、R4分别用于分和时循环数的设定,R5-R7用于“一秒延迟”下的三重循环的循环数的设定。 秒、分钟、小时的数值分别从P2、P1、P0端口输出。4 .流程图开始。给x,x的值给a设定数据指针。将x的值保存到外部存储器中A20?nCY1?y把x反过来给ynyCY零清除设a的值为4001HA40?CY1?PS系列Y=X/2PSY=X2设a的值为4001H将b的值

5、保存到4002H结束。开始。将P0、P1、P2、P3设为零P3.0=0?ny延迟1秒秒计数,在R0上加1保存到a中,转换为BCD代码R0=60H?给p2anyR0,P2零计数分数,在R1上加1存储在a中,转换为BCD代码R1=60H?给p1a把R1、P1设为零PS计时,在R2上加1加a,转换成BCD代码R2=R4? 什么?给P0加a把R2,P0设为零PS系列5 .源代码1 .分段函数ORG 0000HLJMP MAINORG 0100H主: mov a、#29H; 给a八位无符号数MOV DPTR、#4000H; 数据指针的定义MOVX DPTR,a; 把x存储在片外RAM中CLR C; 把进

6、位归零KIND1:CJNE A、#14H、KIND2; 把a和14H进行比较,如果不等于14H就跳至KIND2OUT1: CPL A; 把a的内容颠倒过来MOV DPTR、#4001H; 数据指针的定义MOVX DPTR,a; 将计算结果存储在芯片外地址4001H上SJMP DONEKIND2:JNC KIND3; 判断进位CY是否为0,若为0则跳至KIND3SJMP OUT1; 跳到OUT1KIND3:CLR C; 把进位归零CJNE A、#28H、KIND4; 将a的内容与28H进行比较,如果不等于28H就跳至KIND4out 2: PS、a; 把a的内容给bMUL AB; 计算x的平方,

7、结果是高位8位为b,低位8位为aMOV DPTR、#4001H; 数据指针的定义MOVX DPTR,a; 将结果的低位8比特存储在片外地址4001H中INC DPTR; 数据指针加1PS、PS; 把b的内容给aMOVX DPTR,a; 将结果的前8位存储在片外地址4002H中SJMP DONEKIND4:JNC OUT2; 判断进位位是否为0,如果为0则跳至OUT2SJMP OUT3; 跳到OUT3OUT3: MOV B、#02HDIV AB; 计算X/2,把商保存在a,把馀数保存在bMOV DPTR、#4001H; 数据指针的定义MOVX DPTR,a; 将商品保存在商店地址4001HINC

8、 DPTR; 数据指针加1PS、PSMOVX DPTR,a; 将馀数保存在芯片外地址4002H中sjmp东DONE: SJMP $结束2. 24小时表ORG 0000HLJMP MAINORG 0100H主: mov r0、#00HMOV P0,#00H; 时钟位清除MOV P1、#00H; 分位数清除MOV P2,#00H; 秒位数清除START: JB P3.0,START P3.0在低电平开始计数,在高电平停止计数MOV R2、P2; P2的值保存在R2中CJNE R2,#60H,DEL; 秒持续达到60秒,不到60秒就跳了MOV P2,#00H; 秒被清除PS、P1ADD A、#01H

9、; 分位数加1DA A; 将分位数变更为BCD代码PR PS 1,aMOV R1、P1; P1的值保存在寄存器R1中CJNE R1、#60H、DEL; 分钟持续达到60,还不到60的跳跃MOV P1、#00H; 分钟清除PS,PSADD A、#01H; 时钟位1DA A; 将时钟位更改为BCD代码PR PR 0,aPS K 0,aCJNE R0、#24H、DEL; 时钟达到了24,跳得还不到24MOV P0,#00H; 时钟位清除MOV R0,#00HDEL: MOV R7、#24; 延迟程序LOOP1: MOV R6、#61LOOP2: MOV R5、#170LOOP3: NOP税后利润DJ

10、NZ R5,LOOP3DJNZ R6,LOOP2DJNZ R7,LOOP1PS、P2ADD A、#01H; 秒位数加1PSPR PS 2,aSJMP START结束6 .程序的测试方法和结果,软件的性能分析1 .分段函数改变x的值,以各自不同的x的值运行程序,结果如下(1)X=29H(2)X=21H(3)X=0CH结果与预测一致,程序正确。2.24小时钟程序暂停时思考问题:1 .实现多分支结构程序的主要方法是什么? 举例说明。a:1 .用djnz、JNC等条件分支命令来实现例如,判定2字节的无符号数的大小(分别存储在片内RAM的40H和41H单元中),并将该数存储在42H单元中。 可以通过判断

11、CY的迁移指令JNC实现。 程序如下所示:JUDGE:MOV A、40HCLR CSUBB A,41H日本航空MOV 42H、41HRETLP: MOV 42H、40HRET2 .利用分支表实现。 例如,分支地址表、分支指令表、地址偏移表。 例如,控制成基于R3的值分支为8个分支程序。 使用分支地址表实现:MOV DPTR、#BRATAB; 取表头地址PS、PS 3ADD A、R3; AR32JNC NADDINC DPH; R32位被加到DPH上nadd : PS、R4; 暂时aMOVC A、A DPTR; 取分支处的前八位XCH A,R4Inc公司MOVC A、A DPTR; 取分支处的后8位MOV DPL、a; 分支地址以低位8比特发送DPLMOV DPH、R4; 以分支地址高

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论