计算机硬件技术基础
实验指导书
同济大学
电信学院 实验中心
2011年3月
Tdpit 集成操作软件的安装及使用
3.12 电子发声
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
实验
3.12.1 实验目的
学习用8254定时/计数器使扬声器发声的编程方法。
3.12.2 实验设备
PC微机一台、TD-PIT+ 实验系统一套。
3.12.3 实验内容
根据实验提供的音乐频率
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
和时间表,编写程序控制8254,使其输出连接到扬声器上能发出相应的乐曲。
3.12.4 实验说明及步骤
一个音符对应一个频率,将对应一个音符频率的方波通到扬声器上,就可以发出这个音符的声音。音符与频率对照关系如表3-12-1所示。将一段乐曲的音符对应频率的方波依次送到扬声器,就可以发出这段乐曲的声音。
表3-12-1 音符与频率对照表 (单位:Hz)
利用8254的方式3—“方波发生器”,将相应一种频率的计数初值写入计数器,就可产生对应频率的方波。计数初值的计算如下:
计数初值 = 输入时钟 ÷ 输出频率
例如输入时钟采用系统总线上CLK(1.041667MHz),要得到800Hz的频率,计数初值即为1041667/800。对于每一个音符的演奏时间,可以通过软件延时来处理。首先确定单位延时时间程序(这个要根据PC机的CPU频率做相应的调整)。然后确定每个音符演奏需要几个单位时间,将这个值送入DL中,调用DALLY子程序即可。
;单位延时时间
DALLY PROC
D0: MOV CX,200H
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
RET
DALLY ENDP
;N个单位延时时间 (N送至DL)
DALLY PROC
D0: MOV CX,200H
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
DEC DL
JNZ D0
RET
DALLY ENDP
下面提供了乐曲《友谊地久天长》的频率表和时间表。频率表是将曲谱中的音符对应的频率值依次记录下来(B调、四分之二拍),时间表是将各个音符发音的相对时间记录下来(由曲谱中节拍得出)。
频率表
FREQ_LIST DW 371,495,495,495,624,556,495,556,624 ;
DW 495,495,624,742,833,833,833,742,624
DW 624,495,556,495,556,624,495,416,416,371
DW 495,833,742,624,624,495,556,495,556,833
DW 742,624,624,742,833,990,742,624,624,495
DW 556,495,556,624,495,416,416,371,495,0
时间表
TIME_LIST DB 4, 6, 2, 4, 4, 6, 2, 4, 4 ;
DB 6, 2, 4, 4, 12, 1, 3, 6, 2
DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4
DB 12, 4, 6, 2, 4, 4, 6, 2, 4, 4
DB 6, 2, 4, 4, 12, 4, 6, 2, 4, 4
DB 6, 2, 4, 4, 6, 2, 4, 4, 12
频率表和时间表是一、一对应的,频率表的最后一项为0,作为重复的标志。根据频率表中的频率算出对应的计数初值,然后依次写入8254的计数器。将时间表中相对时间值带入延时程序来得到音符演奏时间。实验参考程序流程如图3-12-1所示。
实验步骤如下。
(1) 确认从PC机引出的两根扁平电缆已经连接在实验平台上。
(2) 首先运行CHECK程序,查看I/O空间始地址。
(3) 利用查出的地址参考流程图编写程序,然后编译链接。
(4) 参考图3-12-2所示连接实验线路。
(5) 运行程序,听电子发声单元的扬声器发出的音乐是否正确。
图3-12-1 电子发声设计实验参考程序流程图
图3-12-2 电子发声设计实验参考接线图
;Sound.asm
;电子发声设计实验
;****************根据查看端口资源修改下列符号值*******************
IOY0 EQU 9C00H
;*****************************************************************
MY8254_COUNT0 EQU IOY0+00H*4 ;8254计数器0端口地址
MY8254_COUNT1 EQU IOY0+01H*4 ;8254计数器1端口地址
MY8254_COUNT2 EQU IOY0+02H*4 ;8254计数器2端口地址
MY8254_MODE EQU IOY0+03H*4 ;8254控制寄存器端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
FREQ_LIST DW 371,495,495,495,624,556,495,556,624 ;频率表
DW 495,495,624,742,833,833,833,742,624
DW 624,495,556,495,556,624,495,416,416,371
DW 495,833,742,624,624,495,556,495,556,833
DW 742,624,624,742,833,990,742,624,624,495
DW 556,495,556,624,495,416,416,371,495,0
TIME_LIST DB 4, 6, 2, 4, 4, 6, 2, 4, 4 ;时间表
DB 6, 2, 4, 4, 12, 1, 3, 6, 2
DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4
DB 12, 4, 6, 2, 4, 4, 6, 2, 4, 4
DB 6, 2, 4, 4, 12, 4, 6, 2, 4, 4
DB 6, 2, 4, 4, 6, 2, 4, 4, 12
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV DX,MY8254_MODE ;初始化8254工作方式
MOV AL,36H ;定时器0、方式3
OUT DX,AL
BEGIN:MOV SI,OFFSET FREQ_LIST ;装入频率表起始地址
MOV DI,OFFSET TIME_LIST ;装入时间表起始地址
PLAY: MOV DX,0FH ;输入时钟为1.0416667MHz,1.0416667M = 0FE502H
MOV AX,0E502H
DIV WORD PTR [SI] ;取出频率值计算计数初值,0F4240H / 输出频率
MOV DX,MY8254_COUNT0
OUT DX,AL ;装入计数初值
MOV AL,AH
OUT DX,AL
MOV DL,[DI] ;取出演奏相对时间,调用延时子程序
CALL DALLY
ADD SI,2
INC DI
CMP WORD PTR [SI],0 ;判断是否到曲末?
JE BEGIN
MOV AH,1 ;判断是否有按键按下?
INT 16H
JZ PLAY
QUIT: MOV DX,MY8254_MODE ;退出时设置8254为方式2,OUT0置0
MOV AL,10H
OUT DX,AL
MOV AX,4C00H ;结束程序退出
INT 21H
DALLY PROC ;延时子程序
D0: MOV CX,200H
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
DEC DL
JNZ D0
RET
DALLY ENDP
CODE ENDS
END START
思考题:
通过修改音符“频率表”和节拍“时间表”,自己设计演奏一曲。
3.14 点阵LED显示设计实验
3.14.1 实验目的
学习点阵LED的操作方法。
3.14.2 实验设备
PC微机一台、TD-PIT+ 实验系统一套。
3.14.3 实验内容
使用基本输入输出单元中的两路输出OA[7:0]和OB[7:0]分别控制点阵LED的行控制R[7:0]和列控制L[7:0]。编写程序,使点阵LED的每一行和每一列依次循环显示。
3.14.4 实验说明及步骤
8×8点阵LED相当于8×8个发光管组成的阵列,其中每一行共用一个阳极(行控制),每一列共用一个阴极(列控制)。行控制和列控制满足正确的电平就可使相应行列的发光管点亮。实验平台上点阵LED的管脚及相应的行、列控制位如图3-14-1所示。
(a) (b)
图3-14-1 8×8点阵LED管脚图
本实验利用基本输入输出单元的两路输出分别控制点阵LED的行和列,编写一个简单的程序,使每一行和每一列依次循环显示。参考程序流程如图3-14-2所示。
实验步骤如下。
(1) 确认从PC机引出的两根扁平电缆已经连接在实验平台上。
(2) 首先运行Tdpit集成操作软件,检查端口资源分配情况。记录与所使用片选信号对应的I/O端口始地址。
(3) 利用查出的地址编写程序,然后编译链接。
(4) 实验参考接线如图3-14-2所示连接实验线路。
(5) 运行程序,观察LED显示是否正确。
图3-14-2 点阵LED显示实验参考程序流程图
图3-14-3 8×8点阵LED显示实验参考接线图
图3-14-4 16×16点阵LED显示实验参考接线图
;Led-HZ.asm
;32位LED点阵汉字显示实验
INCLUDE LED-HZ.inc
.386P
;****************根据查看端口资源修改下列符号值*******************
IOY0 EQU 9C00H ;片选IOY0对应的端口始地址
;*****************************************************************
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT USE16
ADDR DW ?
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
A2: MOV ADDR,OFFSET HZDOT ;取汉字数组始地址
MOV SI,ADDR
A1: MOV CX,20H ;控制1屏显示时间
LOOP2: CALL DISPHZ
SUB SI,32
LOOP LOOP2
KEY: MOV AH,1 ;判断是否有按键按下?
INT 16H
JNZ QUIT
ADD SI,2
MOV AX,SI
SUB AX,ADDR
CMP AX,352 ;比较文字是否显示完毕
JNB A2
JMP A1
QUIT: MOV EAX,0 ;灭灯
MOV DX,IOY0
OUT DX,EAX
MOV AX,4C00H ;结束程序退出
INT 21H
DISPHZ PROC NEAR ;显示1屏汉字子程序
PUSH CX
MOV CX,16
MOV BX,0FFFEH
LOOP1: MOV AL,BYTE PTR[SI]
MOV AH,BYTE PTR[SI+1]
ROL EAX,16
MOV AX,BX
ADD SI,2
ROL BX,1
NOT EAX
MOV DX,IOY0
OUT DX,EAX
CALL DALLY
LOOP LOOP1
POP CX
RET
DISPHZ ENDP
DALLY PROC NEAR ;软件延时子程序
MOV AX,0FFFFH
D1: DEC AX
JNZ D1
RET
DALLY ENDP
CODE ENDS
END START
;LED-HZ.asm的包含文件,显示汉字的字模点阵数据
;LCD显示设计实验
;本文件为16×16点阵中文字库文件,字的横向8点构成一字节,左边点在字节的低位,
;字符点阵四角按左上角→右上角→左下角→右下角取字
;如你想在以后继续用HZDotReader打开文件,追加汉字点阵数据,请不要修改或增删所有注释
DATA SEGMENT
HZDOT:
;空白
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
;西 CCEF7
DB 000H,000H,0FFH,0FFH,060H,006H,060H,006H
DB 0FEH,07FH,066H,066H,066H,066H,066H,066H
DB 066H,066H,036H,07CH,01EH,060H,00EH,060H
DB 006H,060H,0FEH,07FH,006H,060H,000H,000H
;安 CB0B2
DB 0C0H,000H,080H,001H,0FCH,0FFH,00CH,060H
DB 066H,030H,0E0H,000H,060H,000H,0FFH,0FFH
DB 030H,00CH,030H,00CH,030H,006H,0E0H,003H
DB 080H,001H,0E0H,007H,038H,03CH,00FH,018H
;唐 CCCC6
DB 080H,001H,000H,003H,0FCH,07FH,00CH,003H
DB 0FCH,01FH,00CH,01BH,0FCH,07FH,00CH,01BH
DB 0FCH,01FH,00CH,003H,0FCH,01FH,03CH,018H
DB 036H,018H,0F6H,01FH,033H,018H,000H,000H
;都 CB6BC
DB 030H,000H,030H,0FCH,0FEH,0CFH,0B0H,06DH
DB 0F0H,03CH,0FFH,01FH,030H,03CH,018H,06CH
DB 0FCH,0CDH,08EH,0CDH,0FFH,0CDH,08CH,0FDH
DB 08CH,06DH,0FCH,00DH,08CH,00DH,000H,00CH
;科 CBFC6
DB 0E0H,030H,03EH,033H,030H,036H,030H,036H
DB 0FFH,030H,038H,033H,078H,036H,0FCH,036H
DB 03CH,0F0H,036H,03EH,0F3H,033H,030H,030H
DB 030H,030H,030H,030H,030H,030H,030H,030H
;教 CBDCC
DB 030H,00CH,030H,00CH,0FEH,00DH,0F0H,0FEH
DB 0FFH,067H,030H,066H,018H,067H,0FCH,036H
DB 067H,03CH,030H,03CH,0F0H,019H,03FH,018H
DB 030H,03CH,030H,037H,0FCH,0E1H,018H,060H
;仪 CD2C7
DB 030H,003H,030H,006H,018H,03EH,0D8H,036H
DB 0CCH,030H,0CEH,018H,08FH,019H,08CH,019H
DB 00CH,00FH,00CH,00FH,00CH,006H,00CH,00FH
DB 08CH,019H,0CCH,0F0H,07CH,060H,00CH,000H
;器 CC6F7
DB 0FCH,07EH,0CCH,066H,0CCH,066H,0FCH,07EH
DB 080H,019H,080H,031H,0FFH,07FH,0E0H,007H
DB 038H,01CH,00FH,0F0H,0FCH,07FH,0CCH,033H
DB 0CCH,033H,0CCH,033H,0FCH,03FH,000H,000H
;公 CB9AB
DB 000H,000H,060H,006H,0E0H,006H,060H,006H
DB 030H,00CH,030H,018H,018H,038H,0CCH,0F0H
DB 0C6H,061H,0C0H,000H,060H,00CH,030H,018H
DB 098H,03FH,0FCH,039H,018H,018H,000H,000H
;司 CCBBE
DB 000H,000H,0FCH,07FH,000H,060H,000H,060H
DB 0FEH,06FH,000H,060H,000H,060H,0FCH,067H
DB 00CH,066H,00CH,066H,0FCH,067H,00CH,066H
DB 00CH,060H,000H,078H,000H,030H,000H,000H
;空白
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DATA ENDS
思考题:
实验参考接线如图3-14-4所示。利用取字模软件得到汉字字符数组,设计程序,在16×16点阵上滚动显示“西安唐都科教仪器”。
4.1 步进电机控制实验
4.1.1 实验目的
(1) 学习步进电机的控制方法。
(2) 学会用8255控制步进电机。
4.1.2 实验设备
PC微机一台、TD-PIT+ 实验系统一套、选配四项八拍步进电机一个。
4.1.3 实验内容
学习步进电机的控制方法,编写程序,利用8255的B口来控制步进电机的运转。
4.1.4 实验说明及步骤
使用开环控制方式能对步进电机的转动方向、速度、角度进行调节。所谓步进,就是指每给步进电机一个递进脉冲,步进电机各绕组的通电顺序就改变一次,即电机转动一次。根据步进电机控制绕组的多少可以将电机分为三相、四相和五相。实验平台可连接的步进电机为四项八拍电机,电压为DC12V,其励磁线圈及其励磁顺序如图4-1-1及表4-1-1所示。
表4-1-1 单次脉冲励磁顺序
图4-1-1 四项八拍电机励磁线圈
实验中PB端口各线的电平在各步中的情况如表4-1-2所示。实验电路如图4-1-2所示。
表4-1-2 PB端口各线的电平在各步中的情况
图4-1-2 步进电机控制实验参考接线图
实验步骤如下:
(1) 确认从PC机引出的两根扁平电缆已经连接在实验平台上。
(2) 首先运行CHECK程序,查看I/O空间始地址。
(3) 利用查出的地址编写程序,然后编译链接。
(4) 参考图4-1-3所示连接实验线路。
(5) 运行程序,观察步进电机的转动情况。
注意:步进电机不使用时请断开连接器,以免误操作使电机过分发热。
;Bujin.asm
;步进电机控制实验
;****************根据查看端口资源修改下列符号值*******************
IOY0 EQU 9C00H ;片选IOY0对应的端口始地址
;*****************************************************************
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
TTABLE DB 01H,03H,02H,06H,04H,0CH,08H,09H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MAIN: MOV DX,MY8255_MODE ;定义8255工作方式
MOV AL,80H ;工作方式0,A口和B口为输出
OUT DX,AL
A1: MOV BX,OFFSET TTABLE
MOV CX,0008H
A2: MOV AL,[BX]
MOV DX,MY8255_B
OUT DX,AL
CALL DALLY
INC BX
LOOP A2
MOV AH,1 ;判断是否有按键按下
INT 16H
JZ A1 ;无按键则跳回继续循环,有则退出
QUIT: MOV AX,4C00H ;结束程序退出
INT 21H
DALLY PROC NEAR ;软件延时子程序
PUSH CX
PUSH AX
MOV CX,0FFFH
D1: MOV AX,5000H
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START
思考题:
修改软件语句的速度值和励磁步序,可分别控制步进电机的转速或转动方向。