微机应用系统设计实验-拆字
- 格式:doc
- 大小:281.00 KB
- 文档页数:3
实验3 拆字、拼字子程序设计
1、实验内容
1)内部RAM 20H单元存放二位压缩的BCD码,
试将BCD码变成相应的ASCII码存放到以
40H单元为首地址的内部RAM单元
2)内部RAM 79H,7AH内存放着个位和十位两位
BCD码, 将它们变成压缩的BCD码存到R2内。
(以上程序要求取数、送数均用间接寻址)
3) 内部RAM 7AH,79H内存放两位BCD码高位在前,将它们拼成一个字节加1并进
行十进制凋整,然后再将个位送79H拾位送7AH。
要求伎用拼字、拆字子程完成。
2、实验步骤
1)打开PV32编程序。
汇编正确进入调试界面。
否则修改程序重新汇编直到通过。
2)打开DATD窗口给加数、被加数赋值
3)单步调试观察并记禄寄存器、内存的变化。
判断程序是否正确。
若发现问题重返编辑
界面,修改、存盘、汇编。
返回调试界面调试通过。
4)设断点调试、记禄结果。
3、实验报告
1)折字子程序流程图及程序清单
2)拼字子程序流程图及程序清单
3)标准BCD码与压缩BCD码的相同点与不同点是什么?
4)*第3问的流程图及程序清单(选做)。
实验四拆字、拼字实验一、实验目的掌握拆字和拼字的程序编写方法。
二、实验原理及实验内容拆字程序:把7000H的内容拆开,高位送7001H地址的低位,低位送7002H地址的低位,7001H、7002H、中。
图7-3实验参考流程图调试方法:单步运行到BP1,观察7000H和A单元中内容是否为68,单步运行到BP2,观察7001H单元中内容是否为6,单步运行到BP3,观察7002H单元中内容是否为8,若是,程序对,若不是,反复修改程序直到正确为止。
同样,可调试拼字程序。
三、参考程序汇编程序:(拆字程序)ORG 0000HAJMP MAINMAIN: MOV SP,#60H /*设置堆栈指针为RAM地址60H*/MOV DPTR,#7000H /*设置存放数据的地址*/MOV A,#68MOVX @DPTR,A /*68送7000H单元*/MOVX A,@DPTRINC DPTRPUSH Acc /*将68压栈*/SW AP A /*高低位交换*/ANL A,#0FH /*屏蔽高四位*/MOVX @DPTR,A /*8送7001H的低四位*/INC DPTRPOP Acc /*68出栈*/ANL A,#0FH /*屏蔽高四位*/MOVX @DPTR,A /*6送7002H的低四位*/END(拼字程序)ORG 0000HAJMP MAINMAIN: MOV DPTR,#7000H /*设置存放数据的地址*/MOV A,#56MOVX @DPTR,A /*置7000H内容为56*/MOVX A,@DPTRSW AP A /*高低位交换*/ANL A,#0F0H /*屏蔽低四位*/MOV R1,AMOV B,R1INC DPTRMOV A,#98MOVX @DPTR,A /*置7000H内容为98*/MOVX A,@DPTRANL A,#0FH /*屏蔽高四位*/MOV R2,BORL A,R2INC DPTRMOVX @DPTR,AENDC语言程序:#include<reg51.h>#include<stdio.h>#include<absacc.h>#include<intrins.h>main(){//拆字程序XBYTE[0x7000] = 0x34;XBYTE[0x7001] = XBYTE[0x7000] & 0x0f; //取低位赋值给0x7001地址XBYTE[0x7002] = XBYTE[0x7000]>>4; //取高位赋值给0x7002地址//拼字程序XBYTE[0x7000] = 0x34;XBYTE[0x7001] = 0x56;//0x7000地址的低位作为0x7002的高位,0x7001地址的低位作为0x7002的低位XBYTE[0x7002] = ((XBYTE[0x7000] & 0x0f)<<4) + (XBYTE[0x7001] & 0x0f);while(1){;}}四、实验仪器和设备Keil软件;五、实验结果和数据分析1、如何将多个单元中的内容拆开?。
一、实验目的1. 了解汉字拆字的基本原理和方法;2. 掌握微机在汉字拆字中的应用;3. 熟悉汉字拆字程序的设计与实现。
二、实验原理汉字拆字是将一个汉字分解成若干个基本部件(称为笔画)的过程。
汉字拆字在汉字识别、汉字编码等领域有着广泛的应用。
微机拆字实验主要利用计算机的强大处理能力,实现对汉字的自动拆分。
三、实验内容1. 实验环境:Windows操作系统,Python编程语言,PyQt5图形界面库。
2. 实验步骤:(1)搭建实验环境,安装Python和PyQt5。
(2)编写汉字拆字程序,主要包括以下模块:① 汉字笔画识别模块:根据汉字笔画特征,识别汉字的各个笔画;② 汉字拆字模块:根据汉字笔画识别结果,将汉字拆分成基本部件;③ 汉字部件编码模块:将拆分后的汉字部件进行编码,便于存储和检索;④ 用户界面模块:实现用户输入汉字,展示拆分结果等功能。
(3)编写实验程序,实现以下功能:① 用户输入汉字,程序自动进行拆字;② 展示拆分结果,包括拆分后的汉字部件和编码;③ 用户可以调整拆分参数,如笔画识别阈值等。
3. 实验结果分析:(1)通过实验,成功实现了汉字的自动拆分,证明了程序的正确性。
(2)实验结果表明,汉字拆字程序具有较高的准确性和稳定性,能够满足实际应用需求。
四、实验总结1. 通过本次实验,掌握了汉字拆字的基本原理和方法,了解了微机在汉字拆字中的应用。
2. 在实验过程中,学习了Python编程语言和PyQt5图形界面库,提高了编程能力。
3. 通过对汉字拆字程序的设计与实现,锻炼了逻辑思维和问题解决能力。
4. 本次实验为后续相关研究奠定了基础,有助于进一步探索汉字拆字技术。
五、实验改进与展望1. 优化汉字笔画识别模块,提高识别准确率。
2. 丰富汉字部件编码方式,便于存储和检索。
3. 研究基于深度学习的汉字拆字方法,提高拆字效果。
4. 将汉字拆字技术应用于实际场景,如汉字识别、汉字编码等。
总之,本次微机拆字实验使我们对汉字拆字技术有了更深入的了解,为今后的学习和研究奠定了基础。
微处理器原理与应用实验日志实验题目:顺序程序设计:拆字和拼字实验目的:1、掌握顺序程序编写方法2、掌握拆字和拼字方法3、学会编写和调试程序的过程和方法4、掌握C51编程方法。
实验要求:1、阅读、运行并调试已给的程序;2、模仿已给程序分别汇编程序和C程序完成拼字程序;实验主要步骤:1、启动计算机,进入Keil C51的集成开发环境;2、根据已给程序分别编辑汇编程序和C程序;3、编辑完成以后对程序进行编译,生成目标代码;4、运行、调试目标代码和进行结果检查;5、根据要求分别编写汇编程序和C程序;6、编译,生成目标代码,分别采用单步和宏单步运行程序,观察有关单元中的内容的变化;7、修改内存单元中的内容在观察存储单元内容的变化;实验结果:汇编程序:ORG 0000HAJMP STARTORG 0100HSTART: MOV A,30HANL A,#0FHSW AP AMOV 32H,AMOV A,31HANL A,#0FHORL 32H,ASJMP $END#include""#include""void main(){DBYTE[0x30]=0x12;DBYTE[0x31]=0x34;DBYTE[0x30]<<=4; //20DBYTE[0x31]&=0x0f; //04DBYTE[0x32]=DBYTE[0x30]|DBYTE[0x31];}心得体会:在本次实验中,发现输入数据有两种方法,一种是在程序中直接赋值,另一种是直接双击0x0200这个单元,就可以对它赋值,最后运行结果一样,但后一种明显改动数据方便,这让我意识到了优化程序的重要性。
在第三个实验中,对用C语言编写的程序,不知道或语句怎么写,在请教老师之后得以解决,但是,在编译程序时没有问题,运行程序出现了错误。
一直没有找到问题,在最后重新建立工程,文件等必要步骤之后,就完成了程序的运行。
单片机拆字程序实验单片机拆字程序实验是一种通过单片机控制LED灯来实现拆字效果的实验。
通过该实验,可以学习单片机编程和数字电子技术知识,既能提高对硬件的理解,又能锻炼编程能力。
一、实验器材1. 单片机开发板2. 16x8 点阵 LED 模块3. 20P 配对排母头4. DC5V 2A 电源适配器5. 杜邦线、电阻等。
二、实验原理本实验通过单片机控制16x8点阵LED模块实现拆字效果,具体原理如下:1. 系统时钟为12M,通过定时器中断驱动点阵扫描显示,显示速度为50ms/帧。
2. 使用一个数组存储汉字的字模数据,每个汉字占据16字节,字节以二进制形式存储,通过给定的字模数据生成汉字的字形。
3. 利用按键调用拆字函数实现对汉字的拆分,如将“福”字拆分为“示”、“口”、“田”。
4. 利用移位运算实现汉字显示的左右滚动,通过控制移位幅度来实现滚动速度。
三、实验步骤1. 连接电路:将16x8点阵LED模块与单片机开发板相连,DC24V接DCIN,GND接GND, DIN接P2.0, CLK接P2.1, CS接P2.2。
2. 编写程序:在Keil C51编译器中编写程序,包括定义汉字数组、各个函数和中断程序等。
3. 烧录程序:将编写好的程序烧录到单片机开发板中。
4. 调试程序:按键触发拆字函数,观察汉字的拆分和滚动效果是否正确。
五、实验注意事项1. 拆字函数必须考虑多种情况,比如汉字的结构、不同拆分方式的可行性等,以保证拆分的正确性。
2. 调试时需要注意数组赋值的顺序,尤其是大端小端问题,否则可能会导致汉字显示出错。
3. 单片机开发板的电源必须与点阵LED模块的电源匹配,以确保正常工作。
六、实验拓展1. 实现更多的汉字拆分和显示样式,比如上下滚动、闪烁等。
2. 利用串口通信实现汉字输入和显示。
3. 尝试利用其他芯片和硬件实现类似的效果。
《微机原理与接口技术》课程实验报告
一、实验目的和要求
实验目的:掌握汇编语言设计和调试方式。
实验要求:通过本实验,掌握8051汇编程序设计以及仿真实验的流程及方法。
二、实验环境
DVCC单片机仿真实验系统独立工作以及连PC机。
三、实验内容及实施
【实验内容】把7000H的内容拆开,高位送7001H低位,低位送7002H低位。
7001H、7002H高位清零,一般本程序用于把数据送显示缓冲区使用。
【源程序】
【实验步骤】
(1)先用存储器读写方法将7000H单元置成34H。
(2)用单步、断点或连续执行程序的方法从起始地址0050H开始运行程序(输人0050H后按STEP为单步,按EXEC为连续)。
(3)按MON键或RESET键退出。
(4)检查7001H和7002H单元中的内容应为03H和04H
四、实验结果
五、实验讨论
用断点方式调试本程序的方法:把光标指向语句左边,然后单击,会出现一个符号。
同样的方法对需要在结束语句左边做同样的事情,然后全速运行,按下停止按钮,程序就会在相应的位置停止。
通过本次实验,对单片机的RAM和ROM的使用有了更加透彻的理解,熟悉了仿真实验系统的键盘操作以及基本仿真软件的使用,并且逐步掌握汇编语言设计和调试方式。
单片机实验3 拆字、拼字子程序设计拆字和拼字是人类阅读、语言学习和表达中的基本技能。
在这个实验中,我们将设计一个单片机程序,通过拆字和拼字的子程序来练习和提高汉字的识别和组词能力。
一、实验目的1. 加深对单片机中汇编语言的理解和掌握。
2. 熟悉单片机的输入、输出、延时等基本指令。
3. 实现汉字的拆字和拼字的子程序,提高汉字识别和组词能力。
二、实验器材1. 单片机开发板(AT89C52)2. 八位数码管3. 九键键盘4. 连接线5. 电脑、Keil C51集成开发环境三、实验内容A.数码管显示编写一个数码管驱动程序,通过按键输入一个数字,将其显示在数码管上。
数码管由8个LED组成,每个LED对应一个二进制位。
因此,我们需要将输入的数字转换为二进制数,并控制相应的LED显示。
B.拆字子程序编写一个拆字子程序,将输入的汉字拆成单个的汉字拼音。
汉字的拼音有一个对应的二进制编码,可参考GB2312中的表格。
在程序中,我们需要首先读取键盘输入的汉字,然后将汉字转换为相应的二进制代码,并将其存储在单片机中。
接着,我们需要将二进制代码分解成单个的拼音,并依次显示在数码管上。
四、程序设计在程序中,我们首先需要定义数码管所对应的输出端口和数码管的位数。
```;定义IO端口和数码管位数MOV P0,#0MOV P2,#0x01MOV DPTR,#TABLEMOVX A,DPTRMOV P2,#0x00MOV R0,#0x00MOV R1,#0x01MOV R2,#0x00MOV R3,#0x00MOV R4,#0x00MOV R5,#0x00MOV R6,#0x00MOV R7,#0x00```在键盘输入数字后,我们需要将其转换为二进制数,并存储在单片机的寄存器中。
对于一个单独的数字,我们可以用以下程序将其转换为二进制码:```;循环显示DISPLAY:MOV P0,#0xFFCLR CJNB R0,SKIP1MOV P0,#0xFESKIP1:RRC AJNB R1,SKIP2MOV P0,#0xFDSKIP2:RRC AJNB R2,SKIP3MOV P0,#0xFBSKIP3:RRC AJNB R3,SKIP4MOV P0,#0xF7SKIP4:RRC ADJNZ R5,DISPLAY```在将汉字转换为二进制编码之后,我们需要编写一个循环程序来分解二进制编码,并将每个拼音对应的二进制代码显示在数码管上。
一、实验目的1. 理解字符删除在微机操作中的基本原理和方法。
2. 掌握使用编程语言实现字符删除功能的方法。
3. 培养动手实践能力和编程思维能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验原理字符删除在微机操作中是一项基本操作,主要涉及字符串的修改。
在Python中,字符串是不可变的,因此删除字符实际上是通过截取字符串的方式实现的。
具体操作如下:1. 使用字符串的切片功能截取删除字符后的字符串。
2. 将截取后的字符串赋值给原字符串变量。
四、实验步骤1. 导入Python的字符串模块。
```pythonimport string```2. 定义一个字符串变量,包含待删除的字符。
```pythons = "Hello, World!"```3. 定义一个删除字符的函数。
```pythondef delete_char(s, char):# 使用字符串的find()方法查找字符的位置index = s.find(char)if index != -1:# 如果找到字符,则使用切片截取删除字符后的字符串new_s = s[:index] + s[index+1:]return new_selse:# 如果未找到字符,则直接返回原字符串return s```4. 调用函数,删除指定字符。
```pythondelete_s = delete_char(s, 'o')print(delete_s)```5. 分析实验结果,验证字符删除功能是否实现。
五、实验结果与分析1. 输入字符串:"Hello, World!"2. 输出结果:"Hell, Wrld!"实验结果表明,成功删除了字符串中的字符'o',验证了字符删除功能的实现。
六、实验总结本次实验通过使用Python编程语言,实现了字符删除功能。
计算机原理实验室实验报告
课程名称:
姓名付振华学号06 班级0820551 成绩
设备名称及软件环境
实验名称单片机拆字实验实验日期
一.实验内容
在单片机模拟仿真器中实现
1.把2000H的内容拆开(高位送2001H低位,低位送2002H低位,2001H、2002H高位清零)
2. 观察单片机机器码以及它在ROM中存储的格式。
3. 观察特殊功能寄存器(SFR)的内容在单片机执行指令时的变化及作用。
二.理论分析或算法分析
这个实验实现将2000H中高低两位的数据分离。
分别读取高低位数据。
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
ORG 0000H
LJMP SE02
ORG 0660H
SE02: MOV DPTR,#2000H
MOVX A,@DPTR
MOV B,A ; (2000)→A→B
SWAP A ; 交换
ANL A,#0FH ; 屏蔽高位
INC DPTR ; 字节数加1
MOVX @DPTR,A ; 送2001H
INC DPTR
MOV A,B
ANL A,#0FH ; (2000)内容屏蔽高位
MOVX @DPTR,A ; 送2002H
LOOP: SJMP LOOP
END
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)实现了将存储单元中数据高低为的分离。
五.结论
报告提交日期。
微机应用系统设计学生实验报告
课程名称微机应用系统设计实验名称微机应用系统设计实验实验教室实验日期班级
学生姓名实验成绩任课教师(签名)
实验目的
学习仿真软件使用方法;通过编写清零程序、拆字和数据块传送等程序,掌握简单汇编语言设计和调试方法。
实验内容
熟悉dais-MCS51仿真开发系统,通过编写简单的汇编语言程序学习仿真软件的使用。
观察编译工具、调试工具、调试窗口、寄存器窗口、存储器窗口的内容及使用方法。
实验仪器设备1. PC机一台;
2. 单片机教学实验系统一套。
包括Dais-52PH+ 实验箱一个和Dais—MCS51仿真软件一套。
程
序
流
程
图
、
电
路
图
拆字程序流程图:
源程序清单拆字程序源代码:
ORG 0000H
LJMP Loop
ORG 0010H
Loop: MOV DPTR,#2000H
MOVX A,@DPTR ;片外数据存储传送到寄存器A中
MOV B,A ;将原数保存到寄存器B中
ANL A,#0F0H ;将原数的低四位清零
SWAP A ;循环左移4位,将高四位与低四位互换 INC DPTR
MOVX @DPTR,A ;将原数的高四位存入2001H单元中
MOV A,B
ANL A,#0FH ;将原数的高四位清零
INC DPTR
MOVX @DPTR,A ;将原数的低四位存入片外2002H单元中 SJMP $
END
结果记录及分析
调试时,在ADDRESS窗口输入X:2000H查看外部数据存储器的数据。
可以设置断点,双击每个位置来改变外部数据存储器的值,然后用单步或连续方式运行程序,可以看到:
如果2000H中存入12H
运行后2001H单元中为01H,2002H单元中为02H。
收获感想
通过本次实验,学习到如何能熟练掌握逻辑指令ANL的用法,从而完成清零的功能,同时也熟悉了其他移位指令的用法。
对外部存储器传送的MOVX 指令的使用也有了进一步的了解,能更深入的理解拆字的过程及完成流程步骤要求。
思考题:
(1)如果将2001H存储单元的低位和2002H单元的低位合并放在2003H单元,其中2001H存储单元的低位放在2003H单元低位,2002H单元的低位放在2003H 单元高位,该如何编写程序?
ORG 0000H
LJMP Loop
ORG 0010H
Loop:
MOV DPTR,#2000H
MOVX A,@DPTR ;片外数据存储传送到寄存器A中
MOV B,A ;将原数保存到寄存器B中
ANL A,#0F0H ;将数的低四位清零
SW AP A ; 循环左移4位,将高四位与第四位互换
INC DPTR
MOVX @DPTR,A ;将原数的高四位存入2001H单元中MOV A,B
ANL A,#0FH ;将原数的高四位清零
INC DPTR
MOVX @DPTR,A ;将原数的低四位存入2002H单元中MOV DPTR,#2000H ;再让数据指针DPTR指向2000H单元MOVX A,@DPTR
SW AP A
MOV DPTR,#2003H ;将原数高低四位互换后存入2003H单元中MOVX @DPTR,A
SJMP $
END。