采样保持器实验采样保持器实验
/*-------------------------------------------------------------
**
** 版权:上海航虹高科技有限公司,2004年
**
** 文件名: CP3_2.c **
** 描述: 采样/保持器实验
**
**
** 定义的函数:
**
**
**
** 设计注记: 改变采样周期,观察对系统稳定性的影响
**
**
**
** 其它注记: **
**
**
**
** 更改历史: **
** 版本: 2.0
...
采样保持器实验
/*-------------------------------------------------------------
**
** 版权:上海航虹高科技有限公司,2004年
**
** 文件名: CP3_2.c **
** 描述: 采样/保持器实验
**
**
** 定义的
:
**
**
**
**
注记: 改变采样周期,观察对系统稳定性的影响
**
**
**
** 其它注记: **
**
**
**
** 更改历史: **
** 版本: 2.0
** 时间: 2005/10 ** 作者: 曾亚
** 纪录:
**
**
**-------------------------------------------------------------
*/
#define UINT unsigned int
#define BYTE unsigned char
#define CS0832 0x00
#define CS8259E 0x20
#define CS8259O 0x21
#define CS8253T0 0x40
#define CS8253T1 0x41
#define CS8253T2 0x42
#define CS8253C 0x43
#define CS273 0x60
#define CSAD_1_0 0x80
#define CSAD_1_1 0x81
#define CSAD_2_0 0xA0
#define CSAD_2_1 0xA1
#define CSAD_2_2 0xA2
#define CSAD_2_3 0xA3
#define CSAD_2_4 0xA4
#define CSAD_2_5 0xA5
#define CSAD_2_6 0xA6
#define CSAD_2_7 0xA7
#define CS0809_0 0X80
#define CS0809_1 0X81
#define DSADDR 0x0030 //数据暂存段地址
#define COMMBYTE 0x0CF0 //串行口暂存偏移地址
#define REVBYTE 0x0C00 //用于上下交换数据区的偏移地址
#define ADSELECT 0x0C20 //AD端口选择暂存偏移地址
#define REVEN 0x20 //接受允许标记
#define dsvalue 0x0123
#include
void delay1 (int t);
/****************************************************************/
void interrupt irq0(void);
void interrupt irq6(void);
void SendByte(BYTE byte);
void interrupt irq7();
unsigned int count,Flag,Td;
unsigned int d,a;
BYTE AD1,AD2;
int main(void)
{
_DS=dsvalue;
_ES=dsvalue;
//设定初始参数, 采样周期=Td*5ms
Td=2;
Flag=2;
//1800=5ms 0e66=3ms 0733=1.5ms 1ccc=6ms
//初始化8253
outportb(0x43,0x36);
outportb(0x40,0x00);
outportb(0x40,0x18);
//初始化8259
outportb(0x20,0x13);
delay1 (0x3000);
outportb(0x21,0x08);
delay1 (0x3000);
outportb(0x21,0x09);
delay1 (0x3000);
outportb(0x21,0xbe);
delay1 (0x3000);
outportb(0x20,0x20);
delay1 (0x3000);
//嵌入汇编,设置中断入口地址
_asm {
push ax
push ds
push si
xor ax,ax
mov ds,ax
mov ax,offset irq0
mov si,0020h
mov [si],ax
mov si,0022h
mov ax,cs
mov [si],ax
mov ax,offset irq6
mov si,0038h
mov [si],ax
mov ax,cs
mov si,003ah
mov [si],ax
mov ax,offset irq7
mov si,3ch
mov [si],ax
mov si,3eh
mov ax,cs
mov [si],ax
pop si
pop ds
pop ax
}
outportb(CS0832,0x80);
_asm STI
enable();
while(1);
}
//延时函数,dilay1(1)大概等于10微秒
void delay1 (int t) {
int j ;
for (j=0;j=Td&&Flag==0)
{
outportb (CSAD_2_7,0x78);
delay1 (15);
a=inportb (CSAD_2_7);
outportb(CS0832,a);
delay1 (2);
count=0;
}
outportb(CS0809_0,0X78);
delay1 (10);
AD1=inportb(CS0809_0);
outportb(CS0809_1,0X80);
delay1 (10);
AD2=inportb (CS0809_1);
SendByte(AD1);
SendByte(AD2);
outportb(0x20,0x20); }
//中断6服务程序,外部中断,采样开始标记
void interrupt irq6 (void) {
_DS=dsvalue;
_ES=dsvalue;
Flag=1;
outportb (0x20,0x20); }
//防止误触发进入
void interrupt irq7() {
outportb(0x20,0x20); }
//发送一个字节byte
void SendByte(BYTE byte) {
pokeb(DSADDR,COMMBYTE,byte);
_asm{
PUSH AX
PUSH ES
MOV AX,0030H
MOV ES,AX
MOV AL,ES:[3312]
INT 1EH
POP ES
POP AX
}
}
本文档为【采样保持器实验】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。