数据采集系统和简易波形发生器的微机与单片机程序.docx
- 文档编号:27617898
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:24
- 大小:125.35KB
数据采集系统和简易波形发生器的微机与单片机程序.docx
《数据采集系统和简易波形发生器的微机与单片机程序.docx》由会员分享,可在线阅读,更多相关《数据采集系统和简易波形发生器的微机与单片机程序.docx(24页珍藏版)》请在冰豆网上搜索。
数据采集系统和简易波形发生器的微机与单片机程序
微机与单片机设计
TheCourseDesignOfMicrocomputerAndSingle-chipMicrocomputer
第一部分数据采集系统综合设计实验
一、设计任务
1、采用定时/计数器8253产生1秒钟的定时脉冲,并作为中断控制器8259的中断请求信号。
2、CPU响应8259的中断请求后,启动ADC0809对实验仪上的电位器引入的模拟电压进行A/D转换。
3、变换后的结果送8279显示两位十六进制数,同时经并行接口8255的PB口送8位发光二极管显示二进制数。
二、设计达到的最终结果
当调节电位器旋钮时,数码管和8位发光二极管会同时显示与模拟输入电压相应的数字量值。
三、程序流程图
四、汇编程序
;1.预定义部分
DATASEGMENT
LED_DATA1DB?
LED_DATA2DB?
LEDDB3FH,06H,5BH,4FH,66H,6DH,07H,7FH,6FH,77H
DB7CH,39H,5EH,79H,71H;共阴数码管的段码表
DATAENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATA,SS:
SSEG
MAIN:
MOVAX,DATA
MOVDS,AX
MOVAX,CODES
MOVSS,AX
ACALLSET_8253;调8253计数器设置子程序
ACALLSET_8259;调中断控制器8259设置子程序
;2.用8253产生1S的定时脉冲
;每隔一秒产生一个脉冲,该脉冲由OUT0输出。
设系统时钟周期为0.5us,先用定时器1
;产生周期为1ms的方波,再将计数器1的OUT1接到定时器0的CLK0,让计数器0对OUT1
;计数,并每计数1000次输出一个脉冲,便得到每隔1S对8259提出一次中断请求。
;可知:
;计数器1工作于方式31ms/0.5ms=2000即为计数器1的初值,由于初值大于256,送
;控制字时,应使赋值方式选择为先低8位,后高8位。
;计数器0工作于方式2,初值1000,同样,赋值方式为先地位、后高位。
设8253占用
;的设备端口地址为0FF40H-0FF43H,计数器0的地址为:
0FF40H,计数器1的地址为:
;0FF41H,控制寄存器的地址为:
0FF43H.
;程序如下:
SET_8253PROC
MOVDX,0FF43H
MOVAL,01110110B;计数器1,方式3,先送低8位、后送高8位,二进制
OUTDX,AL
MOVAL,00110100B;计数器0,方式2,先送低8位、后送高8位,二进制
OUTDX,AL
MOVDX,0FF41H;计数器1的地址
MOVAX,2000;计数器1的初值
OUTDX,AL
MOVAL,AH
OUTDX,AL;由于输出数据用的中间寄存器必须为AL
MOVDX,0FF40H;计数器0占用设备的端口地址
MOVAX,1000;计数器零的初值
OUTDX,AL
MOVAL,AH
OUTDX,AL
RET
SET_8253ENDP
;3.8259中断处理
;将计数器0的OUT0接到8259的IR0端,以8253的OUT0作为中断源产生中断请求,中断
;类型号为08H,设置IR0的处罚方式为上升沿触发
;设置中断向量
SET_8259:
PUSHDS;保存当前段地址
LEADX,INTR;取中断处理程序的偏移地址
MOVAX,SEGINTR;取中断处理程序的段地址
MOVDS,AX
MOVAL,08H;送中断类型号
MOVAH,25H;用25H功能号设置中断向量
INT21H;调用DOS功能
POPDS;回复当前段地址
;8259初始化:
设端口地址20H、21H,中断类型码为:
08H-0FH,I/O地址为奇数(A0=1)
;时,则写(ICW2、ICW3、ICW4和OCW1),地址为偶数时,写(ICW2、ICW3)
MOVAL,13H;
OUT20H,AL;
JMPINT1
INT1:
MOVAL,08H;
OUT21H,AL;
JMPINT2
INT2:
MOVAL,00H;
OUT21H,AL
RET
;4.ADC0809中断服务程序
;设8088和ADC0809之间用一片8255用于扩展I/O口,设该片8255的地址为0378H-037BH,
;A、B、C三个端口均工作在方式0,A口为转换结果的输入,B口输出通道地址,发出地址
;所存信号和启动转换,C口低四位用于读取EOC的状态。
SET_8255PROCNEAR;定义8255设置的子程序
MOVDX,037BH
MOVAL,91H
OUTDX,AL
RET
SET_8255ENDP;过程结束
INTR:
CALLSET_8255
MOVBL,0
CHG:
MOVAL,BL
MOVDX,0379H
OUTDX,AL
ORAL,10H
OUTDX,AL;送ALE一个上升沿信号,将端口选择信号锁存
ANDAL,0EFH
OUTDX,AL;送START一个下降沿信号,启动转换
NOP
MOVDX,037AH;送C口地址
LOOP:
INAL,DX;
ANDAL,02H
JZLOOP;还未转换结束,则等待
MOVDX,0379H
ORAL,20H
OUTDX,AL;输出读出允许信号,即:
使OE=1
MOVDX,0378H;8255A口地址送DX
INAL,DX
MOVDATA,AL;将转换结果送DATA暂存下来
ACALLT_LED;调用LED显示转换结果子程序
ACALLT_SMG;调用数码管显示转换结果的十六进制形式
RETI
;5.另用一片8255显示二进制结果,选用8255的A口用作输出控制字为80H,假设该片8255
;的地址范围为:
0FF00H-0FF03H,则将A/D转换结果送发光二极管显示二进制数的程序如下:
T_LEDPROC
MOVDX,0FF03H
MOVAL,80H;
OUTDX,AL
MOVDX,0FF00H;将8255A口地址送数据寄存器DX
MOVAL,DATA;取转换结果
OUTDX,AL
RET
T_LEDENDP
;6.送8279显示两位十六进制数
T_SMGPROC
MOVAL,DATA
MOVBL,16
DIVBL;转换结果的十六进制数形式的高位放AL,低位放AH
LEABX,LED;送段码偏移地址,待查的数值已在AL(高位)中
XLAT;查表,查出来的段码值放在AL中
MOVLED_DATA1,AL;暂存低位对应段码
MOVAL,AH
XLAT;查高位对应的段码
MOVLED_DATA2,AL;暂存高位对应段码
ACALLT_SMGXS;调8279数码管显示子程序
RET
T_SMGENDP
;7.8279显示两位十六进制数
;8279芯片是一种通用的可编程键盘和显示接口器件。
;设8088的地址线A15接8279的
作片选,A0接8279的A0作命令和数据的选择,设
;系统时钟频率为1MHZ,命令口的地址:
7FFFH,状态口地址为:
7FFEH
T_SMGXSPROC
MOVDX,7FFFH;指向命令状态口地址,
=0,A0=1
MOVAL,0D1H;清除命令
OUTDX,AL;命令字送入
WAIT:
INAL,DX;读入状态字
ANDAL,80H;判断最高位DU(清除命令执行状态标志)的状态
JNZWAIT;若DU=1,表明命令正在执行
MOVAL,2AH;送分频系数
OUTDX,AL
MOVAL,90H;写显示RAM命令,AI=1,地址自动增加,初始地址为0
OUTDX,AL
LEABX,LED;将数码管段码存放位置的偏移地址送BX
MOVAL,LED_DATA1;将转换后的十六进制形式结果的高位送AL
XLAT;执行查表
OUTDX,AL;送出查得结果
MOVAL,LED_DATA2;将转换后的十六进制形式结果的低位送AL
XLAT;查表,得出低位数值对应的段码
OUTDX,AL;将低位数值对应段码送到数码管
RET
T_SMGXSENDP
;说明:
虽然每次向8279送段码时地址都会自动增加,但由于每次调用送段码子程序送段码之时,都会执行MOVAL,90H,OUTDX,AL,指令,即:
每次都对送入的地址进行初始化,也就是说,每次送的段码和数码管始终是对应的。
第二部分简易波形发生器设计
一、设计任务
1、利用8279为键盘、显示核心构成人机接口,设计一个简单的波形发生器,该波形发生器可以输出三角波、锯齿波、方波、矩形波、阶梯波和正弦波。
2、各种波形参数,例如:
波形类别、频率、振幅(小于5V)、矩形波的占空比、锯齿波正向斜坡持续时间、阶梯波每个阶梯的持续时间等均需要用户从键盘输入,规定如下:
A键:
设置波形类型,其中:
1键代表三角波,2键代表锯齿波,3键代表方波,4键代表矩形波,5键代表阶梯波,6键代表正弦波
B键:
设置波形频率,单位Hz
C键:
设置波形幅度,单位mV
D键:
设置矩形波的占空比(百分比的分子)
E键:
设置锯齿波正向斜坡持续时间与周期之比(百分比的分子)
F键:
设置阶梯波每个阶梯的持续时间与周期之比(百分比的分子)
G键:
确认参数更新,使系统按最新设置的参数产生波形
H键:
终止程序
3、利用用户输入的参数控制DAC0832输出符合要求的波形,变换后的波形接到示波器上显示出来
4、按键的检测程序要求消抖功能
二、设计要求
设计要求:
(1)完成软件设计并在实验仪上调试通过
(2)完成设计报告,内容要求如下:
A、对实验仪进行简单介绍,并对8253、8279等芯片进行必要的介绍
a、8253介绍
intel8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz),8253-5(5MHz)
8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。
输出锁存器的值是通过程序设置的。
输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可以对此进行读操作。
顺便提一下,CR、CE和OL都是16位寄存器,但是也可以作8位寄存器来用。
8253具有3个独立的计数通道,采用减1计数方式。
在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。
当计数脉冲是已知周期的时钟信号时,计数就成为定时。
8253中各通道可有6种可供选择的工作方式,以完成定时、计数或脉冲发生器等多种功能。
8253的各种工作方式如下:
方式0:
计数结束则中断,方式1:
单脉冲发生器,方式2:
速率波发生器,方式3:
方波发生器,方式4:
软件触发方式计数,方式5:
硬件触发方式计数,读取计数器的当前值。
b、8279介绍
8279是可编程的键盘、显示接口芯片。
它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。
8279内部有键盘FIFO(先进先出堆栈)/传感器,双重功能的8*8=64BRAM,键盘控制部分可控制8*8=64个按键或8*8阵列方式的传感器。
该芯片能自动消抖并具有双键锁定保护功能。
显示RAM容量为16*8,即显示器最大配置可达16位LED数码显示。
8279有三种工作方式:
键盘方式、显示方式和传感器方式。
8279的命令字及其格式
8279的各种工作方式都要通过对命令寄存器的设置来实现。
8279共有8种命令,通过这些命令设置工作寄存器,来选择各种工作方式。
命令寄存器共8位,格式为:
如上图,8279的一条命令由两大部分组成,一部分表征命令类型,为命令特征位,由命令寄存器高3位D7---D5决定。
D7---D5三位的状态可组合出8种形式,对应8类命令。
另一部分为命令的具体内容,由D4---D0决定。
每种特征所代表的命令如下表所示
B、软件设计的必要介绍及详细流程图
C、完整的软件程序及必要的注释
D、调试过程中的心得体会
E、其它必要的说明
三、流程图
四、汇编程序
;1、预定义部分
DATASEGMENT
FRGDB?
;波形频率
AMPDB?
;波形幅值
ZKBDB?
;波形占空比
JCBDB?
;锯齿波正向斜坡持续时间与周期之比
JTBDB?
;阶梯波正向斜坡持续时间与周期之比
TIME1DW?
;暂存用于延时时间控制的数值,为一个字节的长度,用于上升部分
TIME2DW?
;暂存用于延时时间控制的数值,为一个字节的长度,用于下降部分
BTYPEDB?
;波形类型号
DADB?
;暂存输入幅值对应的DAC0832输入的数字量,参考电压为5V
DATAENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATA,SS:
SSEG
MAIN:
MOVAX,DATA
MOVDS,AX
MOVAX,CODES
MOVSS,AX
MOVDX,7FFFH;指向命令口
MOVAL,0D1H;清除命令
OUTDX,AL
LOOP1:
INAL,DX;读入状态字
ANDAL,80H
CMPAL,80H;清除等待
JELOOP1;若清除命令正在执行则等待
MOVAL,00H;键盘、显示命令,编码扫描键盘,双键锁定
OUTDX,AL
MOVAL,2AH;时钟十分频
OUTDX,AL
LOOP2:
INAL,DX;读入8279中键入数据情况
ANDAL,0FH;只取状态字低4位,D0D1D2为键所在的行号,若有键按下,则行号
;不为零
JZLOOP2;若无键按下时等待
INAL,DX;命令读入
ANDAL,0FH;消抖
JZLOOP2
MOVAL,40H
;键盘扫描方式时,读取数据按先进先出原则读出,与D0-D3无关,该命令字的低四位可为
;任意值,此时读RAM命令字可设为40H
OUTDX,AL;命令送入
MOVDX,7FFEH;指向数据口地址
INAL,DX;读入键值
ANDAL,3FH;键值情况状态的CNTL、SHIFT没用到,屏蔽这两位
MOVBL,08H
DIVBL;行号放AH、列号放AL
MOVBH,AL;暂存列号
MOVAL,AH
MULBL
ADDAL,BL;得键码
CMPAL,OAH
JEKEY_A
AJMPTEST1
TEST1:
CMPAL,0BH
JEKEY_B
AJMPTEST2
TEST2:
CMPAL,0CH
JEKEY_C
AJMPTEST3
TEST3:
CMPAL,0DH
JEKEY_D
AJMPTEST4
TEST4:
CMPAL,0EH
JEKEY_E
AJMPTEST5
TEST5:
CMPAL,0FH
JEKEY_F
AJMPTEST6
TEST6:
CMPAL,10H
JEKEY_G
AJMPTEST7
TEST7:
CMPAL,11H
JEKEY_H
AJMPLOOP2;第一个键值必须在A-H范围之内,若第一个键不在A-H范围内,则
;重读键值
;为后面再次查询键值编写一个键值查询子程序
K_SCANPROC
INAL,DX
ANDAL,0FH
JZK_SCAN
MOVAL,40H
OUTDX,AL
MOVDX,7FFEH
INAL,DX
ANDAL,3FH
MOVBL,08H
DIVBL
MOVBH,AL
MOVAL,AH
MULBL;键号暂存于AL
RET
K_SCANENDP
;下面编写第一次按下的键在A-H之间时的处理程序
KEY_A:
;用于获取设置波形用的键号
ACALLK_SCAN
MOVBTYPE,AL;将波形类型号送BTYPE
AJMPLOOP2;返回继续读取波形参数设置功能号
KEY_B:
ACALLK_SCAN;扫描频率值的十位
MOVCH,AL
CALLK_SCAN;扫描频率的个位
MOVCL,AL
MOVBL,0AH
MOVAL,CH
MULBL
ADDAL,CL
MOVFRQ,AL
AJMPLOOP2;返回继续读取波形参数设置功能号
KEY_C:
;扫描幅值
CALLK_SCAN
MOVAMP,AL
AJMPLOOP2;返回继续读取波形参数设置功能号
KEY_D:
ACALLK_SCAN;扫描矩形波占空比的十位
MOVCH,AL
CALLK_SCAN;扫描矩形波占空比的个位
MOVCL,AL
MOVBL,0AH
MOVAL,CH
MULBL
ADDAL,CL
MOVZKB,AL;矩形波的占空比暂存
AJMPLOOP2;返回继续读取波形参数设置功能号
KEY_E:
ACALLK_SCAN;扫描锯齿波正向斜坡持续时间与周期之比的十位
MOVCH,AL
CALLK_SCAN;扫描锯齿波正向斜坡持续时间与周期之比的个位
MOVCL,AL
MOVBL,0AH
MOVAL,CH
MULBL
ADDAL,CL
MOVJCB,AL;锯齿波正向斜坡持续时间与周期之比暂存
AJMPLOOP2;返回继续读取波形参数设置功能号
KEY_F:
ACALLK_SCAN;扫描阶梯波每个阶梯持续时间与周期之比的十位
MOVCH,AL
CALLK_SCAN;扫描阶梯波每个阶梯持续时间与周期之比的个位
MOVCL,AL
MOVBL,0AH
MOVAL,CH
MULBL
ADDAL,CL
MOVJTB,AL;阶梯波每个阶梯持续时间与周期之比暂存
AJMPLOOP2;返回继续读取波形参数设置功能号
KEY_G:
CMPBTYPE,01H;判断设置的波形类型是否为三角波
JEXS_SJB;若是则转三角波显示子程序
JMPBX_LX1
BX_LX1:
CMPBTYPE,02H;判断设置的波形类型是否为锯齿波
JEXS_JCB;若是则转锯齿波显示子程序
JMPBX_LX2
BX_LX2:
CMPBTYPE,03H;判断设置的波形类型是否为方波
JEXS_FB;若是则转方波显示子程序
JMPBX_LX3
BX_LX3:
CMPBTYPE,04H;判断设置的波形类型是否为矩形波
JEXS_JXB;若是则转矩形波显示子程序
JMPBX_LX4
BX_LX4:
CMPBTYPE,05H;判断设置的波形类型是否为阶梯波
JEXS_JTB;若是则转阶梯波显示子程序
JMPBX_LX5
BX_LX5:
CMPBTYPE,05H;判断设置的波形类型是否为正弦波
JEXS_ZXB;若是则转正弦波显示子程序
KEY_H:
HLT;程序结束
;设DAC0832工作在单缓冲方式,端口地址为0278H。
电压为5V时对应的输入数字量为255,
;则对于任一电压值AMP,其相应的输出数字量计算公式:
。
;对于输出频率的控制,采用对输出数字量改变一个单位之后的延时子程序的延时时间来决
;定。
;下面编写产生不同波形的程序:
;三角波:
;三角波每一阶梯的延时时间delay与幅值、频率的关系式如下:
;
;,设系统的机器周期为1us,则delay的最小值为1us,由上述表达式知,当波形幅值为;1v时,波形最大频率为:
9804
XS_SJB:
;按设置显示三角波子程序
MOVDX,0278H;送DAC0832的地址
MOVAX,AMP
MOVBX,FRQ
MULBX;由上述推导已知FRQ的最大值为9804,而波形幅值最大为5V,可知二者
;相乘之积不会超过65536,即DX中的值为零,结果只在AX中
MOVTIME,AX;暂存延时程序参数
MOVAL,51;由输入的波形幅值(单位V)计算对应折算后的0832的输入数字量
;的最大值
MOVBL,AMP
MULBL
MOVDA,AL;暂存0832的输入数字量的最大值
SJB:
MOVAL,0
NEXT1:
INCAL
OUTDX,AL;送出当前的波形数值
MOVCX,TIME;送DELAY的延时参数
CALLDELAY
CMPAL,DA
JENEXT2;若满足条件跳转时,AL等于DA
JMPNEXT1
NEXT2:
DECDA
OUTDX,AL
MOVCX,TIME
CALLDELAY
CMPAL,0
JENEXT1
JMPNEXT2
;锯齿波:
;锯齿波的频率与幅值、正向斜坡持续时间与周期之比之间的关系如下:
;
,且
;其中:
A1为正向斜坡单位增量的延时时间系数,A2为负向斜坡单位变化量的延时时间系数。
;AMP—幅值设定值,FRQ-频率设定值,JCB-锯齿波的正向斜坡持续时间与周期之比。
由上述
;关系式可得如下表达式:
;
;其程序如下:
XS_JCB:
MOVAL,AMP;计算A1
MOVBL,FRQ
MULBL;结果存放在AX中
MOVBL,AL;暂存AX中的内容,因为进行除法运算时,分子必须在AX中
MOVAX,19607
DIVBL;结果在AL中
MOVBH,AL;暂存结果
MOVAX,100
MOVBL,JCB
DIVBL;结果在AL中
ADDAL,BH
MOVBH,AL;暂存
的结果在BH中
MOVAL,100
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 采集 系统 简易 波形 发生器 微机 单片机 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)