编程问题,使用单片机at系列的能实现积分功能 和开关延迟100ms功能,求完整的程序?

用C编一点都不复杂,运算速度也很快
如定义一个检测出的电流变量I和一个积分和变量Num,用中断产生1s的定时,每一秒钟把检测到的电流值加入到积分和变量中,即每秒钟来个Num=Num+I,这就实现了积分,
差不多就行。。。其他的单片机也行。。不需要数码管显示。
或者写出主程序。。

使用定时器,程序如下:

ORG 0000H
SJMP START
ORG 000BH
LJMP INT_T0
START:
MOV TMOD, #0x01 ;定时器0方式1
MOV TH0, #3CH
MOV TL0, #0B0H ;12M晶振,50ms中断一次
MOV IE, #82H
SETB TR0 ;开启T0
MOV R7, #20
MOV R6, #0
MOV R5, #0
SJMP $
INT_T0:
MOV TH0, #3CH
MOV TL0, #0B0H ;12M晶振,50ms中断一次
DJNZ R7, INT_END
MOV R7, #20

MOV A, P1 ;读入采样数据
ADD A, R5 ;加入到R6R5
MOV R5, A
MOV A, R6
ADDC A, #0
MOV R6, A

INT_END:
RETI

;完追问

辛苦你了,谢谢你,不用汇编,用C语言写,主要是积分功能。为表示感谢我再增加100财富值。。现在是200财富值了。。

追答

#include

unsigned char cnt;
unsigned int num;

void main()
{
TMOD = 0x01;
TH0 = 0x3c;
TL0 = 0xb0;
TR0 = 1;
ET0 = 1;
EA = 1;
num = 0;
cnt = 0;
while(1) {;}
}

void interrupttimer ()interrupt 1
{
TH0 = 0x3c;
TL0 = 0xb0;

cnt++;
if(cnt >= 20) {
cnt = 0;
num += P1;
}
}

追问

还是没看懂,解释一下,一般程序都有
void delayms (unit ms)
{Unit i;
While (ms--)
{
for(i=0;I<120;i++);
}
}
实在不好意思,要再次麻烦你。。我再次像你道歉。。。

追答

你所说的《一般程序都有...》,在你的这个题目中,用不着。

你的题目,要求每隔 1s,进行一次操作:把检测到的电流值加入到积分和变量中。
并没有其它要求。
那么,我在上面写的,已经够用了。

追问

我是新手,0基础,有时问话比较外行。。你能详细解释一下不?可惜不能提高悬赏分,对了我空间有一样的问题,你复制一下答案,我那财富值也是200,都给你。。

追答

你的题目,要求,仅仅写了积分...。还说:差不多就行。。。

其实,积分,应该是一个完整程序的一小部分。

积分,应该累计到何时?
积分结果,不是应该用的什么地方吗?

这些,你都不愿意多说,显然,是出于技术保密的需要。
-------------------------
针对你的要求,编程,一点都不复杂。

void main()
{
TMOD = 0x01; //设定T0定时方式1
TH0 = 0x3c;//定时50ms的初值
TL0 = 0xb0;
TR0 = 1;//开始定时
ET0 = 1;
EA = 1;//允许中断
num = 0;
cnt = 0;
while(1) {;}
}

void interrupttimer ()interrupt 1
{
TH0 = 0x3c;//为下次定时写入初值
TL0 = 0xb0;

cnt++;
if(cnt >= 20) {//20就是1s
cnt = 0;
num += P1;//积分运算
}
}
-------------------------
我空间有一样的问题,--请给出链接。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答