📄 acc1-2-2.c
字号:
/*****************************************
文件名:ACC1-2-2.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的变量
uchar KK; //斜率变量
char UK; //当前的D/A输出值
char UK_1; //上一次的输出值
/*****************************************
主函数
*****************************************/
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清零
UK = 0; //变量清零
UK_1 = 0;
KK = 0;
EA = 1; //开总中断
while(1);
}
/**********************************************
函数名:INT1
功能 :1号外部中断服务程序
参数 :无*
返回值:无 *
***********************************************/
void int1() interrupt 2 using 2
{ int i;
uchar j;
TC--; //判采样周期到否
if(TC==0)
{
UK_1= UK;
UK = ADC_7-128; //读取A/D转换结果
DAC_1=UK_1+128; //送D/A输出
TC=TK; //采样周期变量恢
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -