📄 acc1-2-1.c
字号:
/*****************************************
文件名:ACC1-2-1.C
功能描述:定时100ms采样,采样结果直接送D/A输出
*****************************************/
#include <reg51.h>
#include <absacc.h>
/*****************************************
宏定义
*****************************************/
#define uchar unsigned char
#define uint unsigned int
#define ADC_7 XBYTE[0x7ff0] //定义模数转换IO地址
#define DAC_1 XBYTE[0x7ff2] //定义D/A第一路的IO地
/*****************************************
全局变量定义
*****************************************/
sbit str = P1^7;
uchar data ad[10]; //声明变量,用于存储转换结果
uint data time; //声明变量,用于定时
uchar data t0_h,t0_l; //用于存储定时器0的初值
uchar TK; //声明采样周期变量
uchar TC; //TK的变量
/*****************************************
主函数
*****************************************/
void main(void)
{
TMOD = 0x01;
time = 10; //定时1ms
t0_h = (65536-500*time)/256; //计算定时器0初值
t0_l = (65536-500*time)%256;
t0_l = t0_l+20; //修正因初值重装而引起的定时误差
TH0 = t0_h;
TL0 = t0_l;
IT1 = 1; //边沿触发中断
EX1 = 1; //开外部中断1
ET0 = 1; //开定时中断0
TR0 = 1; //启动定时器
TK = 10; //采样周期=TK×10ms
TC = 1;
DAC_1= 0x80; //D/A清零
EA = 1; //开总中断
while(1);
}
/**********************************************
函数名:INT1
功能 :1号外部中断服务程序
参数 :无*
返回值:无 *
***********************************************/
void int1() interrupt 2 using 2
{ uchar i;
TC--; //判采样周期到否
if(TC==0)
{
i = ADC_7; //读取A/D转换结果
DAC_1 =i; //送D/A输出
TC = TK; //采样周期变量恢复
}
}
/**********************************************
函数名:Timer0
功能 :定时器0中断服务程序
参数 :无
返回值:无
***********************************************/
void Timer0() interrupt 1 using 1
{
str = !str; //产生A/D启动信号
TH0 = t0_h; //重新装入初值
TL0 = t0_l;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -