微机与单片机1137.docx
《微机与单片机1137.docx》由会员分享,可在线阅读,更多相关《微机与单片机1137.docx(13页珍藏版)》请在冰点文库上搜索。
微机与单片机1137
微机与单片机设计
班级:
测控三班
姓名:
戴维
学号:
20121137
一、数据采集系统综合设计实验:
设计任务:
1.采用定时/计数器8253产生1秒钟的定时脉冲,并作为中断控制器8259的中断请求信号。
2.CPU响应8259的中断请求后,启动ADC0809对实验仪上的电位器引入的模拟电压进行A/D转换。
3.变换后的结果送8279显示两位十六进制数,同时经并行接口8255的PB口送8位发光二极管显示二进制数。
最终的结果:
当调节电位器旋钮时,数码管和8位发光二极管会同时显示与模拟输入电压相应的数字量值。
(1)8253的原理图:
8253内部有三个计数器,分别称为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。
输出锁存器的值是通过程序设置的。
输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可以对此进行读操作。
顺便提一下,CR、CE和OL都是16位寄存器,但是也可以作8位寄存器来用。
(2)8259:
8259芯片采用的是最新的CMOS图像传感器APS技术(Active-Pixel-Sensor,主动像素传感器),使图像品质得到了大幅提升。
与上一代PPS技术(Passive-PixelStructure,被动像素结构)的产品比,有很大的提升。
研发团队对该芯片投入了大量的时间研发优化,调整色彩还原度,使颜色极为逼真艳丽。
优化了清晰度彩色清晰度达到700电视线,黑白清晰度超过700电视电。
保证清晰度的前提下优化了低照度,夜视噪点小,亮度高效果好;采用特殊设计,保证了产品的热稳定性,在业内处于领先地位。
设计1程序:
#include"conio.h"
#defineM8254_A0x6c0
#defineM8254_B0x6c2
#defineM8254_C0x6c4
#defineM8254_CON0x6c6
#defineRdata(port)inportb(port)
#defineWdata(port,x)outportb(port,x)
#defineStart(outportb(0x640,0x00))//启动AD
#defineRead(inportb(0x640))
typedefunsignedintuint;
typedefunsignedcharuchar;//读AD采样结果
voidinterruptmir7(void);
voiddelay(uintcount)
{
uinti;
for(i=0;i}
//显示多个字符
voiddispm(uchar*src,ucharlen)
{
uchari;
for(i=0;i{
_AL=*src;
_asm{
movAH,01h
int10h
}
src++;
}
}
//显示单个字符
voiddisps(ucharval)
{
_AL=val;
_asm{
movah,01h
int10h
}
}
//Hex转换为ASC码,转换低4位
ucharHex2AscL(ucharval)
{
//uchartemp;
val&=0x0f;
if(val>9)
val+=0x37;
else
val+=0x30;
returnval;
}
//Hex转换为ASC码,转换高4位
ucharHex2AscH(ucharval)
{
//uchartemp;
val=(val&0xf0)>>4;
if(val>9)
val+=0x37;
else
val+=0x30;
returnval;
}
staticucharflag[]="DAC0809IN0:
";
staticucharkg[]="";
voidmain(void)
{
_asm{
PUSHDS
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETmir7//取中断入口地址
MOVSI,003CH//中断矢量地址
MOV[SI],AX//填IRQ7的偏移矢量
MOVAX,CS//段地址
MOVSI,003EH
MOV[SI],AX//填IRQ7的段地址矢量
CLI
POPDS
}
//初始化主片8259
Wdata(0x20,0x11);//ICW1
Wdata(0x21,0x08);//ICW2
Wdata(0x21,0x04);//ICW3
Wdata(0x21,0x01);//ICW4
Wdata(0x21,0x6f);//OCW1
//初始化8254
Wdata(M8254_CON,0x36);
Wdata(M8254_A,0xe8);
Wdata(M8254_A,0x03);
Wdata(M8254_CON,0x76);
Wdata(M8254_B,0xe8);
Wdata(M8254_B,0x03);
_asmsti
while
(1);
}
//中断处理程序
voidinterruptmir7(void)
{
ucharADval;
Start;//启动AD采样
delay(0x100);
ADval=Read;//读采样结果
dispm(flag,13);//显示:
DAC0809IN0:
disps(Hex2AscH(ADval));//显示高位
disps(Hex2AscL(ADval));//显示低位
dispm(kg,8);
delay(0xf000);
delay(0xf000);
_asmint10h
_AX=0x0120;
_asmint10h
Wdata(0x20,0x20);
}
二、简易波形发生器设计
设计任务:
1.利用8279为键盘、显示核心构成人机接口,设计一个简单的波形发生器,该波形发生器可以输出三角波、锯齿波、方波、矩形波、阶梯波和正弦波。
2.各种波形参数,例如:
波形类别、频率、振幅(小于5V)、矩形波的占空比、锯齿波正向斜坡持续时间、阶梯波每个阶梯的持续时间等均需要用户从键盘输入,规定如下:
A键:
设置波形类型,其中:
1键代表三角波,2键代表锯齿波,3键代表方波,4键代表矩形波,5键代表阶梯波,6键代表正弦波
B键:
设置波形频率,单位Hz
C键:
设置波形幅度,单位mV
D键:
设置矩形波的占空比(百分比的分子)
E键:
设置锯齿波正向斜坡持续时间与周期之比(百分比的分子)
F键:
设置阶梯波每个阶梯的持续时间与周期之比(百分比的分子)
G键:
确认参数更新,使系统按最新设置的参数产生波形
H键:
终止程序
3.利用用户输入的参数控制DAC0832输出符合要求的波形,变换后的波形接到示波器上显示出来
4.按键的检测程序要求消抖功能
5.程序设计可参考程序框图
设计要求:
(1)完成软件设计并在实验仪上调试通过
(2)完成设计报告,内容要求如下:
A、对实验仪进行简单介绍,并对8253、8279等芯片进行必要的介绍
B、软件设计的必要介绍及详细流程图
C、完整的软件程序及必要的注释
D、调试过程中的心得体会
E、其它必要的说明
三角波程序框图
设计2程序:
//延时
voiddelay(uintcount)
{
uinti;
for(i=0;i}
//三角波
voidTriWave(void)
{
uchari=0;
while
(1)
{
wdata(0x600,i);
delay(5);
i++;
}
}
//锯齿
voidZigWave(void)
{
uchari=0;
for(i=0;i<255;i=i+10)
{
wdata(0x600,i);
delay(5);
}
for(i=255;i>0;i--)
{
wdata(0x600,i);
delay(5);
}
}
//方波
voidRecWave(void)
{
while
(1)
{
wdata(0x600,0x00);
delay(5);
wdata(0x600,0x7f);
delay(5);
}
}
//阶梯波
voidLadWave(void)
{
uchari;
for(i=0;i<255;i=i+10)
{
wdata(0x600,i);
delay(5);
}
}
//正弦波
voidSinWave(void)
{
uchari;
for(i=0;i<255;i++)
{
wdata(0x600,sin[i]);
delay(5);
}
}