单片机c语言简单问题 很着急 谢谢

来源:百度知道 编辑:UC知道 时间:2024/05/26 16:52:34
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char

void delay(uint z);
main()
{
uchar temp;
temp=0xfe;
P1=temp;

while(1)

{ delay(1000);
P1=_crol_(temp,1);

}
}
void delay(uint z)
{
uint x,y ;
for( x=z;x>0;x--)
for( y=110;y>0;y--);
}
问题1:上面是个流水灯程序,我想问下 能不能取消temp这个变量,
uchar temp;
temp=0xfe;
P1=temp;
变成 P1=0xfe; 然后把P1=_crol_(temp,1); 变成 P1=_crol_(P1,1);
这样可以吗?

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,num;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
num=0;

1。理论上可以,_crol_这个函数源码,但基与工业程序所谓的无缝性,不提倡直接的I/O进行运算操作(意思不是说不能操作,而是可能造成的损害不可估量)因此会引入变量temp。

2。中断返回时候没有具体的哪一行,关键是看程序在哪行被中断了。
中断机制是这样,当CPU收到中断信号时,他会先检测系统是否运行可屏蔽中断(即EA的值),如果允许这会在正在执行的当前指令下一条指令(暂称为地址x)的地址值,即IP值入栈,然后把IP值赋一个新值,这个值就是中断程序的位置,当中断程序执行完后(如果汇编是汇编语言此时会有一句RETI),就会再把栈中的IP值赋给IP,即回到了x的位置继续执行

所谓中断就是可以在任何情况下强行插入的代码,执行后恢复插入前的执行状态