北京邮电大学微机原理硬件实验报告 本文关键词:微机,北京,邮电大学,原理,实验
北京邮电大学微机原理硬件实验报告 本文简介:实验报告一: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.
毕业论文题目
评定成绩
入学以来科研成果(包括实际工作的突出贡献和公开发表的论文著作)
︵
思
工想
作品
单德
位和
推政
荐治
意表
见现
︶
单位
(公章)
负责人(签字)*年*月*日
同
行意
专
家
审见
核
组
长(签字)*年*月*日
学
位
评审
定核
分意
委见
员
会
主
席(签字)*年*月*日
学
位
评审
定核
委意
员见
会
主
席(签字)*年*月*日
备注