最新范文 方案 计划 总结 报告 体会 事迹 讲话 倡议书 反思 制度 入党

北京邮电大学微机原理硬件实验报告

日期:2021-01-11  类别:最新范文  编辑:一流范文网  【下载本文Word版

北京邮电大学微机原理硬件实验报告 本文关键词:微机,北京,邮电大学,原理,实验

北京邮电大学微机原理硬件实验报告 本文简介:实验报告一:I/0地址译码和简单并行接口——实验一点亮灯CALLDELAY;延时MOVDX,2A8HOUTDX,AL;熄灭灯CALLDELAYJMPLOPCODEENDSENDSTARTDELAYPROCNEAR;延时子程序PUSHCXPUSHBXMOVBX,250;250×65535LP2:MOV

北京邮电大学微机原理硬件实验报告 本文内容:

实验报告一:I/0地址译码和简单并行接口

——实验一点亮灯

CALL

DELAY

;延时

MOV

DX,2A8H

OUT

DX,AL

;熄灭灯

CALL

DELAY

JMP

LOP

CODE

ENDS

END

START

DELAY

PROC

NEAR

;延时子程序

PUSH

CX

PUSH

BX

MOV

BX,250

;250×65535

LP2:

MOV

CX,0FFFFH

LP1:

LOOP

LP1

DEC

BX

JNZ

LP2

POP

BX

POP

CX

RET

DELAY

ENDP

2、简单并行接口电路

STACK

SEGMENT

STACK

STACK

DB

100

DUP(?)

STACK

ENDS

DATA

SEGMENT

DATA

ENDS

CODE

SEGMENT

ASSUME

CS:CODE,SS:STACK,DS:DATA

START:MOV

AX,DATA

MOV

DS,AX

LOP:

MOV

AH,01H

INT

21H

CMP

AL,1BH

;检查是否按下退出esc键

JZ

ENDING

MOV

DX,2A8H

;将ascii码输出

OUT

DX,AL

JMP

LOP

ENDING:MOV

AL,0

OUT

DX,AL

MOV

AX,4C00H

INT

21H

CODE

ENDS

END

START

六、

实验总结

在这三次实验中出现的问题以及相应的解决方法如下:

实验一:因为对D触发器的特性有些遗忘,在编写程序时犯了不少错误,最终通过请教助教解决了一些疑问,从而顺利写出了代码。

实验二:实验二的程序逻辑比较简单,但连线比较多,在实验过程中,也多次连错了线,通过检查纠正了连线错误,也很快完成了实验。

七、

实验收获与心得体会

这次实验是第一次用汇编语言控制接口,因为理论课尚未讲到相关内容,做实验时,上手地比较慢。通过实验一实验二,熟练了对IN、OUT指令的使用,对接口有了初步认识。同时通过研究译码电路,对“地址”也有了进一步的认识。

实验报告二:可编程并行接口8255的应用

——实验三A口输出C口输入,工作方式为00

MOV

DX,28BH

;控制端口地址

OUT

DX,AL

;8255初始化,写入工作方式控制字

LOP:

MOV

DX,28AH

;将开关状态读入

IN

AL,DX

MOV

DX,288H

;讲状态输出到A口

OUT

DX,AL

MOV

AH,0BH

;检测键盘状态

INT

21H

CMP

AL,0FFH

;如果键盘上有输入则停止程序

JZ

ENDING

JMP

LOP

ENDING:MOV

AL,0

MOV

DX,288H

OUT

DX,AL

MOV

AX,4C00H

INT

21H

CODE

ENDS

END

START

b)

实验四

STACK

SEGMENT

STACK

STACK

DB

100

DUP(?)

STACK

ENDS

DATA

SEGMENT

DATA

ENDS

CODE

SEGMENT

ASSUME

CS:CODE,SS:STACK,DS:DATA

START:MOV

AX,DATA

MOV

DS,AX

MOV

AL,10000000B

MOV

DX,28BH

OUT

DX,AL;8255初始化

LOP:

MOV

AL,3FH;

将0的段码输出给A口

MOV

DX,288H

OUT

DX,AL

MOV

AL,08H;输出位码给C口

MOV

DX,28AH

OUT

DX,AL

CALL

DELAY;延时程序

MOV

AL,06H

;将1的段码输出的A口

MOV

DX,288H

OUT

DX,AL

MOV

AL,04H

;输出选通位码

MOV

DX,28AH

OUT

DX,AL

CALL

DELAY

MOV

AL,7FH

;将8的段码输出的A口

MOV

DX,288H

OUT

DX,AL

MOV

AL,02H;输出选通位码

MOV

DX,28AH

OUT

DX,AL

CALL

DELAY

MOV

AL,06H;将8的段码输出的A口

MOV

DX,288H

OUT

DX,AL

MOV

AL,01H

;输出选通位码

MOV

DX,28AH

OUT

DX,AL

call

DELAY

MOV

AH,0BH

;检查键盘是否有输入

INT

21H

CMP

AL,0ffh

JZ

ENDING

;有则退出

JMP

LOP

ENDING:

MOV

AL,00H

MOV

DX,28AH

OUT

DX,AL

MOV

AX,4C00H

INT

21H

DELAY

PROC

NEAR

PUSH

CX

PUSH

BX

MOV

BX,005H

;250×65535

LP2:

MOV

CX,0fFFFH

LP1:

LOOP

LP1

DEC

BX

JNZ

LP2

POP

BX

POP

CX

RET

DELAY

ENDP

CODE

ENDS

END

START

c)

实验五

STACK

SEGMENT

STACK

STACK

DB

100

DUP(?)

STACK

ENDS

DATA

SEGMENT

KEYVALUE

DB

71H,7CH,07H,4FH

;键盘值对应的段码表,LINE0

DB

79H,77H,7DH,5BH

;LINE1

DB

5EH,6FH,6DH,06H

;LINE2

DB

39H,7FH,66H,3FH

;LINE3

ROW

DB

0EFH,0DFH,0BFH,7FH

DATA

ENDS

CODE

SEGMENT

ASSUME

CS:CODE,SS:STACK,DS:DATA

START:MOV

AX,DATA

MOV

DS,AX

MOV

AL,10000001B;C口高4位接键盘行输出,低4位列输入,A口输出

MOV

DX,28BH

OUT

DX,AL

LEA

BX,KEYVALUE

MOV

SI,0

SCANROW:MOV

AL,ROW[SI]

;扫描行

MOV

DX,28AH

OUT

DX,AL

;输出行

CALL

DELAY

;延迟消抖

IN

AL,DX

;读取列

AND

AL,0FH

CMP

AL,0FH

JZ

NEXT

;此行无键按下

CMP

AL,0EH

JZ

LINE0

;按下第0列的键

CMP

AL,0DH

JZ

LINE1;按下第1列的键

CMP

AL,0BH

JZ

LINE2;按下第2列的键

JMP

LINE3

NEXT:

INC

SI

CMP

SI,4

JB

NEXT1

MOV

SI,0

NEXT1:JMP

SCANROW

LINE0:MOV

CL,[BX+SI+0];查表或许按下的键相应的输出段码

JMP

OUTPUT

LINE1:MOV

CL,[BX+SI+4]

JMP

OUTPUT

LINE2:MOV

CL,[BX+SI+8]

JMP

OUTPUT

LINE3:MOV

CL,[BX+SI+12]

OUTPUT:CMP

CL,3FH

;检查是否是0,是0就退出

JZ

ENDING

MOV

AL,CL

MOV

DX,288H

;传送段码给A口

OUT

DX,AL

MOV

AL,01H

;传送位码给B口

MOV

DX,289H

OUT

DX,AL

MOV

SI,0

JMP

SCANROW

;继续扫描

ENDING:MOV

AL,00

MOV

DX,289H

OUT

DX,AL

MOV

AX,4C00H

INT

21H

DELAY

PROC

NEAR

PUSH

CX

PUSH

BX

MOV

BX,1

;250×65535

LP2:

MOV

CX,0FFFH

LP1:

LOOP

LP1

DEC

BX

JNZ

LP2

POP

BX

POP

CX

RET

DELAY

ENDP

CODE

ENDS

END

START

六、

实验总结

在这三次实验中出现的问题以及相应的解决方法如下:

实验三:一开始没法用开关控制LED的亮灭,程序一运行就直接退出了,检查代码发现自己的退出条件写错了,修改后就能正常工作了。

实验四:四个数码管显示不正常,四个数字都没法稳定的显示,经过调整延时的大小,能够使后两个数码管正常显示,但前两个数码管不受控制,最后发现是前两个数码管坏了。

实验五:按下的键与数码管中显示的图形不一样,经过检查代码和实验箱,发现代码中按键对应的段码表行列顺序与实验箱不一致,经过调整,解决了不一致的问题。

七、

实验收获与心得体会

这三次实验都是围绕着8255并行接口做一些小的应用,其中实验三与实验四逻辑比较简单,实验五稍微难一点,因为理论课还未讲到接口部分,硬件实验需要自己自学接口电路,但从中收获了不少知识,大致明白了如何使用一个接口芯片,学会了自己看手册,根据说明来编程使用接口电路,对地址有了更深刻的理解。

代码都是实验前自己课下独立编写的,因此上实验室操作时比较顺利,但也遇到了一些小错误,但也都独立解决了,在这样的一个过程中,增强了自己的学习能力和独立解决问题的能力。

实验报告三:可编程定时器/计数器(8253/8254)

一、实验目的

学习掌握8253用作定时器的编程原理;

二、实验原理及内容

(1)8253应用小结

8253和8254都是可编程计数器,它们的引脚兼容,功能与使用方法相同。8254是8253的改进型。

1.8253初始化

使用8253前,要进行初始化编程。初始化编程的步骤是:

向控制寄存器端口写入控制字对使用的计数器规定其使用方式等。

向使用的计数器端口写入计数初值。

2.8253控制字

D7D6=00:使用0号计数器,D7D6=01:使用1号计数器

D7D6=10:使用2号计数器,D7D6=11:无效

D5D4=00:锁存当前计数值

D5D4=01:只写低8位(高8位为0),读出时只读低8位

D5D4=10:只写高8位(低8位为0),读出时只读高8位

D5D4=11:先读/写低8位,后读/写高8位计数值

D3D2D1=000:选择方式0,D3D2D1=001:选择方式1

D3D2D1=X10:选择方式2,D3D2D1=X11:选择方式3

D3D2D1=100:选择方式4,D3D2D1=101:选择方式5

D0=0:计数初值为二进制,D0=1:计数初值为BCD码数

(2)实验电路

1、按图4-8-1虚线连接电路

2、接线:

CS

/8253

Y0

/IO

地址

GATE0

/8253

+5V

CLK0

/8253

1M时钟

OUT0

/8253

喇叭或蜂鸣器

(3)实验内容

1.完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。

2.扩展部分:利用小键盘实现弹琴功能,并显示弹奏的乐谱。

注意:8253输入频率应小于2MHz。

三、硬件连线图

四、软件流程图

1、主程序流程

2、

放音子程序流程

3、

弹琴子程序流程

4、

五、源程序

STACK

SEGMENT

STACK

STACK

DB

100

DUP(?)

STACK

ENDS

DATA

SEGMENT

INPUTINFO

DB

0AH,0DH,Please

choose

mode:1

is

playing

music;2

is

spieling,0AH,0DH

DB

$

ERROR_INFO

DB

0AH,0DH,illegal

input,please

input

again!,0AH,0DH,$

TONE

DW

3906,3472,3125,2932,2604,2347,2083

;音调1-7

计数初始值

TIME

DW

1000H,1000H,1000H,2000H,2000H,4000H,4000H

;持续时间

DUANMA

DB

06H,5BH,4FH,66H,6DH,7DH,07H

;与乐谱所对应的数码管段码

KEYVALUE

DB

71H,7CH,07H,4FH

;键盘值对应的段码表,LINE0

DB

79H,77H,7DH,5BH

;LINE1

DB

5EH,6FH,6DH,06H

;LINE2

DB

39H,7FH,66H,3FH

;LINE3

TUNEK

DW

0,0,2083,3125

DW

0,0,2347,3472

DW

0,0,2604,3906

DW

0,0,2932,0

ROW

DB

0EFH,0DFH,0BFH,7FH

DATA

ENDS

CODE

SEGMENT

ASSUME

CS:CODE,SS:STACK,DS:DATA

START:MOV

AX,DATA

MOV

DS,AX

MOV

AL,10000001B;8255初始化;C口高4位接键盘行输出,低4位列输入,A口输出

MOV

DX,28BH

OUT

DX,AL

MOV

AL,00110110B

;8253初始化,工作方式3,使用计时器0

MOV

DX,283H

OUT

DX,AL

BEGIN:MOV

AH,09H

;输入提醒,选择放音或弹琴模式或者退出程序

LEA

DX,INPUTINFO

INT

21H

MOV

AH,01H

INT

21H

CMP

AL,1

JZ

PLAY_MUSIC

CMP

AL,2

JZ

SPIELING

CMP

AL,1BH

JZ

ENDING

JMP

INPUT_ERROR

;输入检错

INPUT_ERROR:MOV

AH,09H

LEA

DX,ERROR_INFO

INT

21H

JMP

BEGIN

PLAY_MUSIC:CALL

PLAYMUSIC

JMP

BEGIN

SPIELING:CALL

SPIELINGP

JMP

BEGIN

ENDING:

MOV

AX,4C00H

INT

21H

PLAYMUSIC

PROC

PUSH

SI

;保护现场数据

PUSH

DI

PUSH

AX

PUSH

BX

PUSH

CX

PUSH

DX

LEA

SI,TONE

;音调表

LEA

DI,TIME

;每一个音调持续时间表

LEA

BX,DUANMA;段码表

MOV

CX,7

;循环控制变量赋值

LOP1:

MOV

AX,[SI]

;计数器赋值

MOV

DX,280H;

计时器0的地址

OUT

DX,AL

;先写入低八位,再写入高八位

MOV

AL,AH

OUT

DX,AL

INC

SI

INC

SI

MOV

AL,[BX]

;在数码管上显示乐谱

MOV

DX,288H

;8255A口地址

OUT

DX,AL

INC

BX

MOV

AL,01H

;传送位码给B口

MOV

DX,289H

OUT

DX,AL

MOV

AX,[DI];延迟,AX为入口参数

CALL

DELAY

INC

DI

INC

DI

MOV

AH,0BH

;检测键盘是否有输入,有则跳出

INT

21H

CMP

AL,0FFH

JZ

POUT

LOOP

LOP1

LEA

SI,TONE

LEA

DI,TIME

LEA

BX,DUANMA

MOV

CX,7

;重新循环

JMP

LOP1

POUT:

POP

DX

POP

CX

POP

BX

POP

AX

POP

DI

POP

SI

RET

PLAYMUSIC

ENDP

SPIELINGP

PROC

PUSH

AX

PUSH

BX

PUSH

CX

PUSH

DX

PUSH

BP

PUSH

SI

PUSH

DI

LEA

BX,KEYVALUE

LEA

BP,TUNEK

MOV

SI,2;只扫描2,3行(0123

4567)

SCANROW:MOV

AL,ROW[SI]

;扫描行

MOV

DX,28AH

OUT

DX,AL

;输出行

PUSH

AX

MOV

AX,1

CALL

DELAY

;延迟消抖

POP

AX

IN

AL,DX

;读取列

AND

AL,0FH

CMP

AL,0FH

JZ

NEXT

;此行无键按下

CMP

AL,0EH

JZ

LINE0

CMP

AL,0DH

JZ

LINE1

CMP

AL,0BH

JZ

LINE2

JMP

LINE3

NEXT:

MOV

AL,36H

;键盘弹起,对8253重新初始化,是蜂鸣器停止发音

MOV

DX,283H

OUT

DX,AL

INC

SI

CMP

SI,4

JB

NEXT1

MOV

SI,2

NEXT1:JMP

SCANROW

LINE0:MOV

CL,[BX+SI+0]

;查表

MOV

DI,SI

SHL

DI,1

MOV

AX,DS:[BP+DI+0]

JMP

OUTPUT

LINE1:MOV

CL,[BX+SI+4]

MOV

DI,SI

SHL

DI,1

MOV

AX,DS:[BP+DI+8]

JMP

OUTPUT

LINE2:MOV

CL,[BX+SI+8]

MOV

DI,SI

SHL

DI,1

MOV

AX,DS:[BP+DI+16]

JMP

OUTPUT

LINE3:MOV

CL,[BX+SI+12]

MOV

DI,SI

SHL

DI,1

MOV

AX,DS:[BP+DI+24]

OUTPUT:CMP

CL,3FH

;检查是否是0,是0就退出

JZ

ENDSP

MOV

DX,280H

;

输出数据给计数器

OUT

DX,AL

MOV

AL,AH

OUT

DX,AL

MOV

AL,CL

;数码管显示乐谱

MOV

DX,288H

;传送段码给A口

OUT

DX,AL

MOV

AL,01H

;传送位码给B口

MOV

DX,289H

OUT

DX,AL

JMP

SCANROW

;继续扫描

ENDSP:POP

DI

POP

SI

POP

BP

POP

DX

POP

CX

POP

BX

POP

AX

RET

SPIELINGP

ENDP

DELAY

PROC

NEAR

PUSH

CX

PUSH

AX

;

MOV

AX,1

;250×65535

LP2:

MOV

CX,08FFH

LP1:

LOOP

LP1

DEC

AX

JNZ

LP2

POP

AX

POP

CX

RET

DELAY

ENDP

CODE

ENDS

END

START

六、实验总结

在本次实验中主要出现了如下问题:

延迟函数没处理好,在本次实验中,我将弹琴功能和放音功能写在同一个程序中,两个部分都需要使用到延迟函数,在放音子程序中,延迟函数起到控制音调持续时间长短的作用,在弹琴功能中,延迟函数主要起键盘消抖的作用。不同的作用所要求的延迟时间长短不一样,一开始没注意到这个问题,导致放出来的音乐很刺耳。

七、实验收获与心得体会

本次实验主要内容是使用8254定时器来播放音乐,经过前几次实验,自己对接口电路的使用越来越熟练,按照手册对接口电路进行初始化和读写即可。实验过程也并不是一帆风顺,出现了一些错误,通过解决代码中的错误,我的调试能力得到了很大的锻炼,也变得更加有耐心去解决一些问题。

实验报告四:串行通讯8251

一、

实验目的

1、了解串行通讯的基本原理。

2、掌握串行接口芯片8251的工作原理和编程方法。

二、

实验原理及内容

1、按图4-16-1连接好电路,(8251插通用插座)其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。

2、编程:

从键盘输入一个字符,将其ASCII码加

1

后发送出去,再接收回来在屏幕上显示,(或将内存制定区域内存放的一批数据通过8251A的TXD发送出去,然后从RXD接收回来,并在屏幕上或数码管上显示出来。)实现自发自收。

3、接线:

CLK0

/8254

1M时钟

GATE0

/8254

+5V

0UT0

/8254

TX/RXCLK

/8251

CS

/8254

Y0

/IO地址

CS

/8251

Y7

/IO地址

RXD

/8251

TXD

/8251

三、

硬件连线图

四、

软件流程图

五、

源程序

STACK

SEGMENT

STACK

STACK

DB

100

DUP(

0

)

STACK

ENDS

DATA

SEGMENT

REMIND_MSG

DB

0AH,0DH,please

input

character:,0AH,0DH,$

NEXTROW

DB

0AH,0DH,$

DATA

ENDS

CODE

SEGMENT

ASSUME

DS:DATA,CS:CODE,SS:STACK

START:MOV

AX,DATA

MOV

DS,AX

MOV

AL,52

;设置8253计数器初值为52

MOV

DX,280H

OUT

DX,AL

MOV

DX,2B9H

MOV

AL,40H;先内部复位

OUT

DX,AL

NOP

MOV

AL,01111110B

;方式控制字

OUT

DX,AL

NOP

MOV

AL,37H;命令控制字

OUT

DX,AL

NOP

MOV

AH,09H;输出提示语

LEA

DX,REMIND_MSG

INT

21H

LOP:

MOV

DX,2B9H

;读状态字,检查发送器是否准备好

WAITT1:IN

AL,DX

TEST

AL,01H

JZ

WAITT1

;没准备好,继续查询

MOV

AH,01H

;输入字符

INT

21H

CMP

AL,1BH

;检查是否是结束字符

JZ

ENDING

INC

AL

MOV

DX,2B8H

OUT

DX,AL

;将数据传出

MOV

DX,2B9H

WAITTT2:IN

AL,DX

;读状态字,检查接收器是否准备好

TEST

AL,02H;

JZ

WAITTT2

MOV

DX,2B8H

IN

AL,DX

MOV

AH,02H

;输出字符

MOV

DL,AL

INT

21H

MOV

AH,09H;换行

LEA

DX,NEXTROW

INT

21H

JMP

LOP

;准备下一次输入

ENDING:MOV

AX,4C00H

INT

21H

CODE

ENDS

END

START

六、

实验总结

本次实验的内容是利用8251芯片实现简单的串行通信,CPU通过查询方式与8251进行联络,实验中并没有出现明显问题。代码的缺陷是没有对接收到的数据进行检错就直接拿来使用。

七、

实验收获及心得体会

本次实验是本学期的最后一次实验,通过前三次实验的训练,本次实验的代码写地比较顺利,

通过四次微机硬件实验,对接口电路有了更深刻的认识,实践了理论课上的知识,对地址有了更准确的理解。掌握了认识、使用一个接口芯片的方法,同时还锻炼了自己编写汇编程序的能力。

篇2:北京邮电大学课设基于MSP430的简单信号发生器的设计

北京邮电大学课设基于MSP430的简单信号发生器的设计 本文关键词:北京,邮电大学,信号发生器,简单,设计

北京邮电大学课设基于MSP430的简单信号发生器的设计 本文简介:基于MSP430的信号发生器设计报告学院:电子工程学院班级:2013211212组员:唐卓浩(2012211069)王旭东(2013211134)李务雨(2013211138)指导老师:尹露课程设计报告——基于MSP430的信号发生器的设计学院:电子工程学院班级:2013211212小组成员:唐卓浩

北京邮电大学课设基于MSP430的简单信号发生器的设计 本文内容:

基于MSP430的信号发生器

设计报告

学院:电子工程学院

班级:2013211212

组员:唐卓浩(2012211069)

王旭东(2013211134)

李务雨(2013211138)

指导老师:尹露

课程设计报告——基于MSP430的信号发生器的设计

学院:电子工程学院班级

:2013211212

小组成员:

唐卓浩(2012211069)

王旭东(2013211134)李务雨(2013211138)

一、摘要

信号发生器是电子实验室的基本设备之一,目前各类学校广泛使用的是标准产品,虽然功能齐全、性能指标较高,但是价格较贵,且许多功能用不上。本设计介绍一款基于MSP430G2553

单片机的信号发生器。该信号发生器虽然功能及性能指标赶不上标准信号发生器,但能满足一般的实验要求,且结构简单,成本较低。本次需要完成的任务是以MSP430

LaunchPad的单片机为控制核心、DAC模块作为转换与按键电路作为输入构成的一种电子产品。MSP430

LaunchPad单片机为控制核心,能实时的进行控制;按键输入调整输出状态,DAC0832将单片机输出的数字信号转化为模拟量,经运放放大后,在示波器上输出。在本次程序设计中充分利用了单片机内部资源,涉及到了中断系统、函数调用等。

关键字:信号发生器

MSP430

单片机

数模转换

二、设计要求

以msp430单片机为核心,通过一个DA(数字模拟)转换芯片,将单片机输出的方波、三角波、正弦波(数字信号)转换为模拟信号输出。提供芯片:msp430G2553、DAC0832、REF102、LM384、OP07。参考框图如下:

图1

硬件功能框图

1、基本要求

(1)

供电电压

VDD=

5V~12V;(√)

(2)

信号频率:5~500Hz(可调);(√)

(3)

输出信号电压可调范围:≥0.5*VDD,直流偏移可调:≥0.5*VDD;(√)

(4)

完成输出信号切换;(√)

(5)

方波占空比:平滑可调20%~80%;(√)

(6)

通带内正弦波峰峰值稳定度误差:≤±10%(负载1K)。(√)

2、发挥部分

(1)

信号频率:5~2000Hz(可调);(√)

(2)

多通道同时输出同频正弦波,方波,三角波。(频率可调);

(3)

输出频率与幅度可调的正弦波与余弦波,相位误差≤±5度;

(4)

自由发挥。

三、实验器材

MSP430G2553单片机(Texas

Instrument);DAC0832模数转换芯片;REF102高精度电压基准;OP07运算放大器;阻值不同的电阻及电位器若干;电容若干;导线若干。

1、

MSP430G2553单片机

TI的MSP430G2系列Launchpad开发板是一款适用于TI最新MSP430G2xx系列产品的完整开发解决方案。其基于USB

的集成型仿真器可提供为全系列MSP430G2xx器件开发应用所必需的所有软、硬件。LaunchPad具有集成的DIP插座,可支持多达20个引脚,从而使MSP430

Value

Line器件能够简便地插入LaunchPad电路板中。此外,其还可提供板上Flash仿真工具,以直接连接至PC

轻松进行编程、调试和评估。此外,它还提供了从MSP430G2xx器件到主机PC或相连目标板的9600波特率的UART串行连接。

MSP430G2系列Launchpad开发板的特性:

(1)USB

调试与编程接口无需驱动即可安装使用,且具备高达9600波特的UART

串行通信速度;

(2)支持所有采用PDIP14或PDIP20封装的MSP430G2xx和MSP430F20xx器件;

(3)两个按钮可实现用户反馈和芯片复位;

(4)器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板。

(5)由此易知,MSP430单片机将用于系统的控制部分。

2、

DAC0832模数转换芯片

DAC模块主要由DAC0832和OPA227PA运算放大器组成。DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。其主要参数如下:

(1)分辨率为8位;

(2)电流稳定时间1us;

(3)可单缓冲、双缓冲或直接数字输入;

(4)只需在满量程下调整其线性度;

(5)单一电源供电(+5V~+15V);

(6)低功耗,20mW

其引脚功能如下:

(1)D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);

(2)ILE:数据锁存允许控制信号输入线,高电平有效;

(3)CS:片选信号输入线(选通数据锁存器),低电平有效;

(4)WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变化换,LE1的负跳变时将输入数据锁存;

(5)XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;

(6)WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。

(7)IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;

(8)IOUT2:电流输出端2,其值与IOUT1值之和为一常数;

(9)Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;

(10)Vcc:电源输入端,Vcc的范围为+5V~+15V;

(11)VREF:基准电压输入线,VREF的范围为-10V~+10V;

(12)AGND:模拟信号地;

(13)DGND:数字信号地

3、

REF102高精度电压基准

REF102是高精度10V电压基准集成电路。由于REF102无需外加恒温装置,因而功耗低、升温快、稳定性好、噪声低。REF102的输出电压几乎不随供电电源电压及负载变化。通过调整外接电阻,输出电压的稳定性及温度漂移可降至最校11.4V至36V的单电源供电电压及优异的全面性能使REF102成为仪器、A/D、D/A及高精度直流电源应用的理想选择。

REF102的特点:

(1)高精度输出:+10V

0.0025V

(2)超低温度漂移:≤2.5ppm/℃

(3)高稳定性:5ppm/1000小时(典型值)

(4)高负载调整率:≤1ppm/V,≤10ppm/mA

(5)宽供电电压范围:11.4VDC至36VDC

(6)低噪声

(7)低静态电流:≤1.4Ma

REF102的引脚:(2)为芯片电源脚,电压范围是11.4V~36V;(4)为公共引脚;(5)为外接调整电阻脚,调整输出电压稳定度及温度漂移;(6)为输出引脚;(8)为输出噪声衰减。

4、

OP07运算放大器

OP07芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路。由于OP07具有非常低的输入失调电压(对于OP07A最大为25μV),所以OP07在很多应用场合不需要额外的调零措施。OP07同时具有输入偏置电流低(OP07A为±2nA)和开环增益高(对于OP07A为300V/mV)的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面。

OP07芯片引脚功能说明:1和8为偏置平衡(调零端),2为反向输入端,3为正向输入端,4接地,5空脚

6为输出,7接电源。

四、硬件电路设计

1、

整体设计思路

方案一:控制部分由MSP430G2553实现,波形产生采用单片压控函数发生器(MAX038等),可同时产生频率可控可变的正弦波、三角波、方波。

优缺点:简单易行,采用专用芯片,系统体积大大减小;但频率步进的步长很难控制,并且整个设计中MSP430G2553仅完成简单的控制功能,资源没有充分利用。

方案二:由MSP430G2553实现对专门的DDS芯片(如AD9850)的控制,产生各种波形。

优缺点:此方案产生波形的频率稳定度高,易于程控。但DDS芯片价格高,系统成本高。

方案三:由MSP430G2553结合DAC0832实现各种波形的产生。

优缺点:此方案可以充分利用MSP430G2553上的资源,降低系统成本,但是产生波形频率较低。

综上,方案三充分利用MSP430G2553的资源,外围电路简单、系统成本较低,可以满足信号发生器的要求,所以最终采用方案三。

2、

硬件控制模块

这次试验共有三个按键输入,分别作为切换波形,加频,减频。

一个滑动变阻器作为占空比的调节,一个作为幅度的调节,一个作为直流偏置的调节。按键直接采用分压法给一个高电位,当按下去的时候相当于接地也就输出了低电平。占空比的调节在于分压法,让滑动变阻器所占电压在0~2.5伏,从而输给芯片产生相应的占空比,再输出。

3、

DAC0832的模块

其八位数据输入接MSP430的八位数据输出,通过Iout1端口输出。使能端与430相连,电源接12V。Iout2接地,f不接。

4、

放大模块

采用了反向放大电路,电源输入电压是12伏,放大了5倍左右。

同时在放大电路前并联一个滑动变阻器100K,通过它来调节整个DAC对应的输出负载电阻,也就可以达到改变电压的幅度的目的。

效果如下(由于该方波是2KHz的方波,频率较高因此边沿看上去不垂直):

5、

直流偏置

采用反向加法电路通过改变直流的接入电阻调节直流电压的大小。图如下,u1为放大之后的输入,u2为-12伏的电压。R1,3,6都是5K的电阻,R2位100k的电位器。则Uout1=12*5/R2-U1,这就达到了直流偏置的效果。

效果见下图:

五、

软件程序设计

1、

设计指标与功能

(1)波形产生和切换。正弦波、三角波和方波依次切换,采样点均为100个。

(2)频率调节。从5Hz到2000Hz可调,步进5Hz,一共400个有效频率点。

(3)占空比调节。从20%到83%平滑可调,使用ADC10连续采集滑动变阻输出电压实现。

2、

软件模块介绍

(1)

变量及宏定义

#define

SWITCH_SIG_TYPE(BIT0)

//P1.0

#define

ADD_FREQ(BIT1)

//P1.1

#define

SUB_FREQ(BIT2)

//P1.2

#define

DAC_WR(BIT3)

//P1.3

#define

ADC10_IN_PORT(BIT4)

//P1.4

#define

P1_IN_PORTS

~(SWITCH_SIG_TYPE

+

ADD_FREQ

+

SUB_FREQ

+

ADC10_IN_PORT)

#define

P1_OUT_PORTSDAC_WR

//

3:DAC

WR

#define

P1_INTERRUPT

(SWITCH_SIG_TYPE

+

ADD_FREQ

+

SUB_FREQ)

#define

P2_OUT_PORTS

(0xff)

//

DAC

data

in

#define

TOTAL_SAMPLING_POINTS100

#define

MAX_FREQ_STEPS400

#define

ENABLE_WR_PORTP1OUT

//当前的波形,0表示正弦波,1是三角波,2是方波

inttccr0_now;

//表示当前的计数初值

uintccr0_idx;

//表示当前计数初值在表中的索引号

ucharpoint_now;

//表示现在采用点的索引值

intduty_circle;

//表示当前的方波高电平的点数,用于表示占空比。

const

long

tccr0_table[MAX_FREQ_STEPS]={32000,.,78,75

};

//5-2000Hz每隔5Hz频率对应的计数器初值表,一个400个频点。

const

uchar

sin_data[TOTAL_SAMPLING_POINTS]={.};

//正弦值表,100点。

const

uchar

tria_data[TOTAL_SAMPLING_POINTS]={.};

//三角波值表,100点。

(2)

基本时钟系统

MSP430x2xx家族的单片机的基本时钟系统模块如下图所示:

MSP430有四个时钟源:LFXT1CLK、XT2CLK、DCOCLK和VLOVLK,系统时钟使用BCSCTL1寄存器设置。下面的初始化代码将系统的时钟时钟源设置为16MHz,DCO的频率设置为16MHz。

void

init_DCO(){

BCSCTL1

=

CALBC1_16MHZ;

DCOCTL

=

CALDCO_16MHZ;

}

上述的每一个时钟源都可以驱动时钟信号电路产生周期时钟信号,一共有三种独立的时钟信号,分别是MCLK、SMCLK和ACLK,其时钟源可以任意指定。这些时钟由寄存器BCSCTL2设置。

BCSCTL2

=

SELM_1

+

DIVM_0;

//

SELMx位置SELM_1,选择MCLK的时钟源为DCOCLK,DIVM_0分频比为1

BCSCTL2

//

SELS位为0表示将SMCLK的时钟源设置为DCOCLK

(3)

定时器A

定时器A是一个16位的计时器,有三种计数模式,可配置任意时钟源驱动,多种capture/compares模式和寄存器。

定时器A的工作模式如下表所示

MCx

模式

工作方式

00

Stop

停止计时

01

Up

mode

从0到TACCR0循环计数

10

Continous

mode

从0到0FFFFH循环计数

11

Up/down

mode

从0计时到TACCR0再回到0循环

定时器的计数模式和时钟源的选择由寄存器TACTL设置。

定时器的中断的产生主要依赖capture/compare寄存器的设置。MSP430x2xx家族一共有三套独立的capture/compare寄存器,可以独立产生中断。

本程序使用的是连续计数模式,计数和中断产生方式如下图所示。本程序只是用了capture/compare寄存器TACCR0和TACTL0产生中断。

void

init_timer_A0(void){

TACTL

|=

TASSEL_2

+

MC_2;

//

TASSELx置TASSEL_2选择SMCLK作为时钟源,

//

MC_2设置技术模式为连续模式

TACCR0

=

tccr0_now;//设置捕获/比较寄存器0的初值

TACCTL0

|=

CCIE;//

捕获/比较寄存器0的中断使能

}

(4)

单片机ADC10

MSP430的ADC是一个十位的模数转换模块,转换出的数字范围为0~1023。转换值的计算公式为:

ADC10一共有两大类工作方式,第一种是直接转换方式,该模式主要的特点是转换后的数据直接存放在ADC10MEM寄存器中。第二种是数据传输方式,主要特点是会将数据自动存放在内存中用户定义好数组中。

在直接转换方式中又有四种模式:

CONSEGx

模式

工作方式

00

单通道单次转换

一个通道输入,只转换一次,下一次转换的触发需要用户手动设置。

01

多通道顺序转换

多通道输入,每个通道依次转换一次,下一次转换的触发需要用户手动设置。

10

单通道循环转换

一个通道输入,下一次转换的触发自动触发。

11

多通道顺序循环

多个通道输入,每个通道依次转换,下一次转换自动触发。

ADC10的中断可选择在数据在ADC10MEM里准备好后触发。

本程序使用的是单通道单次转换,并且不设置ADC10中断,而是在主函数的while(1)循环中手动处理采集数据的时序。之所以不采用中断模式是因为在MSP430中默认不能中断嵌套,当ADC10中断进入时,定时器中断就无法进入,从而影响定时器的精度,另外如果开启中断嵌套,那么中断处理将会更复杂,因此权衡考虑后选择该工作方式。这种方式下ADC10在主程序中执行转换和处理,而定时器中断可以按时进入,保证了定时器的精度。转换的流程如下图所示:

ADC10的参考电平可以有多种选择,如下所示:

本程序选择的是第二种参考电平设置。其中VREF+是ADC10内置的参考电平,将ADC10CTL0寄存器的REF2_5V位置1,表示该电平为2.5V。Vss是MSP430的20号引脚,将其接地,表示最低参考电平为0。因此转换值的计算公式为NADC=1023*Vin/2.5。

初始化函数如下:

void

init_ADC10(void){

ADC10CTL1

|=

INCH_4;

//

A4通道,P1.4输入模拟值。

ADC10CTL1

|=

SHS_0;

//

Sample-and-hold

source

select

ADC10SC

ADC10CTL1

|=

ADC10SSEL_3;//

时钟源为SMCLK

ADC10CTL1

//

数据存储格式,表示使用ADC10MEM的低十位存储数据

ADC10CTL1

|=

CONSEQ_0;//

单通道单转换模式

ADC10AE0

=

ADC10_IN_PORT;//P1.4输入模拟值

ADC10CTL0

//

屏蔽中断

ADC10CTL0

|=

SREF_1

+

ADC10SHT_0

+

REF2_5V

+

REFON;

//

VR+

=

2.5V,VR-

=

Vss

=

0

//REFON开启内部参考电平

ADC10CTL0

//

REFOUT位置1会将参考电压输出到P1.3和P1.4上,不需要因此置0.

ADC10CTL0

|=

ADC10ON;//打开ADC10

}

主程序循环如下,采集数据到占空比的转换算法为右移4位再加20:

while(1){

ADC10CTL0

//关闭采样使能

while(ADC10CTL1

//检测是否忙

ADC10CTL0

|=

ENC

+

ADC10SC;//打开采样使能,开始转换

while(ADC10CTL1

//检测是否忙

int

adc_data

=

ADC10MEM;//读取数据

duty_circle

=(adc_data

>>4)+20;

//占空比限制在

20(20%)~83(83%)之间

//采集到的数据是0~1023

//右移四位就是0~63

//加20就是20~83

//总采样点数是100点

//占空比就是20/100=20%

~

83/100=83%

之间

}

(5)

端口I/O与中断

MSP430有P1、P2一共十六个通用IO口。其功能分配如下

端口

功能

I/O方向

P2.0

P2.7

输出8位数据到DAC

输出

P1.0

按键中断,切换波形

输入

P1.1

按键中断,增加频率

输入

P1.2

按键中断,减小频率

输入

P1.3

DAC的WR信号

输出

P1.4

ADC10的模拟输入口

输入

主要初始化端口方向、功能以及中断,程序如下:

void

init_port_io(void){

P2DIR=

P2_OUT_PORTS;//

设置输出端口P2.0~P2.7

P2REN=0x00;//

不使用上/下拉电阻

P2SEL=0x00;//

端口的功能为IO

P2SEL2=0x00;//

端口的功能为IO

P1DIR//

P1.0

P1.1

p1.2

p1.4输入

P1DIR|=

P1_OUT_PORTS;//

P1.3输出给DAC

WR

P1REN=0x00;

P1SEL=0x00;

P1SEL2=0x00;

}

void

init_port_interrupt(void){

P1IES|=

P1_INTERRUPT;//相应位置1表示下降沿触发

P1IE|=

P1_INTERRUPT;//输入位中断使能

P1IFG//清除标志位

}

五、功能实现

1、

波形输出及切换

波形的输出主要靠定时器周期性触发中断,然后将波形值数组中的值依次循环写到P2上。流程图如下:

波形切换靠按键中断以及改变波形类型标志变量curr_signal_type实现,流程图如下:

获得如下结果:

2、

频率调节

波形的频率调节通过改变计时器初值TACCR0来实现,所需的频率计算公式为

波频率

=

CPU时钟频率/(采样点数*定时器初值)

流程图如下:

为了能够使得频率可达到2000Hz,需要适当减小采样点数。在没有实现最大2000Hz时,采样电视为200点,将点数减少到100点,并适当减小DAC的WR信号的宽度,以达到在更高速的情况下能够将数据写入DAC。

结果如下。

产生5Hz的正弦波:

产生2.145KHz的正弦波

3、

占空比调节

占空比的调节主要靠ADC10采集电位器输入电压并按照一定的算法算出高电平持续的点数duty_circle来表示占空比。

采集转换的流程图如下

相应的产生方波的逻辑为:

20%占空比:

80%占空比:

六、问题及解决方案

1、

三角波和方波没有波形

最开始三角波的每一个采样点的值是由程序计算出来的,程序如下所示:

case

1:

//triangle

if

(point_now

#define

SWITCH_SIG_TYPE(BIT0)

//P1.0

#define

ADD_FREQ(BIT1)

//P1.1

#define

SUB_FREQ(BIT2)

//P1.2

#define

DAC_WR(BIT3)

//P1.3

#define

ADC10_IN_PORT(BIT4)

//P1.4

#define

P1_IN_PORTS

~(SWITCH_SIG_TYPE

+

ADD_FREQ

+

SUB_FREQ

+

ADC10_IN_PORT)

#define

P1_OUT_PORTSDAC_WR

//

3:DAC

WR

#define

P1_INTERRUPT

(SWITCH_SIG_TYPE

+

ADD_FREQ

+

SUB_FREQ)

#define

P2_OUT_PORTS

(0xff)

//

DAC

data

in

#define

TOTAL_SAMPLING_POINTS100

#define

MAX_FREQ_STEPS400

#define

ENABLE_WR_PORTP1OUT

inttccr0_now;

uintccr0_idx;

ucharpoint_now;

intpush_key;

intduty_circle;

const

long

tccr0_table[MAX_FREQ_STEPS]={

32000,16000,10666,8000,6400,5333,4571,4000,3555,3200,2909,2666,2461,2285,2133,2000,1882,1777,1684,1600,1523,1454,1391,1333,1280,1230,1185,1142,1103,1066,1032,1000,969,941,914,888,864,842,820,800,780,761,744,727,711,695,680,666,653,640,627,615,603,592,581,571,561,551,542,533,524,516,507,500,492,484,477,470,463,457,450,444,438,432,426,421,415,410,405,400,395,390,385,380,376,372,367,363,359,355,351,347,344,340,336,333,329,326,323,320,316,313,310,307,304,301,299,296,293,290,288,285,283,280,278,275,273,271,268,266,264,262,260,258,256,253,251,250,248,246,244,242,240,238,237,235,233,231,230,228,226,225,223,222,220,219,217,216,214,213,211,210,209,207,206,205,203,202,201,200,198,197,196,195,193,192,191,190,189,188,187,186,184,183,182,181,180,179,178,177,176,175,174,173,172,172,171,170,169,168,167,166,165,164,164,163,162,161,160,160,159,158,157,156,156,155,154,153,153,152,151,150,150,149,148,148,147,146,146,145,144,144,143,142,142,141,140,140,139,139,138,137,137,136,136,135,135,134,133,133,132,132,131,131,130,130,129,129,128,128,127,126,126,125,125,125,124,124,123,123,122,122,121,121,120,120,119,119,118,118,118,117,117,116,116,115,115,115,114,114,113,113,113,112,112,111,111,111,110,110,109,109,109,108,108,108,107,107,107,106,106,105,105,105,104,104,104,103,103,103,102,102,102,101,101,101,100,100,100,100,99,99,99,98,98,98,97,97,97,96,96,96,96,95,95,95,94,94,94,94,93,93,93,93,92,92,92,91,91,91,91,90,90,90,90,89,89,89,89,88,88,88,88,87,87,87,87,86,86,86,86,86,85,85,85,85,84,84,84,84,83,83,83,83,83,82,82,82,82,82,81,81,81,81,81,80,80,80,78,75};

//

cpu_freq

//

ccr0

=

-----------------------------------

//

sig_freq

total_sampling_points

const

uchar

sin_data[TOTAL_SAMPLING_POINTS]={127,135,143,151,159,167,174,182,189,196,203,209,215,221,226,231,235,239,243,246,249,251,253,254,254,254,254,253,252,250,247,245,241,237,233,228,223,218,212,206,199,192,185,178,171,163,155,147,139,131,123,115,107,99,91,83,76,69,62,55,48,42,36,31,26,21,17,13,9,7,4,2,1,0,0,0,0,1,3,5,8,11,15,19,23,28,33,39,45,51,58,65,72,80,87,95,103,111,119,127};

const

uchar

tria_data[TOTAL_SAMPLING_POINTS]={0,5,10,15,20,26,31,36,41,46,52,57,62,67,72,78,83,88,93,98,104,109,114,119,124,130,135,140,145,150,156,161,166,171,176,182,187,192,197,202,208,213,218,223,228,234,239,244,249,255,255,249,244,239,234,228,223,218,213,208,202,197,192,187,182,176,171,166,161,156,150,145,140,135,130,124,119,114,109,104,98,93,88,83,78,72,67,62,57,52,46,41,36,31,26,20,15,10,5,0};

#pragma

vector

=

TIMER0_A0_VECTOR

__interrupt

void

timer_A0(void){

if(point_now

>=

TOTAL_SAMPLING_POINTS){

point_now

=0;

}

switch(curr_signal_type){

case0:

//

sin;

write_dac(sin_data[point_now]);

break;

case1:

//

triangle

write_dac(tria_data[point_now]);

break;

case2:

//

box

if(point_now

=3){

curr_signal_type

=0;

}

}elseif(push_key

if(ccr0_idx

>=

MAX_FREQ_STEPS){

ccr0_idx

=0;

}

tccr0_now

=

tccr0_table[ccr0_idx];

}elseif(push_key

if(ccr0_idx

>=

MAX_FREQ_STEPS){

ccr0_idx

=

MAX_FREQ_STEPS

-1;

}

tccr0_now

=

tccr0_table[ccr0_idx];

}

P1IFG

//清除标志位

}

void

init_vars(){

curr_signal_type

=0;

point_now

=0;

ccr0_idx

=

MAX_FREQ_STEPS

/2-1;//初始

1kHz

tccr0_now

=

tccr0_table[ccr0_idx];

duty_circle

=

TOTAL_SAMPLING_POINTS

/2;//初始50%

占空比

}

void

init_DCO(){

BCSCTL1=

CALBC1_16MHZ;

DCOCTL=

CALDCO_16MHZ;

BCSCTL2=

SELM_1

+

DIVM_0;

//

select

DCO

as

the

source

of

MCLK

BCSCTL2

//

select

DCO

as

the

source

of

SMCLK

}

void

init_timer_A0(void){

TACTL|=

TASSEL_2

+

MC_2;//

SMCLK

source

and

Mode

continous

TACCR0=

tccr0_now;

TACCTL0

|=

CCIE;//

interrupt

enable

_EINT();

}

void

init_port_io(void){

P2DIR=

P2_OUT_PORTS;//

P2

11111111b

all

out

P2REN=0x00;//

disable

pull

up/down

resistor

P2SEL=0x00;//

io

function

is

selected

P2SEL2

=0x00;

P1DIR

//

P1.0

P1.1

p1.2

p1.4

in

P1DIR

|=

P1_OUT_PORTS;//

P1.3

for

DAC

WR

P1REN=0x00;

P1SEL=0x00;

P1SEL2

=0x00;

}

void

init_port_interrupt(void){

P1IES|=P1_INTERRUPT;//置1,下降沿触发

P1IE|=P1_INTERRUPT;//中断使能

P1IFG//清除标志位

}

void

init_ADC10(void){

ADC10CTL1

|=

INCH_4;//

A4

channel

for

convertion,P1.4

in

ADC10CTL1

|=

SHS_0;

//

Sample-and-hold

source

select

ADC10SC

ADC10CTL1

|=

ADC10SSEL_3;//

SMCLK

16M

ADC10CTL1

//

straght

binary

format

ADC10CTL1

|=

CONSEQ_0;//

Single

channel

single

convertion

ADC10AE0=

ADC10_IN_PORT;//

P1.4

in

ADC10CTL0

//

disable

interrupt

ADC10CTL0

|=

SREF_1

+

ADC10SHT_0

+

REF2_5V

+

REFON;

//

V+

=

2.5V,V-

=

Vss

=

0

ADC10CTL0

//

diasable

refout

to

p1.3

p1.4

ADC10CTL0

|=

ADC10ON;//

enable

adc

}

void

main(void){

WDTCTL

=

WDTPW

|

WDTHOLD;//

Stop

watchdog

timer

init_vars();

init_port_io();

init_port_interrupt();

init_DCO();

init_timer_A0();

init_ADC10();

_bis_SR_register(GIE);//全局中断使能

while(1){

ADC10CTL0

//关闭采样使能

while(ADC10CTL1

//检测是否忙

ADC10CTL0

|=

ENC

+

ADC10SC;//打开采样使能,开始转换

while(ADC10CTL1

//检测是否忙

int

adc_data=

ADC10MEM;//读取数据

duty_circle=(adc_data

>>4)+20;

//占空比限制在

20(20%)~83(83%)之间

//采集到的数据是0~1023

//右移四位就是0~63

//加20就是20~83

//总点数是100点

//占空比就是20/100=20%

~

83/100=83%

之间

}

}

28

/

29

篇3:北京邮电大学高等教育自学考试本科毕业生学士学位申请表

北京邮电大学高等教育自学考试本科毕业生学士学位申请表 本文关键词:申请表,北京,学士学位,高等教育自学考试,本科毕业生

北京邮电大学高等教育自学考试本科毕业生学士学位申请表 本文简介:北京邮电大学高等教育自学考试本科毕业生学士学位申请表填表日期:200*年*月*日姓名准考证号性别民族籍贯出生日期*年*月*日职务或职称电话工作单位或地址所学专业学习考试期限年月至年月参加自考本科考试前的学历学习层次毕业学校所学专业毕业时间参加外国语等级考试的情况考试名称成绩考试时间毕业时间自学考试课

北京邮电大学高等教育自学考试本科毕业生学士学位申请表 本文内容:

北京邮电大学高等教育自学考试本科毕业生学士学位申请表

填表日期:200*年*月*日

姓名

准考证号

性别

民族

籍贯

出生日期*年*月*日

职务或职称

电话

工作单位或地址

所学专业

学习考试期限

月至

参加自考

本科考试

前的学历

学习层次

毕业学校

所学专业

毕业时间

参加外国语等级考试的情况

考试名称

成绩

考试时间

毕业时间

自学考试课程考试成绩

免考课程

课程名称

课程名称

1.

3.

2.

4.

课程

课程名称

成绩

课程名称

成绩

1.

4.

2.

5.

3.

6.

本科段

课程名称

课程名称

1.

12.

2.

13.

3.

14.

4.

15.

5.

16.

6.

17.

7.

18.

8.

19.

9.

20.

10.

21.

11.

22.

毕业论文题目

评定成绩

入学以来科研成果(包括实际工作的突出贡献和公开发表的论文著作)

工想

作品

单德

位和

推政

荐治

意表

见现

单位

(公章)

负责人(签字)*年*月*日

行意

审见

长(签字)*年*月*日

评审

定核

分意

委见

席(签字)*年*月*日

评审

定核

委意

员见

席(签字)*年*月*日

备注

    以上《北京邮电大学微机原理硬件实验报告》范文由一流范文网精心整理,如果您觉得有用,请收藏及关注我们,或向其它人分享我们。转载请注明出处 »一流范文网»最新范文»北京邮电大学微机原理硬件实验报告
‖大家正在看...
设为首页 - 加入收藏 - 关于范文吧 - 返回顶部 - 手机版
Copyright © 一流范文网 如对《北京邮电大学微机原理硬件实验报告》有疑问请及时反馈。All Rights Reserved