文档库 最新最全的文档下载
当前位置:文档库 › 河北工业大学 单片机实验 第四次试验 实验八 查表程序设计

河北工业大学 单片机实验 第四次试验 实验八 查表程序设计

河北工业大学 单片机实验  第四次试验  实验八 查表程序设计
河北工业大学 单片机实验  第四次试验  实验八 查表程序设计

实验八查表程序设计

一、实验目的

1.进一步熟悉MCS-51指令系统和汇编语言程序设计。

2.学会用MOVC指令编写查表程序。

二、实验内容

1.设计并调试一个查平方表的程序,其功能为应用查表指令MOVC A,@A+PC,求累加器A中数的平方值,结果平方值送A。要求待查的(A)≤15。

2.设计并调试一个根据电压值查与其对应的温度值的查表程序,其功能为应用查表指令MOVC A,@A+DPTR,求(A)中电压值对应的温度值,将温度值送R2R3(温度值为二字节的压缩BCD码),电压值的范围为(A)≤0FFH。实验程序参考框图如3-8所示。

三、实验步骤

1.键入程序和预定表后;

2.通过修改自变量参数启动并调试程序,直至正确为止。

3.边调试边体会用PC或DPTR作指针查表的区别。

四、实验报告要求

根据实验内容和程序参考流程,编出所需查表程序,列出实验程序清单。

五、思考题

1.当表的长度〉255个字节时应选哪一条指令查表?

答:当表的长度〉255个字节时应选“MOVC A,@A+DPTR”指令查表,并且需要对DPH、DPL进行运算处理,求出表目地址,再用“MOVC A,@A+DPTR”指令查表。

2.用PC指针查表编程时应注意什么?

答:应先用传送指令把所查数据的项数送入累加器A,并用“ADD A,#data”对A进行修正data值等于查表指令和数据表格之间的字节数,然后用“MOVC A,@A+PC”查表,同时用PC指针查表的表的范围不能大于255个字节。

六、参考程序清单

1.求平方值查表程序:

ORG 0000H

ADD A,#02H

MOVC A,@A+PC

SJMP $

DB 0,1,4,9,16,25 36,49

DB 64,81,100,121,144,169,196,225

END

本程序实现通过查表得A累加器中数的平方值并将结果送A,根据A中数值采用基址加变址方法找到所查数的地址得所对应的平方数。例:当(A)=5时,执行过程如下:

D:0XE0(A)

PC指针 ORG 0000H 05H

C:0X0000 ADD A,#02H 07H

C:0X0002 MOVC A,@A+PC 19H ;A+PC=A(10),查表的19H(25) C:0X0003 SJMP $

C:0X0005 DB 0,1,4,9,16,25 36,49

DB 64,81,100,121,144,169,196,225

END

2.测量温度查表程序:

双字节查表程序刘程序如图3-8所示:

双字节查表参考程序清单:

ORG 0000H

MOV DPTR,#TAB

MOV R0,A

ADD A,R0

MOV F0,C

ADD A,DPL

MOV DPL,A

CLR A

ADDC A,DPH

MOV C,F0

ADDC A,#0

MOV DPH,A

CLR A

MOVC A,@A+DPTR ;查第一个字节

MOV R2,A

CLR A

INC DPTR

MOVC A,@A+DPTR ;查第二个字节

MOV R3,A

SJMP $

TAB:DW 0100H,0110H,0120H,0130H,0140H,0150H,0160H ;温度表

END

本程序实现根据A中电压查表中与之对应的温度值,表中温度均为2字节故

(A)*2+DPTR(表首地址)即可查的对应温度值。例:温度表如上,当电压为

3时执行过程如下:

DPTR

PC 指针A(D:0X0E0) DPH DPL R2(D:0X02) R3(D:0X03)

C:0X0000 ORG 0000H 03H

C:0X0000 MOV DPTR,#TAB 00H 1EH

C:0X0003 CLR C

C:0X0004 MOV R0,A

C:0X0005 ADD A,R0 06H

C:0X0006 MOV F0,C

C:0X0008 ADD A,DPL 24H

C:0X000A MOV DPL,A 00H 24H

C:0X000C CLR A 00H

C:0X000D ADDC A,DPH 00H

C:0X000F MOV C,F0

C:0X0011 ADDC A,#0 00H

C:0X0013 MOV DPH,A

C:0X0015 CLR A

C:0X0016 MOVC A,@A+DPTR 01H

C:0X0017 MOV R2,A 01H

C:0X0018 CLR A 00H

C:0X0019 INC DPTR 00H 25H

C:0X001A MOVC A,@A+DPTR 30H

C:0X001B MOV R3,A 30H

C:0X001C SJMP $ (R2)=01H,(R3)=30H,电压为3时对应温度为0130H。

C:0X001E TAB:DW

0100H,0110H,0120H,013

0H,0140H,0150H,0160H

END

实验九散转程序设计

一、实验目的

1.进一步熟悉MCS-51指令系统和汇编语言程序设计。

2.学会用三种不同的方法设计散转程序,并掌握它们的区别。

二、实验内容

设计并调试一个程序,其功能为根据(20H)的值i (i≤7)取相应的处理程序P i的入口地址并转移到程序P i,P i的处理程序的功能为(Ri)+1→(Ri),[(20H)+1]^7 (20H),再重复地根据(20H)散转。参考程序框图如图3-9所示:

三、实验步骤

1.输入编好的程序,汇编成功;

2.调试程序,使用修改寄存器的方法,使R0—R7初值为0,然后启动系统,带断点运行,运行一个循环后检查运行结果,观察R0—R7是否依次计数,排除程序中错误,直至R0—R7同步计数为止。

四、实验报告要求

1.列出根据流程图编写的程序清单,写出程序执行的结果。

2.采用另外两种不同的方法编写程序,列出调试通过的程序清单。

五、参考程序清单

散转程序清单:请将程序补充完整后运行。

ORG 0000H

MOV 20H,#00H

TB0: MOV DPTR,#TABL

MOV A, 20H

ADD A,20H

MOV F0,C

ADD A,DPL

MOV DPL,A

CLR A

ADDC A,#0DPH

MOV C,F0

ADDC A,#0

MOV DPH,A

MOV A, #00H

JMP @ A+DPTR

TABL: AJMP PR0

AJMP PR1

AJMP PR2

AJMP PR3

AJMP PR4

AJMP PR5

AJMP PR6

AJMP PR7

PR0: INC R0

LJMP PR

PR1: INC R1

LJMP PR

PR2: INC R2

LJMP PR

PR3: INC R3

LJMP PR

PR4: INC R4

LJMP PR

PR5: INC R5

LJMP PR

PR6: INC R6

LJMP PR

PR7: INC R7

PR: MOV A, 20H

INC A

ANL A,# 07H

MOV 20H,A

LJMP TB0

SJMP $

END

本程序为散转程序,当20H中为0时程序执行结果如下: DPTR PC 指针 ORG 0000H D:0XEO(A) D:0X00(R0) D:0X20(20H) DPH DPL C:0X0000 MOV 20H,#00H 00H 00H

C:0X0003 TB0: MOV DPTR,#TABL 00 1CH C:0X0006 MOV A, 20H 00H

C:0X0008 ADD A,20H 00H

C:0X000A MOV F0,C

C:0X000C ADD A,DPL 1CH 00 1CH C:0X000E MOV DPL,A 00 1CH C:0X0010 CLR A

C:0X0011 ADDC A,#DPH 00 1CH C:0X0013 MOV C,F0

C:0X0015 ADDC A,#0 1CH

C:0X0017 MOV DPH,A 00 1CH C:0X0019 MOV A, #00H 00H

C:0X001B JMP @ A+DPTR ;跳到TABL

C:0X001C TABL: AJMP PR0 ;跳到PR0

AJMP PR1

AJMP PR2

AJMP PR3

AJMP PR4

AJMP PR5

AJMP PR6

AJMP PR7

C:0X002C PR0: INC R0 01H C:0X002D LJMP PR ;跳到PR

PR1: INC R1

LJMP PR

PR2: INC R2

LJMP PR

PR3: INC R3

LJMP PR

PR4: INC R4

LJMP PR

PR5: INC R5

LJMP PR

PR6: INC R6

LJMP PR

PR7: INC R7

C:0X004C PR: MOV A, 20H 00H

C:0X004E INC A 01H

C:0X004F ANL A,# 07H 01H

C:0X0051 MOV 20H,A 01H 01H

C:0X0053 LJMP TB0 ;跳到TB0循环执行

SJMP $

END

循环7次后执行结果如下图:

另两种方法程序如下:

ORG 0000H

MOV 20H,#00H TB0: MOV DPTR,#TABL

MOV A, 20H

ADD A,20H

JNC TB1

TB1: JMP @ A+DPTR

TABL: AJMP PR0

AJMP PR1

AJMP PR2

AJMP PR3

AJMP PR4

AJMP PR5

AJMP PR6

AJMP PR7

PR0: INC R0

LJMP PR

PR1: INC R1

LJMP PR

PR2: INC R2

LJMP PR

PR3: INC R3

LJMP PR

PR4: INC R4

LJMP PR

PR5: INC R5

LJMP PR

PR6: INC R6

LJMP PR

PR7: INC R7

PR: MOV A, 20H

INC A

ANL A,# 07H

MOV 20H,A

LJMP TB0

SJMP $

END

ORG 0000H

MOV 20H,#00H

TB0: MOV DPTR,#TABL

MOVC A,@A+DPTR

JMP @ A+DPTR

TABL: DB PR0-TABL

DB PR1-TABL

DB PR2-TABL

DB PR3-TABL

DB PR4-TABL

DB PR5-TABL

DB PR6-TABL

DB PR7-TABL

PR0: INC R0

LJMP PR

PR1: INC R1

LJMP PR

PR2: INC R2

LJMP PR

PR3: INC R3

LJMP PR

PR4: INC R4

LJMP PR

PR5: INC R5

LJMP PR

PR6: INC R6

LJMP PR

PR7: INC R7

PR: MOV A, 20H

INC A

ANL A,# 07H

MOV 20H,A

LJMP TB0

SJMP $

END

实验十子程序设计

一、实验目的

1.进一步熟悉MCS-51指令系统和汇编语言程序设计。

2.掌握子程序设计及参数传递的方法。

3.掌握子程序调用与返回时堆栈的变化与作用。

二、实验内容

1.根据参考流程框图2-7,使用工作寄存器或累加器来传递参数的方法把入口参数放到累加器A中,然后将累加器中的一个十六进制数的ASCⅡ字符转换为一位十六进制数存放于A。

2.用指针寄存器来传递参数,将(R0)和(R1)指出的内部RAM两个3字节无符号整数相加,结果送(R0)指出的内部RAM中,入口时,(R0)(R1)分别指向加数和被加数的低位字节,出口时(R0)指向结果的高位字节。

3.用堆栈传递参数,把一位十六进制数转化为ASCⅡ码子程序(主程序用PUSH指令,已把参数压入堆栈)。

参考程序框图如3-10图所示:

图3-10 ASCII 码字符转换为十六进制数流程图

15-

8

7-0

10-0

7-0

15-

8

四、实验报告要求

画出实验内容中2和3的程序流程图,并列出三个题目的主—子程序清单。 五、思考题

1、使不同种参数传递方法实现子程序调用的异同是什么?

答:参数的传递方法有:1,传递数据2,传递地址3,通过堆栈传递参数4,通过位地址传递参数。1,通过寄存器或累加器传送,即在调用子程序之前把数据送入寄存器或者累加器,子程序执行以后,结果仍由寄存器或者累加器送回,或由直接地址单元送回;2,数据存放在数据存储器中,参数传递时只通过R0、R1、DPTR 传递数据所在的单元地址,调用结束时,传送回来的也只是地址;3,在调用之前,要先把数据压入堆栈,子程序执行时按需要弹出,可弹到指定单元。同时返回时要将SP 指向对点地址等。但不能将压入堆栈的断点地址传送出去。

2、ACALL 和LCALL 指令有什么区别?使用时应注意什么?

答:ACALL addr11;(PC)←(PC)+2 绝对调用指令为两字节指令,限在2KB 地址范围内使用 ;(SP)←(SP)+1,((SP))←(PC)

;(SP)←(SP)+1,((SP))←(PC)

;(PC) ←addr11

LCALL addr16;(PC)←(PC)+3 长调用指令为三字节指令,可调用64KB 范围内的子程序

;(SP)←(SP)+1,((SP))←(PC)

;(SP)←(SP)+1,((SP))←(PC)

;(PC)←addr16

注意调用范围是否在PC 指针所在2KB 内,超过则改为长调用指令。

3、RET 指令的功能是什么?

答:RET 为子程序调用返回指令,当子程序执行结束时返回主程序。 六、参考程序清单

1.用累加器和工作寄存器传递参数子程序清单:

ASCH : CLR C

SUBB A ,#30H ;入口参数放在ACC 中 CJNE A ,#10,$+3 JC AH10

SUBB A ,#07H A10: RET

本程序为将累加器中的一个十六进制数的ASC Ⅱ字符转换为一位十六进制数存放于A 。完整程序及当(A )=45H 时运行过程如下:

PC 指针 ORG 0000H D:0X00(A) C:0X0000 MOV A, #45H 45H C:0X0002 ACALL ASCH ;执行子程序ASCH C:0X0004 SJMP $ C:0X0006 ASCH : CLR C

C:0X0007 SUBB A ,#30H 15H C:0X0009 CJNE A ,#10,$+3 JC A10

C:0X000E SUBB A ,#07H 0EH C:0X0010 A10: RET END 2.用指针寄存器来传递参数子

程序清单:

NADD :MOV R7,#3 ;用R0、R1传递参数 CLR C NADD1:MOV A ,@R0 N

开始 3→R7 0→C

ADDC A,@R1

MOV @R0,A

DEC R0

DEC R1

DJNZ R7,NADD1

INC R0

RET

本程序为两个三字节无符号数相加,完整程序及两数为26 3A 87H,5C D9 1EH 时运行过程如下:

使用资源:A,R0,R1,R7,内部RAM 20H-22H,30H-32H.

D:0XE0(A) D:0X00(R0) D:0X01(R1) D:0X22(22H) D:0X32(32H) PC 指针 ORG 0000H 87H 1EH

C:0X0000 MAIN: MOV R0, #22H 22H

C:0X0002 MOV R1, #32H 32H

C:0X0004 ACALL NADD ;转向子程序

C:0X0006 SJMP $

C:0X0008 NADD:MOV R7,#3

C:0X000A CLR C

C:0X000B NADD1:MOV A,@R0 87H

3AH

26H

C:0X000C ADDC A,@R1 A5H

13H

73H

C:0X000D MOV @R0,A A5H

C:0X000E DEC R0 21H

20H

1FH

C:0X000F DEC R1 31H

30H

2FH

C:0X0010 DJNZ R7,NADD1 ;判R7是否为0,不为0转向NDD1循环。

C:0X0012 INC R0 ;使R0指向高字节。20H

C:0X0013 RET ;返回主程序。

END

3.用堆传递参数子程序清单:

HASC: MOV R0 , SP

开始

用R0代替SP指针

用指针寄存器来传递参数流程图

((R0))+((R1))((R0))

(R0)+1→(R

((R0))-1→(R

0)

(R7)-1=

返回

DEC R0 ↓

DEC R0 XCH A ,@R0

ANL A ,#0FH ADD A ,#2

MOVC A ,@A+PC XCH A ,@R0

RET DB ‘0123456789’ DB ‘ABCDEF ’ END

本程序实现把一位十六进制数转化为ASC Ⅱ码,完整程序及当数为0AH 时运行过程如下:

使用资源:A,R0,30H 设数存在30H 中。

PC 指针 ORG 0000H D:0XE0(A) D:0X00(R0) D:0X30(30H) SP 指针

C:0X0000 MAIN: MOV SP,#5FH 0AH 5FH C:0X0002 PUSH 30H 60H

C:0X0004 ACALL HASC ;转向子程序 62H C:0X0006 POP 30H 41H C:0X0008 SJMP $

C:0X000A HASC :MOV R0,SP 62H C:0X000C DEC R0 61H C:0X000D DEC R0 60H C:0X000E XCH A ,@R0 0AH

C:0X000F ANL A ,#0FH 0AH C:0X0011 ADD A ,#2 0CH C:0X0013 MOVC A ,@A+PC 41H

C:0X0014 XCH A ,@R0 00H

C:0X0015 RET ;返回主程序 C:0X0017 DB ‘0123456789’ DB ‘ABCDEF ’ END

(R0)-1 (R0)-1 取出参数

计算偏移量,查表 结果放回堆栈里

结束

用堆传递参数子程序流程图

最新单片机原理实验教案参考程序

单片机原理实验教案 参考程序

广东松山职业技术学院《MCS-51单片机原理》实验指导书 宁玉珊黄晓林 使用Proteus辅助设计与仿真

实训项目1 Proteus辅助设计与仿真的使用 一、实训目的 学习并熟练掌握PROTEUS辅助设计与仿真软件的使用。通过使用Proteus的ISIS组件绘制AT89C51功能接口原理图,并对原理图编写程序和调试程序,观察在仿真条件下的实现功能的效果。 二、实训内容 在PROTEUS仿真环境下实现一个发光二极管(LED)闪烁。要求LED亮0.5s灭1s,并绘制原理图和编写实现程序,同时用虚拟的示波器观察硬件和软件实现的效果。 三、实训器材 安装有Proteus7软件的计算机 1 台。 四、实训步骤 1)在硬盘建立文件夹用来保存新建项目的所有文件。如在D盘建立PROJECT文件夹。 2)选择‘开始→程序→Proteus7 professional→ISIS professional(或者双击桌面图标ISIS)’,进入Proteus仿真环境,如图P1_1和P1_2所示。 图P1-1

图P1-2 3)选择菜单【File/New Design】创建一个新的设计项目,如图P1_3所示。 图P1-3 4)此时系统会弹出模板选择窗口,选择‘DEFAULT’点击【OK】即可,如图P1_4所示。

图P1_4 5)点击界面左侧工具栏中的图标,接着点击元件池上方的按钮,将要用到的元器件从系统库调到当前设计文件库中。在弹出的Pick Devices对话框左上角的‘Keywords’文本框中键盘输入元件名(或元件的其它关键词)搜索到需要的元器件。双击‘Results’栏下的目标元件,该元件即调出到当前设计文件库的元件列表中,如图P1_5所示。本实训中所要用到的元件如表PS1_1所示。 图P1_5 元件名称搜索关键词元件序 数值备注 号 电阻器Resistor R1 10k 电阻器Resistor R2 1k 电解电容器MINELECT1U63V C1 4.7μ 陶瓷电容器CERAMIC22P C2、C3 22p 晶振CRYSTAL X1 12MHz 单片机AT89C51 U1

C程序设计实验三实验报告

实验报告 工学院土木工程专业09级2011至2012学年度第1学期学号:xxxxxx姓名:xxxxxx 2011 年10月08日第3~4节综合楼325教室 实验目的:

a的字节数为sizeof (a)或sizeof (int ),用printf 函数语句输出各类型变 量的长度(字节数)。 ①输入程序如下 in clude int mai n() {int a,b,i,j,k,r,s,t,u,v,w,x,y,z; float d,e; char c1,c2; double f,g; long m, n; un sig ned int p,q; a=61;b=62; c1='a';c2='b'; d=3.56;e=-6.78; m=50000;n=-60000; p=32768;q=40000; i=sizeof(a);j=sizeof(b); k=sizeof(d);r=sizeof(e); s=sizeof(c1);t=sizeof(c2); u=sizeof(f);v=sizeof(g); w=sizeof(m);x=sizeof( n); y=sizeof(p);z=sizeof(q); prin tf("a=%d,b=%d\nd=%d,e=%d\nc 1= %d,c2=%d\n",i,j,k,r,s,t); prin tf("f=%d,g=%d\nm=%d, n=%d\nmp=%d,q=%d\n",u,v,w,x,y,z); } 结 果如 下: (2)设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体 积。编程序,用scanf输入数据,输出计算结果。输出时要有文字说明,去小数点后两位数字。 ①编写程序如下: #i nclude int mai n() {float h,r,l,s,sq,vq,vz; float pi=3.141526; prin tf("Please in put r,h:"); sca nf("%f,%f",&r,&h); l=2*pi*r; s=r*r*pi; sq=4*pi*r*r; vq=3.0/4.0*pi*r*r*r; vz=pi*r*r*h; prin tf("The circumfere nce:l=%6.2f\n",l); prin tf("The area of thee circle:s=%6.2f\n ",s); prin tf("The superficial area of the ball:sq=%6.2f\n ",sq); prin tf("The volume of the ball:v=%6.2f\n",vq); prin tf("The volume of the cyli nder:vz=%6.2f\n ",vz); return 0; L

C语言程序设计实验报告2

实验2 流程控制实验 2.1 实验目的 (1)掌握复合语句、if语句、switch语句的使用,熟练掌握for、while、do-while三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。 (2)熟练运用for、while、do-while语句来编写程序。 (3)练习转移语句和标号语句的使用。 (4)使用集成开发环境中的调试功能:单步执行、设置断点、观察变量值。 2.2 实验内容及要求 2.2.1.源程序改错 下面是计算s=n! 的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。例如,8!=40320。 1 #include 2 int main() 3 { int i,n,s=1; 4 printf("Please enter n:"); 5 scanf("%d",n); 6 for(i=1,i<=n,i++) 7 s=s*i; 8 printf("%d! = %d",n,s); 9 } 10 return 0; 解答: (1)错误修改: 1)输入字符格式错误,正确形式为: scanf(“%d”,&n); 2)return 0;与}的相对位置错误,正确形式为: return0; } (2)错误修改后的程序: #include int main() { int i,n,s=1; printf("Please enter n:"); scanf("%d",n); for(i=1,i<=n,i++) s=s*i; printf("%d! = %d",n,s); return 0; } (3) 运行结果: 图1 2.2.1源程序改错测试图 2.2.2.源程序修改替换 (1)修改第1题,分别用while和do-while语句替换for语句。

实验二选择结构程序设计实验报告

实验三:C程序的选择结构 一、实验目的和要求 (1)了解 C 语言表示逻辑量的方法(以0 代表“假”,以非0 代表“真”)。 (2)学会正确使用逻辑运算符和逻辑表达式。 (3)熟练掌握if 语句的使用(包括if 语句的嵌套)。 (4)熟练掌握多分支选择语句—switch 语句。 (5)结合程序掌握一些简单的算法。 (6)进一步学习调试程序的方法。 二、、实验软硬件配置 1.硬件配置 电脑 2.软件配置 Windows xp Visual C++6.0 三、实验内容及过程描述 实验步骤: ①进入Visual C++ 6.0 集成环境。 ②输入自己编好的程序。 ③检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时 改正。 ④进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”,根据提 示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 ⑤运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果是否正 确,应运行多次,分别检查在不同情况下结果是否正确。 实验内容: 本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。 x x 1 (1)有一函数:y 2x 1 1 x 10 3x 11 x 10 写程序,输入x 的值,输出y 相应的值。用scanf 函数输入x 的值,求y 的值。程序如下:#include int main() {float x,y; int i; while(i<1000) { printf(" 请输入x 的值:"); scanf("%f",&x); if(x<1) y=x; else if(1<=x&&x<10)

重庆大学 单片机实验

实验一系统认识及基本程序设计实验 四、实验内容 1. 将BCD 码整数0~255 存入片内RAM 的20H、21H、22H 中,然后转换为二进制整数00H~FFH,保存到寄存器R4 中。修改20H、21H、22H 单元的内容,如:00H,05H,08H;观察实验结果。 参考程序: ;============================================================== ; 文件名称: Asm2-1.asm ; 功能描述: BCD整数转换为二进制整数(8位, 范围从00H--FFH) ;============================================================== ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R0, #20H ;BCD存放高位地址 MOV R7, #03H ;BCD码0--255, 最多3位 CLR A MOV R4, A LP1: MOV A, R4 MOV B, #0AH MUL AB ;乘10 ADD A, @R0 ;加下一位的值 INC R0 ;指向下一单元 MOV R4, A ;结果存入R4 DJNZ R7, LP1 ;转换未结束则继续 SJMP MAIN ;设置断点, 观察实验结果R4中的内容 END 2. 将16 位二进制整数存入R3R4 寄存器中,转换为十进制整数,以组合BCD 形式存储在RAM 的20H、21H、22H 单元中。 参考程序: ;============================================================= ; 文件名称: Asm2-2.asm ; 功能描述: 二进制整数(16位)转换为十进制整数(组合BCD) ;============================================================= ; 0--FFFFH(R3R4)==>0--65535 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R0, #22H ;转换结果低位地址 MOV A, R0 PUSH ACC ;ACC表示累加器A的直接地址 MOV R7, #03H

大学程序设计基础实验报告 (2)

**大学程序设计基础实验报告 实验名称:实验三分支结构 实验目的: 1、掌握IF-ELSE语句使用。 2、掌握ELSE-IF语句使用。 3、熟悉SWITCH语句使用。 实验内容: 在本地电脑中新建一个文件夹,用于存放C程序,文件夹的名字要求是“学号姓名-实验序号”,如E:\ 1920115555张三-03。启动C-Free,完成如下各题。 1、编程题:输入参数a,b,c,求一元二次方程ax2+bx+c=0的根(①a、b、c都为0,②a 和b为0,c不为0,③a为0,b不为0,c任意,④a不为0,且a、b、c满足b2-4ac ≥0,⑤a不为0,且a、b、c满足b2-4ac<0)。 2、编程题:输入职工的月薪salary,计算并输出应缴纳的个人所得税tax。tax=rate * (salary –850),rate的计算方式如下: 当salary <= 850,则rate = 0; 当850 < salary <= 1350,则rate = 5%; 当1350 < salary <= 2850,则rate = 10%; 当2850 < salary <= 5850,则rate = 15%; 当salary > 5850,则rate = 20%;。 3、编程题:根据输入的3个边长a、b、c,判断它们是否能构成三角形,若能构成三 角形,则进一步判断此三角形是哪种类型的三角形(等边三角形、等腰三角形、直角三角形和一般三角形。等腰直角算作等腰)。 4、编程题:输入一个形式如“操作数运算符操作数”的表达式,对2个整数进行乘、 除或求余运算。【请分别用if语句和switch语句实现此题功能】 上交作业的方法: 1.将程序代码及注释和运行程序的窗口复制到实验结果下方对应的题号上,并把这 次实验上机操作中遇到的问题及解决方法、心得等填好完成实验报告。 2.保存以上所有按要求已调试通过,并形成.c(或.cpp)和.exe文件到以自己的“学 号姓名-03”命名的文件夹中,并将以自己的“学号姓名”命名的文件夹压缩后上 交到ftp://10.172.250.252:1161中的“作业上传”文件夹下的“报告上交02”文件 夹下的子文件夹“源文件压缩上交”中,同时把以“学号姓名-03”命名的word 文档上交到“报告上交03”文件夹下的另一子文件夹“word文件上交”中。 特别提醒:每次上传的文件名一定要是“学号姓名-实验序号. doc”(如1720115555张

实验4选择结构程序设计

实验4 选择结构程序设计 一、实验目的 1.掌握C语言中逻辑量的表示和使用方法。 2.掌握if语句及switch语句的使用。 3.熟悉各种表达式作为if语句及switch语句的条件。 4.了解Turbo C程序的基本调试方法。 二、实验内容 1.验证性实验 (1)分析程序的运行结果。 ①运行下列程序,输入1-7之间的任意数字,观察程序的运行结果。 #include void main() { int week; printf("Input(1-7):"); scanf("%d",&week); switch(week) { case 1:printf("Mon.\n"); break; case 2:printf("Tue.\n"); break; case 3:printf("Wed.\n"); break; case 4:printf("Tur.\n"); break; case 5:printf("Fri.\n"); break; case 6:printf("Sat.\n"); break; case 7:printf("Sun.\n"); break; default:printf("The input is wrong!\n"); } } ②运行5次下列程序,输入的数据分别是1,2,3,4,5,请观察每次的运行结果,并根据结果分析原因。 #include void main() { int n,a=0,b=0,c=0,d=0,k=0; scanf("%d",&n); switch(n) { case 1:b++;break; case 2:c++; case 3:d++;break; case 4:k++; default:a++; } printf("%d,%d,%d,%d",a,b,c,d,n); } (2)输入x的不同值,以下程序将求一给定“y=f(x)”函数的值。

单片机U盘读写参考程序

/*******************************************************/ #include"reg52.h" #include"stdio.h" #include "string.h" #include "intrins.h" #include"CH375INC.H" /*******************************************************/ #define uchar unsigned char #define uint unsigned int /*******************************************************/ sbit CH375_INT=P3^3; sbit CH375_A0=P3^4; sbit CH375_RD=P3^5; sbit CH375_WR=P3^6; sbit CH375_CS=P3^7; /*******************************************************/ uchar xdata my_buf[512]; /*******************************************************/ void uart_init() { TMOD=0X20; TH1=TL1=0XFD; TR1=1; REN=1; SM0=0;SM1=1; EA=1; ES=1; } /*******************************************************/ void uart_send_pc(uchar *s) //串口监视//void uart_send_pc(uchar a[20]) { //{ uchar len=strlen(s); // uchar i; uchar i; // for(i=0;i<20;i++) for(i=0;i

C++简单程序设计(2.1)(C++实验报告二)-17春

实验二 C++简单程序设计(2) 班级软件一班16-1 学号16044101 姓名安昭先 一、实验目的: 理解C++语言在非面向对象方面对C语言功能的扩充与增强。 二、实验要求: 1.熟练使用VC6.0集成开发环境创建项目文件。 2.理解C++语言在非面向对象方面对C语言功能的扩充与增强。 3.掌握C++的输入输出、const修饰符、函数原型、内联函数等内容。 三、实验内容与程序代码: 1.编写程序,要求用循环结构输出如下图案。 ******* ***** *** * 程序源代码: #include using namespace std; int main() { int i; int j; for(i=0;i<5;i++) { for(j=0;j

for(j=0;j<8-(2*i)+1;j++) { cout<<"*"; } cout<<" "< using namespace std; inline float square(float r); inline float square1(float r); const float PI=3.14159;

int main() { float r,s; cin>>r; s=square(r); cout<

实验4 Matlab程序设计1

实验4 Matlab 程序设计1 实验目的: 1、 掌握建立和执行M 文件的方法; 2、 掌握实现选择结构的方法; 3、 掌握实现循环结构的方法。 实验内容: 1. 从键盘输入一个4位整数,按如下规则加密后输出。加密规则:每位数字都加上7,然 后用和除以10的余数取代该数字;再把第一位与第三位交换,第二位与第四位交换。 2. 求分段函数的值。 ,x x x x y x x x x x x x ?+- <≠-?=-+ ≤<≠≠??-- ?2226035605231且且及其他 用if 语句实现,分别输出x=-5,-3,0,1,2,2.5,3,5时的y 值。 3. 输入一个百分制成绩,要求输出成绩等级A 、B 、C 、D 、E ,其中90~100分为A ,80~89 分为B ,70~79分为C ,60~69分为D ,60分以下为E 。 要求: (1) 分别用if 语句和swich 语句实现。 (2) 输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 4. 硅谷公司员工的工资计算方法如下: (1) 工作时数超过120小时者,超过部分加发15%; (2) 工作时数低于60小时者,扣发700元; (3) 其余按每小时84元计发。

试编程按输入的工号和该号员工的工时数,计算应发工资。 5.设计程序,完成两位数的加、减、乘、除四则运算。即:输入两个两位随机整数,再输 入一个运算符号,做相应的运算,并显示相应的结果。 6.建立5×6矩阵,要求输出矩阵的第n行元素。当n值超过矩阵的行数时,自动转为输 出矩阵的最后一行元素,并给出出错信息。 7.产生20个两位随机整数,输出其中小于平均数的偶数。 实验代码及实验结果 1. >> a=input('请输入一个四位整数:'); 请输入一个四位整数:9988 >> a1=fix(a/1000); >> a2=rem(fix(a/100),10); >> a3=rem(fix(a/10),10); >> a4=rem(a,10); >> a1=rem(a1+7,10); >> a2=rem(a2+7,10); >> a3=rem(a3+7,10); >> a4=rem(a4+7,10); >> b=a1;a1=a3;a3=b; >> b=a2;a2=a4;a4=b; >> c=a1*1000+a2*100+a3*10+a4; >> disp(c)

51单片机实验程序

3 3 3 用查表方式编写y=x1 +x2 +x3 。(x 为0~9 的整数) #include void main() { int code a[10]={0,1,8,27,64,125,216,343,512,729}; //将0~9 对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255 或-128~+127 之间的话就用char ,而现在的值明显超过这个范围,用int 较合适。int 的范围是0~65535 或-32768~32767 。 int y,x1,x2,x3; //此处定义根据习惯,也可写成char x1,x2,x3 但是变量y 一定要用int 来定义。 x1=2; x2=4; x3=9; //x1,x2,x3 三个的值是自定的,只要是0~9 当中的数值皆可,也可重复。 y=a[x1]+a[x2]+a[x3]; while(1); //单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。 } //结果的查询在Keilvision 软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch 的框架内双击“double-click or F2 to add”文字输入y 后按回车,右侧会显示其16 进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10 进制数。 1、有10 个8 位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验的 数据(1 的个数为偶数)都要存到内RAM50H 开始的数据区中。试编写有关程序。 #include void main() { int a[10]={0,1,5,20,24,54,64,88,101,105}; // 将所要处理的值存入RAM 中,这些可以根据个人随意设定,但建议不要超过0~255 的范围。 char i; // 定义一个变量 char *q=0x50; // 定义一个指针*q 指向内部0x50 这个地址。 for(i=9;i>=0;i--) //9~0 循环,共十次,也可以用for(i=0;i<10;i++) { ACC=a[i]; //将a[i] 的值赋给累加器ACC if (P==0) //PSW0 位上的奇偶校验位,如果累加器ACC 内数值1 的个数为偶数那么P 为0,若为奇数,P 为1。这里的P 是大写的。 { *q=a[i]; q++; // 每赋一个值,指针挪一个位置指向下一个。 } } while(1); //同实验一,程序不能停。 }

单片机 查表程序设计实验

2.4 查表程序设计实验 2.4.1 实验目的 学习查表程序的设计方法,熟悉 51 的指令系统。 2.4.2 实验设备 PC 机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51 系统平台”、或 “TD-PITE 教学实验系统+TD-51 系统平台” 2.4.3实验内容 1. 通过查表的方法将 16 进制数转换为 ASCII码; 2 2. 通过查表的方法实现y=x ,其中x为 0~9 的十进制数,以BCD码表示,结果仍以BCD 码形式输出。 2.4.4 实验步骤 1. 采用查表的方法将 16 进制数转换为 ASCII 码 根据 ASCII码表可知,0~9 的 ASCII码为 30H~39H,A~F的 ASCII码为 41H~46H,算 法为(假定待转换的数存放在 R7 中): 当 R7≤9 时,相应的 ASCII码为:R7+30H; 当 R7>9 时,相应的 ASCII码为:R7+30H+07H。 实验程序清单:(Asm4-1.asm) ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV DPTR, #ASCTAB ;表格首地址送DPTR MOV A, R7 ;R7中为待转换的数 ANL A, #0FH ;取低4位 MOVC A, @A+DPTR ;查表 MOV R5, A ;低4位转换结果送R1 MOV A, R7 ANL A, #0F0H ;取待转换数的高4位 SWAP A ;高4位与低4位交换 MOVC A, @A+DPTR ;查表 MOV R6, A ;高4位转换结果送R2 SJMP MAIN ;设置断点观察结果 ;ASCII码表 ASCTAB: DB 30H, 31H, 32H, 33H, 34H DB 35H, 36H, 37H, 38H, 39H DB 41H, 42H, 43H, 44H, 45H, 46H END 实验步骤: (1)编写实验程序,编译、链接无误后联机调试; (2)将待转换的数存放在 R7 中,如令 R7 中的值为 0x86;

实验四 答案 选择结构程序设计

实验四选择结构程序设计答案 实验时间:年月日 【实验步骤】 一、程序调试练习 1、写出下列程序的运行结果: (1)ex4_1.c #include void main() { char ch; printf("input a character:"); ch=getchar(); if(ch>='A' && ch<='Z') ch=ch+32; printf("%c\n",ch); } 具体要求: ①从键盘上输入a,分析程序运行的结果。 ②从键盘上输入A,分析程序运行的结果。 ③从键盘上输入5,分析程序运行的结果。 程序运行结果: ①a ②a ③5 (2)ex4_2.c #include void main() { int x,y,z; printf("input x,y,z"); scanf("%d,%d,%d",&x,&y,&z); if(x

②从键盘上给x、y、z分别输入3,5,2,分析程序运行的结果。 ③从键盘上给x、y、z分别输入-5,-3,2,分析程序运行的结果。 程序运行结果: ①z=2 ②z=3 ③z=0 (3)ex4_3.c #include main() { int x=1,a=0,b=0; switch(x) { case 0:b++; case 1:a++; case 2:a++;b++; } printf("a=%d,b=%d\n",a,b); } 程序运行结果: a=2,b=1 (4)ex4_4.c #include void main() { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2: a++; b++; break; case 3: a++; b++; } printf("a=%d,b=%d\n",a,b); } 具体要求:

单片机实验参考程序

实验一键盘输入实验 参考程序: ;4*4矩阵键盘读取程序,利用P0口,列线左起P0.0-P0.3 ;行线上起P0.4-P0.7,行线默认接高电平, ;P3.7作为键盘被读取的提示灯 ; 0 1 2 3 ; 4 5 6 7 ; 8 9 A B ; C D E F ;不考虑有两个或以上按键同时按下的情况, ;每次扫描到一个有按下则结束本次扫描 SETB P3.7 ;确认关闭键盘响应指示灯 MAIN: MOV R0,#0EFH ;用于给键盘行列线确定的电平 MOV R1,#0H ;循环次数,R1=0对应第一行,=1为第二行,以此类推SMAIN: MOV P0,R0 ;改变行线的状态,列线全处于高电平 NOP NOP MOV A,P0 JB ACC.0,L1 ;判断某行的第一列是否按下,按下则P0.0为低电平 MOV R2,#0H ; 将某行的列码保存至R2,显示程序会根据此值和R1的值计算具体为何按键按下 ACALL DISP SJMP MAIN ; 每次扫描到一个有按下则结束本次所有扫描

L1: JB ACC.1,L2 ;判断某行的第二列是否按下,按下则P0.1为低电平MOV R2,#01H ACALL DISP SJMP MAIN L2: JB ACC.2,L3 ;判断某行的第三列是否按下,按下则P0.2为低电平MOV R2,#02H ACALL DISP SJMP MAIN L3: JB ACC.3,SKIP ;判断某行的第四列是否按下,按下则P0.3为低电平MOV R2,#03H ACALL DISP SJMP MAIN ; SKIP: INC R1 ;R1加1,共计4行, MOV A,R0 RL A ;左移R0内的值,以并扫描下一行 MOV R0,A CJNE R1,#04H,SMAIN ;若四行扫描完毕,则跳转至程序最初,相关参数为初始值NO: MOV P2,#0FFH ;程序能执行到此说明四行扫描完毕并且一个按键都没按下,关闭数码管和指示灯 SETB P3.7 SJMP MAIN DISP: CLR P3.7 ;点亮键盘响应指示灯 MOV A,R1 RL A RL A ;R1对应行,具体的按键计算为R1*2+R2 ADD A,R2 ADD A,#3H ;下列指令与表格见有3字节的距离 MOVC A,@A+PC MOV P2,A ;十六进制的高位用数码管L1显示 RET ;共阳数码管0-F的显示码 DIS: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH DELAY: m ov r7,#255;延时 del1: mov r6,#255; del2: djnz r6,del2 djnz r7,del1 ret END

Visual FoxPro 程序设计实验报告

VF程序设计实验报告 图书馆管理系统 专业: 学号: 姓名: 指导教师: 2010年12月31日

目录 第一部分系统概述--------------------------------2 第二部分系统功能模块设计------------------------2第三部分系统数据库及表设计----------------------2第四部分系统菜单设计----------------------------5 第五部分系统界面设计----------------------------6 第六部分系统相关程序代码-----------------------13第七部分实验报告小结---------------------------22第八部分参考资料-------------------------------22

一、系统概述 近年来,随着图书馆规模的不断扩大,图书数量相应的增加,有关图书的各种信息量也成倍增加,面对庞大的信息量,传统的人工管理户导致图书管理的混乱,人力与物力过多的浪费,图书管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理。因此,为了充分发挥了图书馆的功效,最大限度地为读者服务,必须制定一套合理、有效,规范和实用的图书馆管理系统,对图书资料进行集中统一的管理。 根据上述需要,我们建立本图书馆管理系统。 根据图书、读者和管理员三者之间的关系,本系统主要实现读者对图书的查询、个人信息的修改和管理员对读者、图书的管理。 本系统采用作为开发工具。 二、系统功能模块设计 本系统可以完成一般图书馆关于图书查询、借阅及书库管理的主要功能。其中:图书查询模块可以查询所需要的图书;读者管理模块中,读者可以查看自己的信息,对登陆密码进行修改,管理员可以对读者进行添加和删除;图书管理模块中,管理员可以为读者进行图书的借阅和归还操作,以及对图书的信息进行修改,如加入新书、删除不能使用的图书和更新图书的信息;报表打印模块中,实现对需要的信息进行打印输出。系统结构下图所示。 三、数据库及表设计 经分析,图书馆管理系统主要涉及了学生、管理员和图书三部分。因此需要建立的实体就是学生、管理员和图书三个。 根据系统模块的设计,可以的到本系统需要建立的基本表为:读者信息表、

第四版C语言实验报告实验4选择程序设计

仲恺农业工程学院实验报告纸 计算机科学与工程(院)计算机科学与技术专业计111班1 组C语言程序设计课 实验4 选择结构程序设计 一、实验目的 一.实验目的 (1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。 (2)学会正确使用逻辑运算符和逻辑表达式。 (3)熟练掌握if语句的使用(包括if语句的嵌套)。 (4)熟练掌握多分支选择语句——switch语句。 (5)结合程序掌握一些简单的算法。 (6)进一步学习调试程序的方法。 二、实验内容和步骤 程序1 写程序,输入x值,输出相应y值 程序:#include int main() { int x,y; scanf("%d",&x); if (x<1) { y=x; } else if (x<10) { y=2*x-1; } else

{ y=3*x-11; } printf ("x=%d,y=%d\n",x,y); return 0; 结果: } 程序2 程序: #include #include #define M 1000 int main() {

int i,k; printf("please input:",M); scanf("%d",&i); while (i>M) { printf("warning!\n",M); scanf("%d",&i); } k=sqrt(i); printf("the answer is%d\n",k); return 0; } 结果: 程序3 #include int main() { float score; char grade; printf("please input student's score:"); scanf("%f",&score); while(score>100||score<0) { printf("\n is wrong,please input again\n"); scanf("%f",&score); } switch((int)(score/10)) {

实验二选择结构程序设计 实验报告

C语言程序设计与问题求解实验报告 实验二选择结构程序设计 一、实验目的 1.正确使用关系表达式和逻辑表达式表示条件; 2.掌握选择语句if-else和switch语句的使用方法; 3.掌握分支结构程序设计。 二、实验内容 1. 选择结构编程示例 year是闰年,即year能被4整除但不能被100整除,或year能被400整除。从键盘读入一个年份,然后输出其是否为闰年。具体代码如下: #include int main() { int year; printf("请输入年份:"); scanf("%d",&year); if ((year%4==0 && year%100!=0)||(year%400==0)) { printf("闰年!"); } else { printf("不是闰年!"); } return 0; } 运行结果:

2.分析并修改下面程序错误,使之能够正常运行。 错误代码一:下面的这个程序是当a和b的值相等的情况下输出“a和b相等”,而a与b的值不相等的话无输出。 #include void main() { int a=5,b=6; /* 或int a=5, b=5 ;*/ if (a==b); { printf("a和b相等\n"); } } 错误点: if (a==b)后有了分号“;”表示这条语句已执行完毕,所以无论a、b是否相等都会输出"a和b相等"。 修改后: #include void main() { int a=5,b=6; /* 或int a=5, b=5 ;*/ if (a==b) printf("a和b相等\n"); } 错误的代码二:下面的这个程序是当a和b的值相等的情况下a与b的值同时增加1,而a与b的值不相等的话,二者的值保持不变。 #include void main() { int a=5; /* 或int a=6*/ int b=6; if (a==b) a++; b++;

实验四-答案--选择结构程序设计讲课讲稿

实验四-答案--选择结构程序设计

实验四选择结构程序设计答案 实验时间:年月日【实验步骤】 一、程序调试练习 1、写出下列程序的运行结果: (1)ex4_1.c #include void main() { char ch; printf("input a character:"); ch=getchar(); if(ch>='A' && ch<='Z') ch=ch+32; printf("%c\n",ch); } 具体要求: ①从键盘上输入a,分析程序运行的结果。 ②从键盘上输入A,分析程序运行的结果。 ③从键盘上输入5,分析程序运行的结果。 程序运行结果: ①a ②a ③5 (2)ex4_2.c #include void main() { int x,y,z; printf("input x,y,z"); scanf("%d,%d,%d",&x,&y,&z); if(x

①从键盘上给x、y、z分别输入2,-1,2,分析程序运行的结果。 ②从键盘上给x、y、z分别输入3,5,2,分析程序运行的结果。 ③从键盘上给x、y、z分别输入-5,-3,2,分析程序运行的结果。 程序运行结果: ①z=2 ②z=3 ③z=0 (3)ex4_3.c #include main() { int x=1,a=0,b=0; switch(x) { case 0:b++; case 1:a++; case 2:a++;b++; } printf("a=%d,b=%d\n",a,b); } 程序运行结果: a=2,b=1 (4)ex4_4.c #include void main() { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2: a++; b++; break; case 3: a++; b++;

单片机原理实验指导书(2012.10)

《单片机原理》实验指导书 计算机科学与技术系2012年8月

目录 第一部分单片机仿真实验 (1) 实验一:流水灯实验 (1) 实验二:中断实验 (4) 实验三:定时器中断实验 (6) 实验四:串行口实验 (9) 实验五:矩阵式键盘输入识别 (13) 实验六:LCD循环显示设计 (19) 第二部分单片机硬件实验............................错误!未定义书签。第一章试验箱系统概述 ...................................错误!未定义书签。 一、系统地址分配........................................... 错误!未定义书签。 二、系统接口定义........................................... 错误!未定义书签。 三、通用电路简介........................................... 错误!未定义书签。第二章实验指导...............................................错误!未定义书签。实验七P1口亮灯和P1口加法器实验........... 错误!未定义书签。实验八简单I/O口扩展(选作).................. 错误!未定义书签。实验九8255控制交通灯................................ 错误!未定义书签。实验十128*64LCD液晶显示 .......................... 错误!未定义书签。

第一部分单片机仿真实验 实验一:流水灯实验 一、实验目的: 通过对P3口地址的操作控制8位LED流水点亮,从而认识单片机的存储器。 二、实验原理图 实验参考电路图如下: 三、参考实验程序 //流水灯实验 #include //包含单片机寄存器的头文件 sfr x=0xb0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机 //的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的

相关文档
相关文档 最新文档