当前位置:范文大全 > 公文范文 > 广工20XX接口与通讯实验报告

广工20XX接口与通讯实验报告

发布时间:2021-10-22 10:25:17

广工2013接口与通讯实验报告 本文关键词:接口,实验,通讯,报告,广工

广工2013接口与通讯实验报告 本文简介:接口与通讯实验报告1、8253定时/计数器实验2、8255并行接口实验3、8259中断控制器实验4、D/A(数/模)转换实验5、A/D(模/数)转换实验学生学院专业班级学号学生姓名指导教师2013年12月9日实验题目8253定时器实验1、实验目的与要求(1)学习8253可编程定时器/计数器定时方法(

广工2013接口与通讯实验报告 本文内容:

接口与通讯实验报告

1、8253定时/计数器实验

2、8255并行接口实验

3、8259中断控制器实验

4、D/A(数/模)转换实验

5、A/D(模/数)转换实验

学生学院

专业班级

学生姓名

指导教师

2013

12

9

实验题目

8253定时器实验

1、

实验目的与要求

(1)

学习8253可编程定时器/计数器定时方法

(2)

学习8253多级串联实现大时间常数的定时方法

(3)

学习8088/86控制定时器的方法

2、

实验内容

(1)

实验原理

8253A既可以作定时器又可作计数器:

(1)

计数:计数器装入初值后,当GATE为高电平时,可用外部事件作为CLK,脉冲对计数值进行减一计数,对每来一个脉冲减一,当计数值减少到0时,OUT端输出一个标志信号。

(2)

定时:计数器装入初值后,当GATE为高电平时,由CLK脉冲触发开始自动计数,计数到零时,发计数结束定时信号。

(2)

实验方法

用8253对标准脉冲信号进行计数,就可以实现定时功能。用板上的1MHz作为标准信号,将8253可编程计数器/定时器的时间常数设在1000000次,就可以在定时器的管脚上输出1秒针高/1秒钟低的脉冲信号。因为8253每个计数器只有十六位,要用两个计数器才能实现一百万次的计数,实现每一秒输出状态发生一次反转。

(3)

实验接线

连接孔1

连接孔2

连接孔1

连接孔2

连接孔1

连接孔2

CS4

8253_CS

VCC

8253_GATE0

L0

8253_OUT0

8253_OUT1

8253_CLK0

VCC

8253_GATE1

1MHz

8253_CLK1

3、

实验程序

CONTROL

equ

0c003h

;控制端口地址

COUNT0

equ

0c000h

;计数器0的地址

COUNT1

equ

0c001h

;计数器1的地址

COUNT2

equ

0c002h

;计数器2的地址

code

segment

assume

cs:code

start

proc

near

mov

al,36h;

00110100B

;

计数器0,16位,方式2,二进制

mov

dx,CONTROL

out

dx,al

mov

ax,1000

;计数器0的时间常数

mov

dx,COUNT0

out

dx,al

;

计数器低字节

mov

al,ah

out

dx,al

;

计数器高字节

mov

al,76h;

01110100B

;

计数器1,16位,方式2,二进制

mov

dx,CONTROL

out

dx,al

mov

ax,1001

;计数器1的时间常数

mov

dx,COUNT1

out

dx,al

;

计数器低字节

mov

al,ah

out

dx,al

;

计数器高字节

jmp

$

start

endp

code

ends

end

start

实验题目

8255并行接口实验

1、

实验目的与要求

(1)

了解8255芯片结构以及编程方法

(2)

了解8255输入、输出实验方法

2、

实验内容

(1)

实验原理

可编程输入输出的并行接口芯片8255A,具有三个八位的I/O口,它有三种工作方式。本实验采用施方式0:PA,PC口输出,PB口输入。

(2)

实验方法

按照实验要求,本实验采用方式0,这种方式不需要任何选通信号,并且采用从C端口读入数据,从A、B端口并行地输出数据,为了效果明显,实验带有一定的延时。

(3)

实验接线

连接孔1

连接孔2

连接孔1

连接孔2

连接孔1

连接孔2

CS0

8255_CS

L0

8255-PA0

L1

8255-PA1

L2

8255-PA2

L3

8255-PA3

L4

8255-PA4

L5

8255-PA5

L6

8255-PA6

L7

8255-PA7

K0

8255-PB0

K1

8255-PB1

K2

8255-PB2

K3

8255-PB3

K4

8255-PB4

K5

8255-PB5

K6

8255-PB6

K7

8255-PB7

3、

实验程序

mode

equ

082h

;

方式0,PA,PC输出,PB输入

PortA

equ

8000h

;

Port

A

PortB

equ

8001h

;

Port

B

PortC

equ

8002h

;

Port

C

CAddr

equ

8003h

;

控制字地址

code

segment

assume

cs:code

start

proc

near

Start:

mov

al,mode

mov

dx,CAddr

out

dx,al

;

输出控制字

;实验2:

PortB

输入

PortA

输出

mov

dx,PortB

in

al,dx

;

读入PortB

mov

dx,PortC

out

dx,al

mov

dx,PortA

out

dx,al

;

输出到PortA

mov

ah,200

call

delay

;调用延时子程序

jmp

Start

endp

delay

proc

near

push

ax

mov

al,0

;

设置延时低位为0

push

cx

mov

cx,ax

;

设置延时CX的为0C800H

loop

$

pop

cx

pop

ax

ret

delay

endp

code

ends

end

start

思考题:

mov

dx,PortC

in

al,dx

;

读入PortC

mov

dx,PortB

out

dx,al

mov

dx,PortA

out

dx,al

;

输出到PortA

mov

ah,200

call

delay

;调用延时子程序

jmp

Start

endp

delay

proc

near

push

ax

mov

al,0

;

设置延时低位为0

push

cx

mov

cx,ax

;

设置延时CX的为0C800H

loop

$

pop

cx

pop

ax

ret

delay

endp

code

ends

end

start

实验题目

8259中断控制器实验

1、

实验目的与要求

(1)

学习8088/86与8259的连接方法。

(2)

学习8088/86对8259的控制方法.。

2、

实验内容

(1)

实验原理

8088/8086需要外接中断控制器才能对外部中断进行处理。

8259可外接8个中断源,本实验只响应INTO中断,8259也可以多级连接以影响多个中断源。将单脉冲信号接到8259的INTO脚。每次中断时,可看到LED显示会加一。

(2)

实验方法

用8088/86控制8259可编程中断控制器,实现对外部中断的响应和处理。要求程序中对每次中断进行计数,并将计数结果用8255的PA口输出到LED。

(3)

实验接线

CS0→8255CS

CS1→8259CS

单脉冲→8259——INTO

(L0—L7)→(8255PA0—PA7)

3、

实验程序

mode

equ

82h

;

8255

工作方式

PA8255

equ

8000h

;

8255

PA口输出地址

CTL8255

equ

8003h

ICW1

equ

00010011b

;

单片8259,上升沿中断,要写ICW4

ICW2

equ

00100000b

;

中断号为20H

ICW4

equ

00000001b

;

工作在8086/88

方式

OCW1

equ

11111110b

;

只响应INT0

中断

CS8259A

equ

09000h

;

8259地址

CS8259B

equ

09001h

data

segment

CNT

db

0

data

ends

code

segment

assume

cs:code,ds:

data

IEnter

proc

near

push

ax

push

dx

mov

dx,PA8255

inc

CNT

mov

al,CNT

out

dx,al

;

输出计数值

mov

dx,CS8259A

mov

al,20h

;

中断服务程序结束指令

out

dx,al

pop

dx

pop

ax

iret

IEnter

endp

IInit

proc

mov

dx,CS8259A

mov

al,ICW1

out

dx,al

mov

dx,CS8259B

mov

al,ICW2

out

dx,al

mov

al,ICW4

out

dx,al

mov

al,OCW1

out

dx,al

ret

IInit

endp

start

proc

near

mov

dx,CTL8255

mov

al,mode

out

dx,al

cli

mov

ax,0

mov

ds,ax

mov

bx,4*ICW2

;

中断号

mov

ax,code

shl

ax,4

;

x

16

add

ax,offset

IEnter

;

中断入口地址(段地址为0)

mov

[bx],ax

mov

ax,0

inc

bx

inc

bx

mov

[bx],ax

;

代码段地址为0

call

IInit

mov

ax,data

mov

ds,ax

mov

CNT,0

;

计数值初始为0

mov

al,CNT

mov

dx,PA8255

out

dx,al

sti

LP:

;

等待中断,并计数。

nop

jmp

LP

start

endp

code

ends

end

start

实验题目

D/A(数/模)转换实验

1、

实验目的与要求

(1)

了解D/A转换的基本原理。

(2)

了解D/A转换芯片0832的性能以及编程方法。

(3)

了解单片机系统中拓展D/A转换的基本方法

2、

实验内容

(1)

实验原理

D/A转换:这是把数字量转换为模拟量的变换,可以将计算机产生的控制量转换为模拟信号,其基本转换原理是把数字量的每一位代码按权的大小转换为相应的模拟分量,然后把各分量相加得到总的模拟量;8位、电流输出型D/A转换芯片,有直通、单缓存以及双缓存三种工作方式。在外部使用运算放大器后可以转换为电压输出,并且分为单极性输出和双极性输出。

(2)

实验方法

利用DAC0832,可以自行编制程序产生锯齿波、三角波、正弦波。三种波轮流显示,用示波器观看。

(3)

实验接线

连接孔1

连接孔2

CS2

DA_CS

-5V-+5V

逻辑波形L3

3、

实验程序

data

segment

assume

ds:

data

SinData:

;正弦数字量表

DB

0C0H,0C3H,0C6H,0C9H,0CCH,0CFH,0D2H,0D5H

DB

0D8H,0DBH,0DEH,0E0H,0E3H,0E6H,0E8H,0EAH

DB

0EDH,0EFH,0F1H,0F3H,0F5H,0F6H,0F8H,0F9H

DB

0FBH,0FCH,0FDH,0FEH,0FEH,0FFH,0FFH,0FFH

DB

0FFH,0FFH,0FFH,0FFH,0FEH,0FEH,0FDH,0FCH

DB

0FBH,0F9H,0F8H,0F6H,0F5H,0F3H,0F1H,0EFH

DB

0EDH,0EAH,0E8H,0E6H,0E3H,0E0H,0DEH,0DBH

DB

0D8H,0D5H,0D2H,0CFH,0CCH,0C9H,0C6H,0C3H

DB

0C0H,0BCH,0B9H,0B6H,0B3H,0B0H,0ADH,0AAH

DB

0A7H,0A4H,0A1H,9FH,9CH,99H,97H,95H

DB

92H,90H,8EH,8CH,8AH,89H,87H,86H

DB

84H,83H,82H,81H,81H,80H,80H,80H

DB

80H,80H,80H,80H,81H,81H,82H,83H

DB

84H,86H,87H,89H,8AH,8CH,8EH,90H

DB

92H,95H,97H,99H,9CH,9FH,0A1H,0A4H

DB

0A7H,0AAH,0ADH,0B0H,0B3H,0B6H,0B9H,0BCH

ends

code

segment

assume

cs:code

;延时子程序

proc

Delay

near

push

cx

mov

cx,ax

DelayLoop:

nop

nop

nop

nop

nop

nop

loop

DelayLoop

pop

cx

ret

endp

proc

OutputDA

near

mov

dx,CS0832

out

dx,al

ret

endp

proc

ShowSin

near

;

0832输出以转换

push

cx

mov

bx,400H

+

offset

SinData

mov

cx,80h

ShowSinLoop:

;正弦波

mov

al,[bx]

call

OutputDA

inc

bx

mov

ax,40

call

Delay

loop

ShowSinLoop

pop

cx

ret

endp

proc

ShowTri

near

push

cx

mov

bx,80h

mov

cx,80h

ShowTriLoop:

;

锯齿波

mov

al,bl

call

OutputDA

inc

bx

mov

ax,40

call

Delay

loop

ShowTriLoop

pop

cx

ret

endp

proc

ShowSq

near

;方波

push

cx

mov

al,80h

call

OutputDA

mov

cx,10

D1:

;

显示一段0V波形

mov

ax,200

call

Delay

loop

D1

mov

al,0ffh

call

OutputDA

mov

cx,10

D2:

;

显示一段5V波形

mov

ax,200

call

Delay

loop

D2

pop

cx

ret

endp

;

主程序

start

proc

near

mov

ax,0

mov

ds,ax

mov

es,ax

MLoop:

mov

cx,100

MD1:

call

ShowSin

loop

MD1

mov

cx,100

MD2:

call

ShowTri

loop

MD2

mov

cx,100

MD3:

call

ShowSq

loop

MD3

jmp

MLoop

start

endp

code

ends

end

start

实验题目

A/D(模/数)转换实验

1、

实验内容

(1)实验原理

利用实验板上的ADC0809做A/D转换器,实验板上的电位器提供模拟量输入,编制程序,将模拟量转换成二进制数字量,用8255的PA口输出到发光二极管显示。

(2)实验方法

通过电位器提供模拟量输入,利用0809芯片转换为二进制数字量,并通过LED灯管显示出来;0809转换结束后,输出高电平的EOC信号给8259的IN0中断源,并通过中断服务程序利用8255并行地把转换结果输出到LED灯。

(3)实验接线

连接孔1

连接孔2

连接孔1

连接孔2

CS1

8255CS

CS0

AD_CS

电位器输出

IN0

L0

8255-PA0

L1

8255-PA1

L2

8255-PA2

L3

8255-PA3

L4

8255-PA4

L5

8255-PA5

L6

8255-PA6

L7

8255-PA7

2、

实验程序

mode

equ

082h

;8255工作字10000010B,方式0,A、C口输入,B输入

PA

equ

09000h

;8255A口地址

CTL

equ

09003h

;8255A控制地址

CS0809

equ

08000h

;AD转换器端口

code

segment

assume

cs:code

start

proc

near

mov

bx,0f123h

mov

ax,5678h

mov

[bx],ax

mov

ax,[bx]

mov

ax,1234h

mov

bx,5678h

add

ax,bx

mov

bx,400h

mov

[bx],ax

mov

al,mode

;送8255方式字

mov

dx,CTL

out

dx,al

again:

mov

al,0

;虚写启动

mov

dx,CS0809

out

dx,al

;

起动

A/D

mov

cx,40h

loop

$

;

延时

>

100us

in

al,dx

;

读入结果

mov

dx,PA

;送到A口去

out

dx,al

jmp

again

code

ends

end

start

思考题:以中断方式实现数据采集,实现代码如下:

md8255

equ

82h

;

8255

工作方式,可用PA口方式0输出

pa8255

equ

9000h

;

8255

PA口输出地址

ctl8255

equ

9003h

;

8255

控制口地址

cs0809

equ

08000h

;0809芯片地址

icw1

equ

00010011b

;

单片8259,上升沿中断,要写ICW4

icw2

equ

00100000b

;

中断号为20H

icw4

equ

00000001b

;

工作在8086/88

方式

ocw1

equ

11111110b

;

只响应INT0

中断

cs8259a

equ

0a000h

;

8259偶地址

cs8259b

equ

0a001h

;

8259奇地址

code

segment

assume

cs:code

;中断服务程序

ienter

proc

near

push

ax

push

dx

;cli

mov

dx,cs0809

in

al,dx

;

读入转换结果

mov

dx,pa8255

out

dx,al

mov

al,0

mov

dx,cs0809

out

dx,al

;

启动

A/D转换

;sti

mov

dx,cs8259a

mov

al,20h

;

中断服务程序结束指令

out

dx,al

pop

dx

pop

ax

iret

ienter

endp

;8259初始化程序

iinit

proc

near

mov

dx,cs8259a

mov

al,icw1

out

dx,al

;向偶地址写入命令

mov

dx,cs8259b

mov

al,icw2

out

dx,al

;向奇地址写入中断类型

mov

al,icw4

out

dx,al

;写入工作方式

mov

al,ocw1

out

dx,al

;设置中断屏蔽

ret

iinit

endp

;主程序段

start

proc

near

cli

;关中断

mov

ax,0

mov

ds,ax

mov

al,md8255

mov

dx,ctl8255

out

dx,al

;设置8255工作方式

mov

bx,4*icw2

;中断向量

mov

ax,code

shl

ax,4

;

x

16

add

ax,offset

ienter

;

mov

[bx],ax

;中断服务程序IP

mov

ax,0

inc

bx

inc

bx

mov

[bx],ax

;中断服务程序CS

call

iinit

mov

al,0

mov

dx,cs0809

out

dx,al

;

启动

A/D转换

sti

;开中断

lp:

;

等待中断

nop

jmp

lp

start

endp

code

ends

end

start

篇2:微机原理与接口技术单片机软件报告

微机原理与接口技术单片机软件报告 本文关键词:微机,单片机,接口,原理,报告

微机原理与接口技术单片机软件报告 本文简介:实验报告课程名称:___微机原理与接口技术_指导老师:_____________成绩:__________________实验名称:__单片机软件实验_____一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(

微机原理与接口技术单片机软件报告 本文内容:

实验报告

课程名称:___微机原理与接口技术_指导老师:_____________成绩:__________________

实验名称:__

单片机软件实验

_____

一、实验目的和要求(必填)二、实验内容和原理(必填)

三、主要仪器设备(必填)四、操作方法和实验步骤

五、实验数据记录和处理六、实验结果与分析(必填)

七、讨论、心得

线

实验一、内存操作

一、

实验目的

a)

掌握数据传送指令;

b)

掌握各种数据传送指令的寻址方式;

c)

熟练运用keil

环境对汇编程序进行调试;

d)

掌握数据传送、复制等程序的设计与调试方法。

二、

实验内容

基础型实验内容

1、

下列程序的功能是给外部RAM8000~80FFH的256个单元的内容赋值,赋值的内容取决于程序中A的赋值。在Keil环境运行该程序,并观察寄存器及内存单元的变化

2、

下列程序将3000H起始的256个字节存储块移动到4000H起始的256个字节存储块,在Keil环境运行如下程序,观察寄存器及存储单元的变化。

设计型实验内容

1、

在keil环境修改内部RAM

30H

~3FH的内容分别为#00H-#0FH,设计程序实现将内部RAM30H-3FH到40H-4FH的数据块拷贝。

2、

在keil环境修改内部RAM

30H

~3FH的内容分别为#00H-#0FH,设计程序实现将片内30H~3FH单元的内容复制到片外1030H~103FH中。

3、

在keil环境修改内部RAM

30H

~3FH的内容分别为#00H-#0FH,设计程序实现将内部RAM30H

~3FH内容逆序拷贝到外部数据XRAM:0000H

~000FH中。使用单步、断点方式调试程序,查看特殊功能寄存器、内部数据RAM、外部数据空间的变化。

三、

实验设备

计算机一台

四、

实验代码

基础型

1、

ORG

0000H

START

EQU

8000H

MAIN:

MOV

DPTR,#START

;起始地址

MOV

R0,#0

;设置256字节计数值

MOV

A,#1H

Loop:

MOVX

@DPTR,A

INC

DPTR

;指向下一个地址

DJNZ

R0,Loop

;计数值减一

NOP

SJMP

$

END

2、

ORG

0000H

MOV

DPTR,#3000H

MOV

A,#01H

MOV

R5,#0

;设置256字节计数值

LOOP:

MOVX

@DPTR,A

INC

DPTR

DJNZ

R5,LOOP

MOV

R0,#30H

MOV

R1,#00H

MOV

R2,#40H

MOV

R3,#00H

MOV

R7,#0

LOOP1:

MOV

DPH,R0

MOV

DPL,R1

;外部地址

MOVX

A,@DPTR

MOV

DPH,R2

MOV

DPL,R3

MOVX

@DPTR,A

INC

R1

INC

R3

DJNZ

R7,LOOP1

SJMP

$

END

设计型

1、

ORG

0000H

MAIN:MOVR2,#10H

;循环次数赋值

MOV

A,#00H

MOVR1,#30H

LOOP1:[email protected],A

INC

R1

INC

A

DJNZ

R2,LOOP1

;计数值减1

MOV

R2,#10H

;循环次数重新赋值

MOVR1,#30H

MOV

R0,#40H

;赋值完成

LOOP2:MOV

A,@R1

[email protected],A

INC

R1

INC

R0

DJNZR2,LOOP2

;拷贝完成

LJMP

1000H

END

2、

ORG

1000H

MAIN:MOV

R2,#10H

;循环次数赋值

MOV

A,#00H

MOV

R1,#30H

LOOP3:MOV

@R1,A

INC

R1

INC

A

DJNZ

R2,LOOP3

;计数值减1

MOV

R2,#10H

;循环次数重新赋值

MOV

DPTR,#1030H

MOV

R1,#30H

;赋值完成

LOOP4:MOV

A,@R1

MOVX

@DPTR,A

INC

R1

INC

DPTR

DJNZ

R2,LOOP4

;拷贝完成

LJMP

2000H

END

3、

ORG

2000H

MAIN:MOV

R2,#10H

;循环次数赋值

MOV

A,#00H

MOV

R1,#30H

LOOP5:MOV

@R1,A

INC

R1

INC

A

DJNZ

R2,LOOP5

;计数值减1

MOV

R2,#10H

;循环次数重新赋值

MOV

R1,#3FH

MOV

DPTR,#0000H

CLR

C

LOOP6:MOV

A,@R1

MOVX

@DPTR,A

DEC

R1

;减一,实现逆序

INC

DPTR

DJNZ

R2,LOOP6

SJMP

$

END

五、

实验结果

基础型

1、

2、

X:3000H

X:4000H

设计型

1、

2、

3、

六、

讨论心得

这次实验主要熟悉了keil环境的使用,简单练习了循环语句、赋值语句、对外部存储器的读取与赋值等,比较基础,主要积累经验。开始认识到代码规范、注释的重要性,以后注意。

实验二、数制与代码转换

一、

实验目的

a)

了解微机系统中的数制与代码表示方法;

b)

掌握计算机中使用的各种代码转换方法;

c)

掌握实现分支、循环的指令及其程序的编写方法;

二、

实验内容

基础型实验内容

1、

以下程序完成单字节的ASCII码到十六进制数转换,完成空白处程序填写,并在Keil环境运行程序,观察寄存器及内存单元的变化。

2、

以下程序完成单字节的BCD码到十六进制数转换,,在Keil环境运行程序,观察寄存器及内存单元的变化。

3、

以下程序将单字节十六进制数A的值转换为十进制数,存放在30H~32H中,完成空白处程序填写,并在Keil环境运行程序,观察寄存器及内存单元的变化。

设计型实验内容

1、

设一串字母的ASCII存于30H起始的单元中,设计程序判断字母是否为大写字母,是则将大写字母的ASCII字符转换成小写字母的ASCII字符,为小写则不转换。

2、

将单字节十六进制数D8H转换为十进制数,存放在30H~33H中。,

3、

设计程序,将十六进制数614EH转换成ASCII码,使用单步、断点方式调试程序,查看结果。

三、

实验设备

计算机一台

四、

实验代码

基础型

1、

RESULT

EQU

30H

ORG

0000H

MOV

A,#41H;“A”的ASCII码

CLR

C

SUBB

A,#37H

;

转换为十六进制

A

MOV

RESULT,A

LJMP

1000H

END

2、

RESULT

EQU

30H

ORG

1000H

MOV

A,#23H

MOV

R0,A

ANL

A,#0F0H

SWAP

A

MOV

B,#0AH

MUL

AB

MOV

RESULT,A

;转换高位

MOV

A,R0

MOV

B,#0FH

ANL

A,B

ADD

A,RESULT

MOV

RESULT,A

;

转换低位

LJMP

2000H

END

3、

RESULT

EQU

30H

ORG

2000H

MOV

A,#7BH

MOV

B,#64H

DIV

AB

MOV

RESULT,A

;除以100得百位数

MOV

A,B

MOV

B,#0AH

DIV

AB

MOV

RESULT+1,A

;除以10得十位数

MOV

RESULT+2,B

;余数为个位数

SJMP

$

END

设计型

1、

ORG

0000H

MOV

R0,#30H

MOV

30H,#41H

MOV

31H,#42H

MOV

32H,#43H

MOV

33H,#61H

MOV

34H,#62H

MOV

35H,#63H

L0:CJNE

@R0,#0,SUB1

LJMP

1000H

SUB1:

ACALL

HASC1

INC

R0

LJMP

L0

ORG

0200H;子程序:将大写字母ASCII码转换为小写字母ASCII码

HASC1:

CJNE

@R0,#41H,L1

;与A的ASCII码比较

MOV

@R0,#61H

RET

L1:

JC

L2

CJNE

@R0,#56H,L3

;与Z的ASCII码比较

MOV

@R0,#75H

RET

L2:RET

L3:JC

L4

RET

L4:MOV

A,@R0

;A与Z之间则转换为小写

ADD

A,#20H

MOV

@R0,A

RET

END

2、

RESULT

EQU

30H

ORG

1000H

MOV

A,#0D8H

MOV

B,#64H

DIV

AB

MOV

RESULT+1,A

;除以100得百位数

MOV

A,B

MOV

B,#0AH

DIV

AB

MOV

RESULT+2,A

;除以10得十位数

MOV

RESULT+3,B

;余数为个位数

LJMP

2000H

END

3、

ORG

2000H

MOV

30H,#61H

MOV

31H,#4EH

MOV

R1,#40H

MOV

R0,#30H

MOV

R2,#2

L5:MOV

A,@R0

MOV

B,#0F0H

ANL

A,B

SWAP

A

ACALL

HASC2

INC

R1

MOV

A,@R0

MOV

B,#0FH

ANL

A,B

ACALL

HASC2;调用子程序:将十六进制数转换为ASCII码

INC

R1

INC

R0

DJNZ

R2,L5

SJMP

$

HASC2:

CJNE

A,#0AH,L6

;与A的十六进制数比较

MOV

@R1,#41H

RET

L6:JC

L7

ADD

A,#37H

;0~9的数字加#37H

MOV

@R1,A

RET

L7:

ADD

A,#30H

;A~F的数字加#30H

MOV

@R1,A

RET

END

五、

实验结果

基础型

1、ASCII码41H为十六进制数0AH

3、

BCD码为23H的十六进制数为17H

3、十六进制数7BH转换为十进制数为123

设计型

1、

给30H及之后的地址赋值ABCabc的ASCII码

将大写字母转换为小写字母

2、将单字节十六进制数

D8H

转换为十进制数,存放在

30H~33H

3、十六进制数

614EH存放在30H、31H,转换后的ASCII码在40H到43H

六、

讨论心得

这次实验学习的内容主要是十六进制数、十进制BCD码、ASCII码之间的转换,以及子程序的书写与调用。对于判断是否为十六进制数、大小写字母,主要使用CJNE然后根据C的大小来判断比给定数大还是小,对于判断是否在一个区间需要使用两个CJNE来进行。

10

篇3:接口课设实验报告

接口课设实验报告 本文关键词:接口,实验,报告

接口课设实验报告 本文简介:接口课设实验报告计算机0206班熊兰君(012002013804)一.绪论本实验是一个利用接口硬件平台开发的微机模拟系统,它不仅考查了我们的对接口硬件的掌握和理解程度,同样了锻炼了我们的编程能力。在组长的带领下我们顺利完成了这次实验课设,并收获了很多的相关知识,而且锻炼了我们的团队精神,受益匪浅。二

接口课设实验报告 本文内容:

接口课设实验报告

计算机0206班

熊兰君(012002013804)

一.绪论

本实验是一个利用接口硬件平台开发的微机模拟系统,它不仅考查了我们的对接口硬件的掌握和理解程度,同样了锻炼了我们的编程能力。在组长的带领下我们顺利完成了这次实验课设,并收获了很多的相关知识,而且锻炼了我们的团队精神,受益匪浅。

二.实验目的

掌握接口硬件开发平台的使用方法,利用现有的实验平台和PC机,组成一个微机模拟应用系统;

掌握基本接口电路的综合应用

掌握接口电路的驱动程序和界面软件的设计与编制,学会调试与测试接口软件的一般方法

微机接口技术及接口芯片的综合应用(重点)

三.

实验题目及要求

选课系统

学生通过下位机进行选课,上位机对选课信息进行统计。进入系统需要密码,密码错误或者操作错误时报警。

系统由一个主控机监控和若干个下位机组成,主控机负责数据处理,下位机负责访问接口。

四.

实验内容

这次我们所做的选课系统功能还比较强大,它主要由主控机,下位机,执行部件构成。

1.机实现管理员的功能,界面如下:

主界面主要是方便管理员管理学生基本信息,课程基本信息,选课基本信息。它的功能有:1.增加基本信息;2.删除基本信息;3.查询基本信息。注意,所有的数据信息都存放在Sql

server

数据库上,程序先分析管理员的指令,然后通过ODBC(Open

DataBase

Connecttion)接口操作数据库。另外,主控机程序实现的另一个功能,也就是本程序的核心功能,就是接受下位机的选课信息。当操作员按下“接受选课”按钮后,主控机程序开始接受远程选课信息,接收后会将该信息存入Sql

server

数据库中。

2.下位机是给选课学生的信息窗口,它同时也起到了主控机和执行部件信息传送的作用,而实现这个功能是通过接口实验台上的可编程串行接口芯片8251。

但是选课还是通过执行部件,而不是通过下位机,这一点是十分重要的。以下就下位机的界面:

下位机程序的功能是接受用户选课信息,然后将该信息发送给上位机。需要选课的学生,可以先点击“开始选课”的按钮,然后用拨码开关输入想要选择的功能。

功能1代表选课,功能2代表查询所有课程,功能3表示结束选课。

选功能2后,程序会通过文本框输出所有可供选择的课程的相关信息。选功能1后,程序会一步一步提示用户来操作。这里有两个问题,第一是如果学生输入的密码错误,上位机会发送回代表错误的信息,下位机根据该信息驱动LED显示灯报警;第二,如果学生所选的课程不存在,上位机亦会发送回相应错误代号,下位机根据该代号启动报警程序。

3执行部件由接口实验台上的芯片:可编程的并行I/O接口芯片8255,可编程计数器8253,LED显示灯,手动开关和一个按钮开关组成。它主要做为学生选课的输入和警报提示。

学生通过手动开关拨出用户名密码,还有想选的课程号,按下按钮表示确定。还可以选择查看课程号和课程名。

以上就是本系统的大致功能,当然这只是一个模拟的系统,它实现的功能都很简单。真正要达到实用的阶段,还有很多细节需要完善。但基本的框架,在本系统中已经得到了体现。

五.实施计划及分工

分工如下:首先夏永同学负责整个系统框架的设计,odbc数据源的配置以及界面的设计。吴莎同学和武孟梦同学负责上位机各个功能的实现以及与下位机的通信。我和贾玉芳同学负责下位机各个功能的实现以及硬件连接。同时我们所有人都参与了系统的测试工作。

首先是硬件的连接,按照我们的大概的设计,下位机有一个很重要的的功能,就是反馈执行部件的选择信息,而这项功能除了软件的设计外,最重要的就是硬件连接。对于执行部件与下位机的通信重要是靠可编程并口8255实现的,对于8255我们用到了它的A口进行输出,B口进行输入,C口作为控制口。PA0~PA7依次连接的是实验台上的八个灯,其作用是当用户名和密码不符合主控机中已存的相应的用户名和密码时,这八个灯就会轮回闪烁产生报警的效果。PB0~PB7依次与实验台上八个拨码开关连接,当用户要输入数字信息时,通过这八个开关进行输入(注意这里的数字是用二进制输入而不是八位十进制数字),开始的时候我们将高低位接反了,直接导致整个系统混乱,因为功能项输入错误。PC0口作为SW1的输入口,当SW1按下时,会给PC0一个电平,程序轮询查看,若发现PC0口变为“1”时,就将拨码开关的数字传送给下位机进行处理,所以这里PC0作为控制作用,这里还要注意在连接SW1时,还要经过一个74SL373芯片,这个芯片的OE#口必须和8255的PC4口连接,用PC4口来控制74SL373,当PC4等于“1”时,74SL373关闭,这时SW1就没有任何作用了。还有就是负责双机通信的8251芯片,这里我们用一根连接线将主控机和下位机到26芯插座连接起来进行近距离通信,这个在实验平台已经完成好了,所以不再赘述。控制8251时钟的是8253芯片,它的OUT2端与

8251的

TxC和RxC相连进行控制,

而8253的时钟脉冲端CLK2与1MHZ脉冲信号进行连接,至于它的GATE2与8255的PC6口连接进行脉冲源的控制,以上就是下位机与执行部件的硬件连接。

接下来就是程序的设计了,我们开始用的C语言进行编写,后来因为要进一步完善系统功能,要用到ODBC连接数据库,还有界面的编写就将持续移植到VC上使用C++语言。程序主要实现的功能有:1.将用户名和密码输入并传给主控机进行正确性的判断;2.

当用户选择“1”号功能时,用户可以进行选课,下位机将选课信息(学生号和课程号)传给主控机并存储起来;3.

当用户选择“2”号功能时,用户可以查看选课信息(课程号和课程名);

4.当用户选择“3”功能时,退出选课系统。

这个程序按照功能来划分两大部分,一个是与传送信息有关程序,二者是与界面有关的程序。由于界面相关程序由夏永同学负责,所以这里就不多说了,我们主要负责的是传送信息有关的程序,大概如下:

#define

PORTTALK_TYPE

40001

#define

IOCTL_READ_PORT_UCHAR

/

CTL_CODE(PORTTALK_TYPE,0x904,METHOD_BUFFERED,FILE_ANY_ACCESS)

#define

IOCTL_WRITE_PORT_UCHAR

/

CTL_CODE(PORTTALK_TYPE,0x905,METHOD_BUFFERED,FILE_ANY_ACCESS)

#define

IOCTL_GETINTCODE_PORT_UCHAR

/

CTL_CODE(PORTTALK_TYPE,0x906,METHOD_BUFFERED,FILE_ANY_ACCESS)

unsigned

char

OpenPortTalk(void);

void

ClosePortTalk(void);

void

outportb(unsigned

short

PortAddress,unsigned

char

byte);

unsigned

char

inportb(unsigned

short

PortAddress);portb(unsigned

short

PortAddress);

//myport.cpp

#include

“stdafx.h“#include

“conio.h“#include

“windows.h“#include

#include

“myport.h“HANDLE

PortTalk_Handle

=

NULL;

/*界面相关*/

unsigned

char

OpenPortTalk()

{

PortTalk_Handle

=

CreateFile(“////.//MPNP1“,GENERIC_READ

|

GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if(PortTalk_Handle

==

INVALID_HANDLE_VALUE)

{

return

-1;

}

return

0;

}

void

ClosePortTalk()

{

CloseHandle(PortTalk_Handle);

}

void

outportb(unsigned

short

PortAddress,unsigned

char

byte)

/*写字符传到对应地

{

/*址的端口

DWORD

dwError

=

0;

unsigned

int

error;

DWORD

BytesReturned;

unsigned

char

Buffer[3];

/*BUFFER和pBUFFER是传送过程中的

unsigned

char

pBuffer;

/*中间缓冲区

pBuffer

=

(unsigned

char)pBuffer

=

(unsigned

char)PortAddress

Buffer[2]

=

byte;

error

=

DeviceIoControl(PortTalk_Handle,IOCTL_WRITE_PORT_UCHAR,}

unsigned

char

inportb(unsigned

short

PortAddress)

/*读对应地址的端口的信息

{

unsigned

int

error;

DWORD

BytesReturned;

unsigned

char

Buffer[3];

/*BUFFER和pBUFFER是传送过程中的

unsigned

short

pBuffer;

/*中间缓冲区

pBuffer

=

(unsigned

short)pBuffer

=

(unsigned

char)PortAddress

error

=

DeviceIoControl(PortTalk_Handle,IOCTL_READ_PORT_UCHAR,return(Buffer[0]);

}

//

class

CClientDlg

:

public

CDialog

{

public:

CClientDlg(CWnd*

pParent

=

NULL);

void

Init8251(int

state,int

work);

/*初始化8251芯片

void

Trans(int

tran);

/*通过8251芯片传送数值tran

int

Recei();

/*接收发送到8251芯片的数值,便返回该值

void

set_bps(int

bps);

/*设置8253计数器的计数初值

void

sTrans(char

s);

/*传送字符串s

void

sRecei(char

s);

/*接受一个字符串,并存入s中

void

AddSC(int

sid,int

cid);

/*添加一个选课记录

void

sw();

/*检测开关sw1有没有按下,如没有按下,则等待

void

Warning(int

level);

/*当用户名和密码不对时进行报警

enum

{

IDD

=

IDD_SERVER_DIALOG

};

CEditm_Output;

/*系统信息

CStringm_sid;

/*学生信息中的学号信息

CStringm_sname;

/*学生信息中的学生姓名信息

CStringm_password;

/*密码信息

CStringm_cid;

/*课程信息中的课程号信息

CStringm_cname;

/*课程信息中的课程名信息

CStringm_ssid;

/*选课信息中的学生号信息

CStringm_ccid;

/*选课信息中的课程号信息

//}}AFX_DATA

//

ClassWizard

generated

virtual

function

overrides

//{{AFX_VIRTUAL(CServerDlg)

public:

virtual

LRESULT

DisplayMessage(WPARAM

wParam,LPARAM

lParam)

;

protected:

virtual

void

DoDataExchange(CDataExchange*

pDX);//

DDX/DDV

support

//}}AFX_VIRTUAL

protected:

//

Generated

message

map

functions

//{{AFX_MSG(CServerDlg)

virtual

BOOL

OnInitDialog();

afx_msg

void

OnSysCommand(UINT

nID,LPARAM

lParam);

afx_msg

void

OnPaint();

afx_msg

HCURSOR

OnQueryDragIcon();

afx_msg

void

OnDestroy();

afx_msg

void

OnButton1();//查询所有课程

afx_msg

void

OnButton2();//选课

afx_msg

void

OnButton3();//确定

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

//

CClientDlg.cpp

#include

“StdAfx.h“#include

“Server.h“#include

“ServerDlg.h“#include

“ServerDlg.h“#include

#define

factor

16

/*波特率因子16

unsigned

long

int

clk

=

1193182;

/*8251输入时钟频率(十六进制表示)

CClientDlg::

CClientDlg

(CWnd*

pParent

)

:

CDialog(CClientDlg::IDD,pParent)

{

//{{AFX_DATA_INIT(CServerDlg)

m_sid

=

_T(““);

m_password

=

_T(““);

m_cid

=

_T(““);

//}}AFX_DATA_INIT

}

//以上是程序面板上文本框对应的变量的定义

void

CClientDlg::DoDataExchange(CDataExchange*

pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CServerDlg)

DDX_Control(pDX,IDC_EDIT1,m_Output);

DDX_Text(pDX,IDC_EDIT2,m_sid);

DDX_Text(pDX,IDC_EDIT4,m_password);

DDX_Text(pDX,IDC_EDIT5,m_cid);

//}}AFX_DATA_MAP

}

//以上是变量与资源的对应关系

BEGIN_MESSAGE_MAP(CServerDlg,CDialog)

//{{AFX_MSG_MAP(CServerDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_WM_DESTROY()

ON_BN_CLICKED(IDC_BUTTON3,OnButton3)

ON_BN_CLICKED(IDC_BUTTON1,OnButton1)

ON_BN_CLICKED(IDC_BUTTON2,OnButton2)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

//以上是消息与按钮对应关系的说明

void

CClientDlg::Init8251(int

state,int

work){

/*8251的初始化*/

outportb(IO_BASE+9,0x0)

;

/*

空操作*/

outportb(IO_BASE+9,0x40)

;

/*

内部复位(使D6=1)*/

outportb(IO_BASE+9,0x4e)

;

/*

方式命令字,,查课本p180*/

outportb(IO_BASE+9,0x27)

;

/*工作命令字,例子p183*/

}

void

CClientDlg::set_bps(int

bps){

/*计数器设置

int

i,sendhigh,sendlow;

i=clk/bps;

i=i/factor;//计算计数初值

sendhigh

=

(i>>8)

sendlow

=

i

outportb(IO_BASE+7,0xb6);

outportb(IO_BASE+6,sendlow);//装计数初值低字节

outportb(IO_BASE+6,sendhigh);//装计数初值高字节

}

void

CClientDlg::Trans(int

tran){//发送字符

int

state;

do

state=inportb(IO_BASE+9);

while(!(state=state

outportb(IO_BASE+8,tran);/*发送字符*/

}

int

CClientDlg::Recei(){//接收字符

int

r,state;

do

state=inportb(IO_BASE+9);

while(!(state=state

r=inportb(IO_BASE+8);/*接收字符*/

return

r;

}

void

CClientDlg::sTrans(char

s){//传送字符串

int

length=strlen(s);

Trans(length);

int

i=0;

for(;i

#include

“myport.h“HANDLE

PortTalk_Handle

=

NULL;

/*

Handle

for

PortTalk

Driver/

unsigned

char

OpenPortTalk()

{

PortTalk_Handle

=

CreateFile(“////.//MPNP1“,GENERIC_READ

|

GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if(PortTalk_Handle

==

INVALID_HANDLE_VALUE)

{

return

-1;

}

return

0;

}

void

ClosePortTalk()

{

CloseHandle(PortTalk_Handle);

}

void

outportb(unsigned

short

PortAddress,unsigned

char

byte)

{

DWORD

dwError

=

0;

unsigned

int

error;

DWORD

BytesReturned;

unsigned

char

Buffer[3];

unsigned

char

pBuffer;

pBuffer

=

(unsigned

char)pBuffer

=

(unsigned

char)PortAddress

Buffer[2]

=

byte;

error

=

DeviceIoControl(PortTalk_Handle,IOCTL_WRITE_PORT_UCHAR,}

unsigned

char

inportb(unsigned

short

PortAddress)

{

unsigned

int

error;

DWORD

BytesReturned;

unsigned

char

Buffer[3];

unsigned

short

pBuffer;

pBuffer

=

(unsigned

short)pBuffer

=

(unsigned

char)PortAddress

error

=

DeviceIoControl(PortTalk_Handle,IOCTL_READ_PORT_UCHAR,return(Buffer[0]);

}

//ServerDlg.h

:

class

CServerDlg

:

public

CDialog

{

public:

CServerDlg(CWnd*

pParent

=

NULL);

void

Init8251(int

state,int

work);//初始化8251芯片

void

Trans(int

tran);//通过8251芯片传送数值tran

int

Recei();//接收发送到8251芯片的数值,便返回该值

void

set_bps(int

bps);//设置8253计数器的计数初值

int

getPassword(int

ssid);//返回学号为ssid的同学的密码

int

checkCid(int

ccid);//检查课号为ccid的课程是否存在

void

sTrans(char

s);//传送字符串s

void

sRecei(char

s);//接受一个字符串,并存入s中

void

AddSC(int

sid,int

cid);//添加一个选课记录

enum

{

IDD

=

IDD_SERVER_DIALOG

};

CEditm_Output;

CStringm_sid;

CStringm_sname;

CStringm_password;

CStringm_cid;

CStringm_cname;

CStringm_ssid;

CStringm_ccid;

//}}AFX_DATA

//

ClassWizard

generated

virtual

function

overrides

//{{AFX_VIRTUAL(CServerDlg)

public:

virtual

LRESULT

DisplayMessage(WPARAM

wParam,LPARAM

lParam)

;

protected:

virtual

void

DoDataExchange(CDataExchange*

pDX);//

DDX/DDV

support

//}}AFX_VIRTUAL

protected:

//

Generated

message

map

functions

//{{AFX_MSG(CServerDlg)

virtual

BOOL

OnInitDialog();

afx_msg

void

OnSysCommand(UINT

nID,LPARAM

lParam);

afx_msg

void

OnPaint();

afx_msg

HCURSOR

OnQueryDragIcon();

afx_msg

void

OnDestroy();

afx_msg

void

OnButton3();

afx_msg

void

OnButton1();

afx_msg

void

OnButton2();

afx_msg

void

OnButton5();

afx_msg

void

OnButton4();

afx_msg

void

OnButton6();

afx_msg

void

OnButton7();

afx_msg

void

OnButton11();

afx_msg

void

OnButton12();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

//

ServerDlg.cpp

#include

“StdAfx.h“#include

“Server.h“#include

“ServerDlg.h“#include

“ServerDlg.h“#include

#define

factor

16

//波特率因子16

unsigned

long

int

clk

=

1193182;//8251输入时钟频率(十六进制表示)

CServerDlg::CServerDlg(CWnd*

pParent

)

:

CDialog(CServerDlg::IDD,pParent)

{

//{{AFX_DATA_INIT(CServerDlg)

m_sid

=

_T(““);

m_sname

=

_T(““);

m_password

=

_T(““);

m_cid

=

_T(““);

m_cname

=

_T(““);

m_ssid

=

_T(““);

m_ccid

=

_T(““);

//}}AFX_DATA_INIT

}

//以上是程序面板上文本框对应的变量的定义

void

CServerDlg::DoDataExchange(CDataExchange*

pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CServerDlg)

DDX_Control(pDX,IDC_EDIT1,m_Output);

DDX_Text(pDX,IDC_EDIT2,m_sid);

DDX_Text(pDX,IDC_EDIT3,m_sname);

DDX_Text(pDX,IDC_EDIT4,m_password);

DDX_Text(pDX,IDC_EDIT5,m_cid);

DDX_Text(pDX,IDC_EDIT6,m_cname);

DDX_Text(pDX,IDC_EDIT7,m_ssid);

DDX_Text(pDX,IDC_EDIT8,m_ccid);

//}}AFX_DATA_MAP

}

//以上是变量与资源的对应关系

BEGIN_MESSAGE_MAP(CServerDlg,CDialog)

//{{AFX_MSG_MAP(CServerDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_WM_DESTROY()

ON_BN_CLICKED(IDC_BUTTON3,OnButton3)

ON_BN_CLICKED(IDC_BUTTON1,OnButton1)

ON_BN_CLICKED(IDC_BUTTON2,OnButton2)

ON_BN_CLICKED(IDC_BUTTON5,OnButton5)

ON_BN_CLICKED(IDC_BUTTON4,OnButton4)

ON_BN_CLICKED(IDC_BUTTON6,OnButton6)

ON_BN_CLICKED(IDC_BUTTON7,OnButton7)

ON_BN_CLICKED(IDC_BUTTON11,OnButton11)

ON_BN_CLICKED(IDC_BUTTON12,OnButton12)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

//以上是消息与按钮对应关系的说明

void

CServerDlg::Init8251(int

state,int

work){

outportb(IO_BASE+9,0x0)

;

outportb(IO_BASE+9,0x40)

;

outportb(IO_BASE+9,0x4e)

;

outportb(IO_BASE+9,0x27)

;

}

void

CServerDlg::set_bps(int

bps){

int

i,sendhigh,sendlow;

i=clk/bps;

i=i/factor;//计算计数初值

sendhigh

=

(i>>8)

sendlow

=

i

outportb(IO_BASE+7,0xb6);

outportb(IO_BASE+6,sendlow);//装计数初值低字节

outportb(IO_BASE+6,sendhigh);//装计数初值高字节

}

void

CServerDlg::Trans(int

tran){//发送字符

int

state;

do

state=inportb(IO_BASE+9);

while(!(state=state

outportb(IO_BASE+8,tran);/*发送字符*/

}

int

CServerDlg::Recei(){//接收字符

int

r,state;

do

state=inportb(IO_BASE+9);

while(!(state=state

r=inportb(IO_BASE+8);/*接收字符*/

return

r;

}

int

CServerDlg::getPassword(int

ssid){//根据学号ssid查询数据库中该记录的pssword

CDatabase

database;

database.Open(_T(“select“));//数据源名称

CString

temp=““;

int

pass;

CRecordset

recset;

recset.m_pDatabase=

CString

str=““;

CDBVariant

var;

str.Format(“%d“,ssid);

CString

Req=“SELECT

FROM

St

where

sid=“+str+“;“;

str=““;

recset.Open(CRecordset::forwardOnly,Req,CRecordset::readOnly);

if(recset.IsEOF()){

m_Output.ReplaceSel(“用户不存在!“);

return

0;

}else{

m_Output.ReplaceSel(“该用户存在

!/r/n“);

recset.GetFieldValue(“password“,var

);

pass=var.m_iVal;

recset.Close();

return

pass;

}

}

int

CServerDlg::checkCid(int

ccid){

//检查课程号为ccid的课程是否存在

CDatabase

database;

database.Open(_T(“select“));//数据源名称

CString

temp=““;

CRecordset

recset;

recset.m_pDatabase=

CString

str=““;

CDBVariant

var;

str.Format(“%d“,ccid);

CString

Req=“SELECT

FROM

Co

where

cid=“+str+“;“;

str=““;

recset.Open(CRecordse

版权所有:蓬勃范文网 2010-2024 未经授权禁止复制或建立镜像[蓬勃范文网]所有资源完全免费共享

Powered by 蓬勃范文网 © All Rights Reserved.。蜀ICP备20021444号