实验五 串操作
实验五多重循环程序
EQU
符号定义伪指令EQU就是用于给某个表 达式赋予一个名字,或者说是使某个字符 名等于某个表达式的值 用法: 名字 EQU 表达式
地址计数器$ 地址计数器
在汇编程序对源程序汇编的过程中,使用地址计数器来保存当前正在汇编的 指令的地址。地址计数器的值在汇编语言 汇编语言中可用$来表示。 汇编语言 当$用在伪指令 伪指令的参数字段时,它所表示的是地址计数器的当前值 伪指令 汇编语言允许用户直接用$来引用地址计数器的值,例如指令: 汇编语言 JMP $+ 6 当$用在伪指令 伪指令的参数字段时,则和它用在指令中的情况不同,它所表示的是 伪指令 地址计数器的当前值。例如指令: ARRAY DW 1, 2, $+ 4, 3, 4, $+ 4 假设汇编时ARRAY 分配的偏移地址为0074H,则汇编后,$+ 4所在的两个 字单元: (ARRAY+4)=0078+4=007CH (ARRAY+0A)=007E+4=0082H
实验五、多重循环程序
实验目的: ①掌握多重循环程序和排序程序设计方法。 ②掌握带符号数的比较转移指令:JL,JLE,JG,JGE ③伪指令EQU及操作符‘$’的使用。转移指令JMP p133页
1)段内直接转移 2 )段内间接转移 3)段间直接转移 4)段间间接转移 JMP lable JMP BX OR JMP WORD PRT[BX+DI] JMP FAR LABLE JMP OPRD OR JMP DWORD PTR [BX]
条件转移指令
JCXZ JG/JNLE JGE /JNL JS JNX JA/JNBE JAE/JNB JL/JNGE JLE /JNG JO JNO
条件转移指令JCC(P135页) 所有的条件转移指令都是直接寻址方式的短转移,即只能在以当 前IP值为中心的-127~+128字节范围内转移.条件转移指令不影 响标志位
《数据结构》实验指导书
1.单链表的类型定义
#include <stdio.h>
typedef int ElemType;//单链表结点类型
typedef struct LNode
{ElemType data;
struct LNode *next;
2.明确栈、队列均是特殊的线性表。
3.栈、队列的算法是后续实验的基础(广义表、树、图、查找、排序等)。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验四 串
一、预备知识
1.字符串的基本概念
2.字符串的模式匹配算法
二、实验目的
1.理解字符串的模式匹配算法(包括KMP算法)
typedef struct
{ElemType *base;
int front,rear;
} SqQueue;
4.单链队列的类型定义
typedef struct QNode
{QElemType data;
typedef struct list
{ElemType elem[MAXSIZE];//静态线性表
int length; //顺序表的实际长度
} SqList;//顺序表的类型名
五、注意问题
1.插入、删除时元素的移动原因、方向及先后顺序。
4.三元组表是线性表的一种应用,通过它可以更好地理解线性表的存储结构。同时矩阵又是图的重要的存储方式,所以这个实验对更好地掌握线性表对将来对图的理解都有极大的帮助。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验六 树和二叉树
一、预备知识
1.二叉树的二叉链表存储结构
实验五无菌术
2 注意事项
戴干手套时,先穿衣,后戴手套; 未戴手套的手只可接触手套内面,已戴手套的手 只可接触手套外面; 更换破损手套时,手套未破的手只能接触破损手 套外面,完整脱去,勿接触手的皮肤; 冲洗手套外滑石粉.
四 皮肤消毒
1消毒药物 2消毒方法 3消毒方式 4消毒原则 5消毒范围 6注意事项
1 消毒药物
2.5---3%碘酊、70%酒精、2---4%红汞酊 、 1:1000硫柳汞酊、10%活力碘、碘复原 液; 对于粘膜、婴儿皮肤、口腔面部皮肤、肛门、会阴 及外生殖器一般使用10%活力碘、 2---4%红汞 酊或1:1000 硫柳汞酊.
2消毒方法
一般由第一助手在手臂消毒后使用环钳 夹持蘸有消毒剂的棉球或纱布用力消毒,第 二遍范围较第一遍小,依次类推,至少三遍.
五 铺巾
1 铺巾原则 2 铺巾范围 3 铺巾方法 4 铺巾顺序 5 注意事项
1铺巾原则
中等以上手术特别是涉及深部手术,切口周 围至少4—6层无菌巾,周边2层.
2铺巾范围
头侧过患者头部和麻醉架,下过患者足部, 两侧下垂过手术床边30cm以下.
3铺巾方法
手术巾---上下方中单---双层有孔大单; 铺完手术巾后,四周布巾钳夹住.
1 穿衣要领和步骤
要领
取衣找宽地---提衣抖衣---上抛,手入袖---身 后拽衣手出袖---弯腰递带系带. 步骤 取无菌手术衣---找宽敞地; 提衣领---轻轻抖开衣; 向上轻抛---双手前伸迅速插入衣袖口内; 巡回护士身后抓衣领角后拉---双手伸出袖口; 稍弯腰手交叉递带(带不交叉); 护士系带.
外科无菌技术
北京理工大学汇编实验五实验报告概要
本科实验报告实验名称:子程序设计实验实验五子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名PROC [near/far] 过程体RET过程名ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1. )子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。
.段内调用与返回:调用子程序指令与子程序同在一个段内。
因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。
3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU内部寄存器内容的保护和恢复。
一般利用堆栈实现现场保护和恢复的格式:过程名PROC[NEAR/FAR]PUSH AXPUSH BX..PUSH DX...POP DX...POP AXRET过程名ENDP4.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。
2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。
电力电子实验操作步骤
实验一锯齿波同步移相触发电路实验实验方法和操作步骤:1.将NMCL-36面板上左上角的同步电压输入接NMCL—32的U、V端,NMCL-36为锯齿波触发电路。
2.打开漏电断路器电源,闭合主电路电源开关,并打开NMCL-31面板上右上角的低压电源开关,用示波器观察锯齿波触发电路各观察孔的电压波形,示波器的地线接于“7”端。
同时观察“1”、“2”孔的波形,了解锯齿波宽度和“1”点波形的关系。
观察“3”~“6”孔波形及输出电压U G1K1的波形,调整电位器RP1,使“3”的锯齿波刚出现平顶,记下各波形的幅值与宽度,比较“3”孔电压U3与U5的对应关系。
3.调节脉冲移相范围将NMCL—31的U g连线接入NMCL-36面板上的U ct ,将NMCL—31的“G”输出电压调至0V,即将控制电压U ct调至零,用示波器观察U1电压(即“1”孔)及U5的波形,调节偏移电压U b(即调RP2),使α=180O。
调节NMCL—31的给定电位器RP1,增加U c t,观察脉冲的移动情况,要求U ct=0时,α=180O,U ct=U max时,α=30O,以满足移相范围α=30O~180O的要求。
4.调节U c t,使α=60O,观察并记录U1~U5及输出脉冲电压U G1K1,U G2K2的波形,并标出其幅值与宽度。
用导线连接“K1”和“K3”端,用双踪示波器观察U G1K1和U G3K3的波形,调节电位器RP3,使U G1K1和U G3K3间隔1800。
各点波形参考如下:实验二三相半波可控整流电路的研究实验方法和操作步骤:1.按图接线,未上主电源之前,检查晶闸管的脉冲是否正常。
图1-5 三相半波可控整流电路(1)用示波器观察MCL-33的双脉冲观察孔,应有间隔均匀,幅度相同的双脉冲(2)检查相序,用示波器观察“1”,“2”单脉冲观察孔,“1” 脉冲超前“2” 脉冲600,则相序正确,否则,应调整输入电源。
(3)用示波器观察每只晶闸管的控制极,阴极,应有幅度为1V—2V的脉冲。
实验五 交流电路阻抗参数及功率因数的测量和提高的测量实验
实验五 功率因数的测量和提高
一. 实验目的
1. 学会用功率表法测量元件的交流等效参数的方法。
2. 学会功率表的接法和使用。
3. 学习感性负载电路提高功率因数的方法
二. 实验内容
1. 电感阻抗参数的测量,按图5-1接线。
分别测量40W 白炽灯(R),电感线圈(L) 的等效参数。
图5-1
2. 电感阻抗两端并联电容,接线如图5-2。
逐渐加大电容量,每改变一次电容量,都要
测量端电压U ,总电流I ,电感阻抗电流I RL ,电容电流I C 以及总功率P 之值,记录于表5-2。
图5-2
Z
3.渐加大电容容量过程中,注意观察并联谐振现象,并找到谐振点。
三.注意事项
1. 本实验直接用市电220V交流电源供电,实验中要特别注意人身安全,不可用手直接触
摸通电线路的裸露部分,以免触电,进实验室应穿绝缘鞋。
2. 自耦调压器在接通电源前,应将其手柄置在零位上,调节时,使其输出电压从零开始
逐渐升高。
每次改接实验线路及实验完毕,都必须先将其旋柄慢慢调回零位,再断电源。
必须严格遵守这一安全操作规程。
四.实验设备
1.数字万用表 1台
2.电量仪 1台
3.白炽灯 1只40W /220V
4.电感线圈 1只
5.电容器 2只1μF,4.7μF/500V
五.分析和讨论
1.根据实验数据,分别绘出电压、电流相量图,验证相量形式的基尔霍夫定律。
2.讨论改善电路功率因数的意义和方法。
微机原理实验四串操作指令
实验四串操作指令程序实验一、实验目的1. 熟悉五种串操作指令的功能,会编写常用的串操作应用程序。
2. 会使用DEBUG 命令查看串操作运行的结果。
二、实验环境1. 硬件:PC 微机2. 软件:Masm for Windows 汇编集成开发环境三、实验讲义串指连续存放在存储器中的一些数据字节、字或者双字。
串操作允许对程序连续存放的数据块进行操作。
这是唯一一种可以从存储器到存储器的指令。
源串一般存放在数据段,偏移地址由SI 指定;目标串必须在附加段,偏移地址由DI 指定。
在每次进行串操作后,SI 和DI 两个指针会自动修改。
修改的是增量方向还是减量方向由标志位DF 决定,DF=0 为增量操作,DF=1 为减量操作。
CX 中存放的是数据块的长度,可在CX 前加重复前缀标志,对串进行连续操作。
执行串指令之前,一般先进行如下操作:源串首地址(末地址)→ SI目的串首地址(末地址)→ DI串长度→ CX建立方向标志DF1. 重复前缀标志助记符判断条件说明REP CX 0 CX=CX-1,若CX 0 则重复REPE 或REPZ CX 0 且ZF=1 CX=CX-1,若CX 0 且ZF=1 则重复REPNE 或REPNZ CX=0 且ZF=0 EX=CX-1,若CX 0 且ZF=0 则重复2. 方向标志指令方向标志由标志位DF 决定,有CLD 和STD 两种指令。
CLD 将DF 置0,地址为增量操作。
STD 将DF 置1,地址为减量操作。
3. 串传送指令格式: [REP] MOVS DESTS, SRCS[REP] MOVSB/ MOVSW / MOVSD功能:将DS:SI 中的源串数据传送到ES:DI 规定的目的串单元中。
加重复前缀REP 可实现连续存放的数据块的传送。
例1:将源串中前三个字节的数据传送到目的串。
源串在数据段(DATAS)中,存放在SRC 单元中;目的串在附加数据段(EDATAS)中,存放在DEST 单元中。
实验5:CC2530 DMA 实验
计算机科学与技术学院实验报告课程名称:无线传感器网络原理与应用实验五 CC2530 DMA 实验一、实验目的透过本实验的学习,使使用者熟悉 CC2530 芯片的 DMA 传输功能相关暂存器的配置及其使用方法。
二、实验内容用CC2530 芯片内 DMA 控制器将一字符串从源位址转移到目标位址。
三、实验环境硬件:鼎轩 WSN 实验箱(汇聚网关、烧录线、平行串口线),PC 机;软件:IAR 软件,串口助手。
四、实验步骤1. DMA 简介直接存取访问(DMA)控制器可以用来减轻 8051CPU 内核传送数据操作的负担,从而实现在高效利用电源的条件下的高性能。
只需要 CPU 极少的干预,DMA 控制器就可以将数据从诸如 ADC 或 RF 收发器的外设单元传送到存储器。
DMA 控制器协调所有的 DMA 传送,确保 DMA 请求和 CPU 存储器访问之间按照优先等级协调、合理地进行。
DMA 控制器含有若干可编程的 DMA 通道,用来实现存储器-存储器的数据传送。
DMA 控制器控制整个 XDATA 存储空间的数据传送。
由于大多数 SFR 寄存器映射到 DMA 存储器空间,这些灵活的 DMA 通道的操作能够以创新的方式减轻 CPU 的负担,例如,从存储器传送数据到USART,或定期在ADC 和存储器之间传送数据样本,等等。
使用 DMA 还可以保持 CPU 在低功耗模式下与外设单元之间传送数据,不需要唤醒,这就降低了整个系统的功耗。
DMA 控制器的主要功能如下:(1) 5 个独立的 DMA 通道;(2) 3 个可以配置的 DMA 通道优先级;(3) 32 个可以配置的传送触发事件;(4) 源地址和目标地址的独立控制;(5) 单独传送、数据块传送和重复传送模式;(6) 支持传输数据的长域域,设置可变传输长度;(7) 既可以工作在字模式,又可以工作在字节模式。
2.DMA 参数配置DMA 控制器的配置需要由使用者软件来完成。
实验五移位寄存器及其应用
实验五移位寄存器及其应用一、实验目的1、掌握中规模4位双向移位寄存器逻辑功能及使用方法。
2、熟悉移位寄存器的应用—实现数据的串行、并行转换和构成环形计数器。
二、实验原理1、移位寄存器是一个具有移位功能的寄存器,是指寄存器中所存的代码能够在移位脉冲的作用下依次左移或右移。
既能左移又能右移的称为双向移位寄存器,只需要改变左、右移的控制信号便可实现双向移位要求。
根据移位寄存器存取信息的方式不同分为:串入串出、串入并出、并入串出、并入并出四种形式。
本实验选用的4位双向通用移位寄存器,型号为CC40194或74LS194,两者功能相同,可互换使用,其逻辑符号及引脚排列如图10-1所示。
图10-1 CC40194的逻辑符号及引脚功能其中 D0、D1、D2、D3为并行输入端;Q、Q1、Q2、Q3为并行输出端;SR为右移串行输入端,SL 为左移串行输入端;S1、S为操作模式控制端;R C为直接无条件清零端;CP为时钟脉冲输入端。
CC40194有5种不同操作模式:即并行送数寄存,右移(方向由Q0→Q3),左移(方向由Q3→Q),保持及清零。
S 1、S和R C端的控制作用如表10-1。
2、移位寄存器应用很广,可构成移位寄存器型计数器;顺序脉冲发生器;串行累加器;可用作数据转换,即把串行数据转换为并行数据,或把并行数据转换为串行数据等。
本实验研究移位寄存器用作环形计数器和数据的串、并行转换。
(1)环形计数器把移位寄存器的输出反馈到它的串行输入端,就可以进行循环移位,如图10-2所示,把输出端 Q3和右移串行输入端SR相连接,设初始状态QQ1Q2Q3=1000,则在时钟脉冲作用下Q0Q1Q2Q3将依次变为0100→0010→0001→1000→……,如表10-2所示,可见它是一个具有四个有效状态的计数器,这种类型的计数器通常称为环形计数器。
图10-2 电路可以由各个输出端输出在时间上有先后顺序的脉冲,因此也可作为顺序脉冲发生器。
五C语言程序设计
五《C语言程序设计》实验四选择结构程序设计一、实验目的1、掌握分支语句的格式和功能。
2、掌握选择结构的程序设计。
3、掌握分支结构的嵌套。
二、实验内容与要求1、编程,计算下列分段函数值:x2+3x-4,x<0且x≠-4f(x)= x2-6x+5,0=x<10且x≠1及x≠5x2-4x-1,其他要求如下:(1)用if语句实现分支。
自变量x与函数值均采用双精度类型。
(2)自变量x值从键盘输入,且输入前要有提示信息。
(3)数据的输出格式采用以下形式:x=输入值,f(x)=计算值(4)分别以-3.0,-1.0,0.5,1.5,2.5,3.5,4.5,5.5为自变量,运行该程序。
记录结果。
(5)源程序以sy4_1.c存盘。
2、编程,将一个百分制成绩转换成等级制成绩。
具体要求如下:(1)百分制与等级制的对应关系如下:(2)用switch语句实现该功能。
(3)用键盘输入百分制成绩,输入前要有提示信息。
(4)要能判断输入数据的合理性,对于不合理的数据应输出错误信息。
(5)输出结果中应包含百分制成绩和成绩等级。
(6)分别输入成绩-10,99,60,85,70,101,45,运行该程序。
记录结果。
(7)源程序以sy4_2.c存盘。
三、思考题1、实现选择结构程序设计的方法有哪几种?各有什么特点?适用条件是什么?2、如何设置选择结构中的判断条件?它在程序设计中的意义何在?实验五循环结构程序设计(1)一、实验目的1、掌握循环的概念。
2、掌握三种常用的循环语句的格式和功能。
3、初步掌握循环结构的编程方法。
二、实验内容与要求1、编程,分别利用三种循环语句,求1+2+3+…50之和。
要求如下:(1)输出计算结果;数据的输出格式采用以下形式:1+2+3+…50=计算值(2)源程序分别以sy5_1.c、sy5_2.c、sy5_3.c存盘。
2、编程,穷举算法解百马百担问题(有100匹马驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大、中、小马各多少?)要求如下:(1)输出计算结果;在数据输出之前应有提示信息。
Python语言程序设计形考二实验五
Python语言程序设计形考二实验五实验目的本实验旨在通过使用Python语言编程,练并巩固对于函数的理解和运用。
实验要求编写一个Python程序,实现以下功能:1. 输入一个字符串,检查该字符串中是否包含字母和数字。
若包含,输出字符串中的字母和数字个数;若不包含,输出提示信息。
2. 输入一个字符串,对该字符串进行反转,输出反转后的字符串。
3. 输入两个字符串,判断第二个字符串是否是第一个字符串的子串。
若是,输出提示信息;若不是,输出提示信息。
实验步骤1. 定义函数`check_alphanumeric`- 输入:一个字符串`str`- 输出:检查结果字符串- 过程:检查输入字符串是否包含字母和数字,统计其中的字母和数字个数,并返回检查结果字符串。
2. 定义函数`reverse_string`- 输入:一个字符串`str`- 输出:反转后的字符串- 过程:将输入字符串反转后返回。
3. 定义函数`check_substring`- 输入:两个字符串`str1`和`str2`- 输出:检查结果字符串- 过程:判断第二个字符串是否是第一个字符串的子串,若是,返回检查结果字符串;若不是,返回提示信息。
4. 调用上述函数,实现需求功能。
实验代码示例def check_alphanumeric(str):检查字符串是否包含字母和数字if any(c.isalpha() for c in str) and any(c.isdigit() for c in str):统计字母和数字个数alpha_count = sum(1 for c in str if c.isalpha())digit_count = sum(1 for c in str if c.isdigit())return f"该字符串包含字母和数字。
字母个数为{alpha_count},数字个数为{digit_count}。
"else:return "该字符串不包含字母和数字。
实验5 蒙特卡罗法求PI及排序算法
浙江大学城市学院实验报告课程名称多核与并行程序设计实验项目名称实验五蒙特卡罗法求PI及排序算法学生姓名专业班级学号实验成绩指导老师(签名)日期【实验环境】硬件平台:联想4核,4GZ内存编译器:Microsoft Visual Studio C++ 6.0操作系统:Windows 2003 server sp2测试数据集合:由随机数函数产生的数据集合【实验1】一、问题描述蒙特卡洛算法可理解为通过大量实验,模拟实际行为,来收集统计数据。
本例中,算法随机产生一系列点,模拟这些点落在如下图所示的正方形区域内的情况。
其几何解释如下11图1如图1所示,正方形边长为1,左下顶点与原点重合,两边分别与x,y轴重合。
曲线为1/4圆弧,圆心位于原点,与正方形左下定点重合,半径为1。
正方形面积S1=1,圆弧内面积S2=ππ41412=r。
算法模拟大量点随机落在此正方形区域内,落在圆弧内的点的数量(n2)与点的总数(n1)的比例与面积成正比关系。
即π42121==S S n n (1) 由此可得124n n =π (2)因此,只要计算出落在圆弧内的点的数量在点总数中所占的比例,就能求出π的值。
由图1可知,所有点均落在正方形范围内,因此点的x 坐标满足10≤≤x 。
又,当点落在圆弧范围内,则点的二维坐标关系满足122≤+y x 。
检验每一个点是否满足此关系即可判定改点是否落在圆弧内。
二、串行算法描述本项目中使用了标准C 语言库中的产生随机数函数。
该函数原型为:int rand( void );此函数产生随机数列,每次调用时均返回0到RAND_MAX 之间的一个整数。
void srand( unsigned int seed );此函数为rand ()函数所生成的伪随机数序列设置起始点,使之产生不同的伪随机数。
算法:产生2n 个随机数据,范围[0,1],对每个数据点计算其坐标是否满足122≤+y x ,统计满足此关系的点的数量count ,则 n count4=π三、并行算法3.1 并行算法描述算法步骤:1、确定需要产生的点的个数n ,参与运行的处理器数m ;2、对每一个处理器,生成两个随机数x ,y ,范围[0,1];3、判断两个随机数x ,y 是否满足122≤+y x ;4、若满足,则变量COUNT i++;5、重复步骤2-4,直至每个处理器均生成n/m个随机点;6、收集COUNT i的值,并累加至变量COUNT中,此即为随机点落在圆弧内的数量;7、通过(2)式计算 的值。
C语言上机操作指导实验五数组(1) 实验八函数(2)
第 4页,共 14页
《C 程序设计》实验及课程设计项目报告
下标= a 2
0
1 8
2 16
3 14
4 1 10
5 8
6
7 16
8 4
9 20
10 6
部分源代码: k=0; if ( a[k]<a[1] ) 真 k=1; 执行 k=0; if ( a[k]<a[2] ) 假 for ( i=1; i<10; i++ ) k=2; 不执行 if ( a[k]<a[i] ) if ( a[k]<a[3] ) 真 k=i; k=3; 执行 相关知识:①删除数组元素的概念;②移动数组元素的算法;③求最大值位置的算法。 7. 以下 sy30.c 程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输 出低于平均分的学生成绩,用输入负数结束输入。请填空: #include <stdio.h> void main( ) { float x[1000], sum=0.0, ave, a; int n=0, i; printf ("Enter mark : \n") ; scanf("%f", &a); while (a>=0.0 && n<1000) { sum+= ; x[n]= ; n++; scanf("%f", &a); } ave= ; printf ("Output : \n"); printf ("ave = %f\n", ave); for (i=0; i<n; i++) if ( ) printf("%f\n", x[i]); } 8.打印如下杨辉三角形 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 编程点拨: 杨辉三角形有如下特点: 1 只有下半三角形有确定的值; 2 第一列和对角线上的元素值都是 1; 3 其它元素值均是前一行同一列元素与前一行前一列元素之和。
Zigbee实验5 CC2530串口通信实验
#include <iocc2530.h>
#define LED0 P1_0
#define LED1 P1_1
unsigned char Flag_RX,temp;
void led_init(void)
{
P1SEL &= ~0x03;
//P1.0 P1.1为普通 I/O 口
P1DIR |= 0x03;
D7 为 SPI 时钟极性:0 为负时钟极性,1 为正时钟极性; D6 为 SPI 时钟相位: D5 为传送为顺序:0 为最低有效位先传送,1 为最高有效位先传送。 D4~D0 为波特率设置(详见下表):
串口通信流程如下: 图 1.5.1 串口通信实验流程图
1.5.5 实验步骤
1)按照1.1.5所学步骤创建工程,编辑代码:
D7 位为当前 32K 时间振荡器频率。0 为 32KRC 震荡,1 为 32K 晶振。 D6 位为当前系统时钟选择。0 为 32M 晶振,1 为 16M RC 震荡。 D5~D3 为当前定时器输出标记。000 为 32M ,001 为 16M ,010 为 8M , 011 为 4M ,100 为 2M ,101 为 1M ,110 为 500K ,111 为 250K 。 D2~D0 为当前系统主时钟。000 为 32M ,001 为 16M ,010 为 8M ,011 为 4M ,100 为 2M ,101 为 1M ,110 为 500K ,111 为 250K 。 U0CSR:USART0 控制与状态。
编程实现 CC2530 和 PC 之间的双向串口通信。
1.5.4 实验原理
本次实验所学习到的寄存器: CLKCONCMD:时钟频率控制寄存器。
D7 位为 32K 时间振荡器选择,0 为 32KRC 震荡,1 为 32K 晶振。 D6 位为系统时钟选择。0 为 32M 晶振,1 为 16M RC 震荡。当 D7 位为 0 时 D6 必须为 1。 D5~D3 为定时器输出标记。000 为 32M ,001 为 16M ,010 为 8M ,011 为 4M ,100 为 2M ,101 为 1M ,110 为 500K ,111 为 250K 。默认为 001。 需要注意的是:当 D6 为 1 时,定时器频率最高可采用频率为 16M 。 D2~D0:系统主时钟选择:000 为 32M ,001 为 16M ,010 为 8M ,011 为 4M ,100 为 2M ,101 为 1M ,110 为 500K ,111 为 250K 。当 D6 为 1 时,系统主时钟最高可采用频率为 16M 。 CLKCONSTA:时间频率状态寄存器。
实验5 多路复用式串口操作
南昌大学实验报告学生姓名:王维学号:6100212202专业班级:网工121班实验类型:□验证□综合□设计□创新实验日期:4/2实验成绩:一、实验项目名称实验5:多路复用式串口操作二、实验项目名称通过编写多路复用式串口读写,进一步理解多路复用函数的用法,同时更加熟练掌握Linux 设备文件的读写方法。
三、实验内容本实验主要实现两台机器(宿主机和目标机)之间的串口通信,每台机器都可以发送和接收数据。
除了串口设备名称不同(宿主机上使用串口1:/dev/ttyS1,而在目标机上使用串口2:/dev/ttyS2),两台机器上的程序基本相同。
四、实验步骤(1)流程图两台机器上的程序使用同样的流程图。
(2)编写代码/* uart_api.h */#ifndef UART_API_H#define UART_API_H#define GNR_COM 0#define USB_COM 1#define COM_TYPE GNR_COM#define MAX_COM_NUM 3#define HOST_COM_PORT 1#define TARGET_COM_PORT 2#define BUFFER_SIZE 1024#define TIME_DELAY 180#define SEL_FILE_NUM 2#define RECV_FILE_NAME "recv.dat"int open_port(int com_port);int set_com_config(int fd,int baud_rate, int data_bits, char parity, int stop_bits); #endif /* UART_API_H *//* uart_api.c */#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <termios.h>#include <errno.h>#include "uart_api.h"/*打开串口函数*/int open_port(int com_port){int fd;#if (COM_TYPE == GNR_COM)char *dev[] = {"/dev/ttyS0", "/dev/ttyS1", "/dev/ttyS2"};#elsechar *dev[] = {"/dev/ttyUSB0", "/dev/ttyUSB1", "/dev/ttyUSB2"};#endifif ((com_port < 0) || (com_port > MAX_COM_NUM)){return -1;}fd = open(dev[com_port - 1], O_RDWR|O_NOCTTY|O_NDELAY);if (fd < 0){perror("open serial port");return(-1);}/*恢复串口为阻塞状态*/if (fcntl(fd, F_SETFL, 0) < 0){perror("fcntl F_SETFL\n");}/*测试是否为终端设备*/if (isatty(STDIN_FILENO) == 0){perror("standard input is not a terminal device");}return fd;}int set_com_config(int fd,int baud_rate, int data_bits, char parity, int stop_bits){struct termios new_cfg,old_cfg;int speed;/*保存测试现有串口参数设置,在这里如果串口号等出错,会有相关的出错信息*/ if (tcgetattr(fd, &old_cfg) != 0){perror("tcgetattr");return -1;}/*步骤一,设置字符大小*/new_cfg = old_cfg;cfmakeraw(&new_cfg);new_cfg.c_cflag &= ~CSIZE;/*设置波特率*/switch (baud_rate){case 2400:{speed = B2400;}break;case 4800:{speed = B4800;}break;case 9600:{speed = B9600;}break;case 19200:{speed = B19200;}break;case 38400:{speed = B38400;}break;default:case 115200:{speed = B115200;}break;}cfsetispeed(&new_cfg, speed);cfsetospeed(&new_cfg, speed);/*设置停止位*/switch (data_bits){case 7:{new_cfg.c_cflag |= CS7;}break;default:case 8:{new_cfg.c_cflag |= CS8;}break;}/*设置奇偶校验位*/switch (parity){default:case 'n':case 'N':{new_cfg.c_cflag &= ~PARENB;new_cfg.c_iflag &= ~INPCK;}break;case 'o':case 'O':{new_cfg.c_cflag |= (PARODD | PARENB);new_cfg.c_iflag |= INPCK;}break;case 'e':case 'E':{new_cfg.c_cflag |= PARENB;new_cfg.c_cflag &= ~PARODD;new_cfg.c_iflag |= INPCK;}break;case 's': /*as no parity*/case 'S':{new_cfg.c_cflag &= ~PARENB;new_cfg.c_cflag &= ~CSTOPB;}break;}/*设置停止位*/switch (stop_bits){default:case 1:{new_cfg.c_cflag &= ~CSTOPB;}break;case 2:{new_cfg.c_cflag |= CSTOPB;}}/*设置等待时间和最小接收字符*/new_cfg.c_cc[VTIME] = 0;new_cfg.c_cc[VMIN] = 1;/*处理未接收字符*/tcflush(fd, TCIFLUSH);/*激活新配置*/if((tcsetattr(fd, TCSANOW, &new_cfg)) != 0) {perror("tcsetattr");return -1;}return 0;}/* com_host.c */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include "uart_api.h"int main(void){int fds[SEL_FILE_NUM], recv_fd, maxfd;char buff[BUFFER_SIZE];fd_set inset,tmp_inset;struct timeval tv;unsigned loop = 1;int res, real_read, i;if ((recv_fd = open(RECV_FILE_NAME, O_CREAT|O_WRONL Y, 0644)) < 0) {perror("open");return 1;}fds[0] = STDIN_FILENO; /* 标准输入*/if((fds[1] = open_port(HOST_COM_PORT)) < 0) /* 打开串口*/{perror("open_port");return 1;}if(set_com_config(fds[1], 115200, 8, 'N', 1) < 0) /* 配置串口*/{perror("set_com_config");return 1;}FD_ZERO(&inset);FD_SET(fds[0], &inset);FD_SET(fds[1], &inset);maxfd = (fds[0] > fds[1])?fds[0]:fds[1];_sec = TIME_DELAY;_usec = 0;printf("Input some words(enter 'quit' to exit):\n");while (loop && (FD_ISSET(fds[0], &inset) || FD_ISSET(fds[1], &inset))){tmp_inset = inset;res = select(maxfd + 1, &tmp_inset, NULL, NULL, &tv);switch(res){case -1:{perror("select");loop = 0;}break;case 0: /* Timeout */{perror("select time out");loop = 0;}break;default:{for (i = 0; i < SEL_FILE_NUM; i++){if (FD_ISSET(fds[i], &tmp_inset)){memset(buff, 0, BUFFER_SIZE);real_read = read(fds[i], buff, BUFFER_SIZE);if ((real_read < 0) && (errno != EAGAIN)){loop = 0;}else if (!real_read){close(fds[i]);FD_CLR(fds[i], &inset);}else{buff[real_read] = '\0';if (i == 0){write(fds[1], buff, strlen(buff));printf("Input some words(enter 'quit' to exit):\n");}else if (i == 1){write(recv_fd, buff, real_read);}if (strncmp(buff, "quit", 4) == 0){loop = 0;}}} /* end of if FD_ISSET */} /* for i */}} /* end of switch */} /* end of while */close(recv_fd);return 0;}/* com_target.c */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include "uart_api.h"int main(void){int fds[SEL_FILE_NUM], recv_fd, maxfd;char buff[BUFFER_SIZE];fd_set inset,tmp_inset;struct timeval tv;unsigned loop = 1;int res, real_read, i;if ((recv_fd = open(RECV_FILE_NAME, O_CREAT|O_WRONL Y, 0644)) < 0) {perror("open");return 1;}fds[0] = STDIN_FILENO; /* 标准输入*/if((fds[1] = open_port(TARGET_COM_PORT)) < 0) /* 打开串口*/{perror("open_port");return 1;}if(set_com_config(fds[1], 115200, 8, 'N', 1) < 0) /* 配置串口*/{perror("set_com_config");return 1;}FD_ZERO(&inset);FD_SET(fds[0], &inset);FD_SET(fds[1], &inset);maxfd = (fds[0] > fds[1])?fds[0]:fds[1];_sec = TIME_DELAY;_usec = 0;printf("Input some words(enter 'quit' to exit):\n");while (loop && (FD_ISSET(fds[0], &inset) || FD_ISSET(fds[1], &inset))){tmp_inset = inset;res = select(maxfd + 1, &tmp_inset, NULL, NULL, &tv);switch(res){case -1:{perror("select");loop = 0;}break;case 0: /* Timeout */{perror("select time out");loop = 0;}break;default:{for (i = 0; i < SEL_FILE_NUM; i++){if (FD_ISSET(fds[i], &tmp_inset)){memset(buff, 0, BUFFER_SIZE);real_read = read(fds[i], buff, BUFFER_SIZE);if ((real_read < 0) && (errno != EAGAIN)){loop = 0;}else if (!real_read){close(fds[i]);FD_CLR(fds[i], &inset);}else{buff[real_read] = '\0';if (i == 0){printf("Input some words(enter 'quit' to exit):\n");write(fds[1], buff, strlen(buff));}else if (i == 1){write(recv_fd, buff, real_read);}if (strncmp(buff, "quit", 4) == 0){loop = 0;}}} /* end of if FD_ISSET */} /* for i */}} /* end of switch */} /* end of while */close(recv_fd);return 0;}(3)分别编译宿主机和目标机的串口程序。
实验5PN结的CV特性
实验5 PN结电容电压特性测试一、实验目的1.掌握CV-2000 型电容电压特性测试仪的使用方法;2.熟悉C-V 特性的测试二、实验仪器CV-2000 型电容电压特性测试仪是测试频率为1MHz的智能化数字的电容测试仪器,专用于测试半导体器件PN结的势垒电容在不同偏压下的电容量,也可测试其它电容。
三、实验原理PN结在反向偏压作用下耗尽层宽度如公式3-1所示,[()]⁄( )其中为内建电势,为反向偏压,为施主掺杂浓度。
公式说明,反向偏压时,PN结的耗尽层宽度是偏压的函数,当偏压增加时耗尽层将展宽,空间电荷的数量增加;当偏压减小时耗尽层将变窄,空间电荷的数量减少。
空间电荷是不动的,空间电荷的增加实际上是随反偏压的增加,空间电荷区边界有一部分电子和空穴被抽出,从而露出更多的没有电子和空穴中和的施主离子和受主离子。
空间电荷的减少则是随着反偏压的减小,有电子和空穴注入空间电荷区中和了部分施主离子和受主离子。
以上分析说明,在偏压作用下,PN结具有充放电的电容作用。
这种由于耗尽层内空间电荷随偏压变化所引起的电容称为PN结的耗尽层电容(depletion-layer capacitance),耗尽层电容也称为势垒电容(barrier capacitance)和过度电容。
耗尽层两个半边内的空间电荷正比于耗尽层宽度。
对于P+N结,有√ () ( )耗尽层电容强烈地依赖于偏压信号的频率。
小信号耗尽层电容的定义为( )把3-2式代入3-3式导出[()]⁄( )() ( )⁄对的实验曲线如图3-1所示。
根据该图中直线的斜率可以计算出施主的浓度,此外直线外推至电压轴可求出内建电势。
图3-1C-V法利用PN结或肖特基势垒在反向偏压时的电容特性,可以获得材料中杂质浓度及其分布的信息,这类测量称为C-V测量技术。
3.1概述CV-2000 型电容电压特性测试仪采用电流电压测量方法,它用微处理器通过8次电压测量来计算每次测量后要求的参数值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五串操作
一、实验目的
1.熟悉串操作指令的功能。
2.了解串操作指令的使用方法。
二、实验预习要求
1.复习8086指令系统中的串操作类指令。
2.按照题目要求在实验前编写好实验中的程序段。
三、实验任务
1.输入以下程序段并运行之,回答后面的问题。
CLD
MOV DI,1000H
MOV AX,55AAH
MOV CX,10H
REP STOSW
上述程序段执行后:
(1)从ES:1000H开始的16个字单元的内容是什么?
答:55AA
(2)(DI)= ?(CX)= ?,并解释其原因。
答:(DI)=1020, (CX)=0
2.在上题的基础上,再输入以下程序段并运行之,回答后面的问题。
MOV SI,1000H
MOV DI,2000H
MOV CX,20H
REP MOVSB
(1)从ES:2000H开始的16个字单元的内容是什么?
答:55AA
(2)(SI)= ?(DI)= ?(CX)= ?,并分析之。
答:(SI)=1020H, (DI)=2020, (CX)=0
装入20H(32个)数据,装入地址范围为(1000H->101FH),
SI、DI都指向下一个单元
3.在以上两题的基础上,再输入以下三个程序段并依次运行之。
3.1程序段1:
MOV SI,1000H
MOV DI,2000H
MOV CX,10H
REPZ CMPSW
程序段1执行后:
(1)ZF=?根据ZF的状态,你认为两个串是否比较完了?
答:ZF=1,比较完了(CX=0重复结束)
(2)(SI)= ?(DI)= ?(CX)= ?,并分析之。
答:(SI)=1020H, (DI)=2020, (CX)=0
SI和DI的值为每次一移动的量,每次复制完SI和DI的值加2,CX为20H,即十进制的32,在循环完成后CX的值变为0,循环
停止
3.2程序段2:
MOV [2008H],4455H
MOV SI,1000H
MOV DI,2000H
MOV CX,10H
REPZ CMPSW
(1)ZF=?根据ZF的状态,你认为两个串是否比较完了?
答:ZF=0,没有比较完(ZF=0,CX≠0重复结束)
(2)(SI)= ?(DI)= ?(CX)= ?,并分析之。
答:(SI)=100AH, (DI)=200AH, (CX)=0BH
3.3程序段3:
MOV AX,4455H
MOV DI,2000H
MOV CX,10H
REPNZ SCASW
程序段3执行后:
(1)ZF=?根据ZF的状态,你认为在串中是否找到了数据4455H?
答:REPNZ: ZF=0,CX≠0 不等重复
ZF=1, 找到了(ZF=1,CX≠0重复结束)
(2)(SI)= ?(DI)= ?(CX)= ?,并分析之。
答:(SI)=100AH, (DI)=200AH, (CX)=0BH
四、实验总结
通过本次是实验,我得知了微机中数据传送方式,了解到了串操作指令中的诸多功能,了解到了物理地址内容的比较,改变等方法。
也认识到了自己对于汇编语言的了解和认识还是非常浅薄的,希望自己能够在以后的学习中多多加以练习,熟练使用。