文档库 最新最全的文档下载
当前位置:文档库 › 汇编led灯闪烁

汇编led灯闪烁

//名称:3_2LED.C
//功能:接在P0口的8只LED按设定的时间间隔从左到右循环依次点亮
//----------------------------------
#include
#include //内部函数
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit ledcon =P0^0; //位声明
//uchar temp; //注意此变量声明与26行位置的差异!
//----------------------------------
//延时
//----------------------------------
void delayms(uint x)
{
uchar i;
while (x--)
{
for(i=0;i<120;i++);
}
}
//-----------------------------------
//主程序
//-----------------------------------
void main()
{
uchar temp; //注意此语句与下一句倒换位置如何?
ledcon=0; //LED控制位=0
temp=0xfe;
while(1)
{
P0=temp;
temp=_crol_(temp,1); //P0口的值向左循环移动1位
delayms(450);
}
}
//结束
/*特别问题!! 模拟调试时P0口和Pins引脚变化不同步,看似移位结果错误;
但每一次单步或跟踪运行时点击相关引脚 Pins位使之与P.i同步,
即可得到正确结果。
一旦遇到此类问题,也可以直接下载到实验板运行观察。
下载运行的结果也证明程序是正确的*/
//
//
/* C51的变量定义与C有所差异。
1、可以考虑写成头文件的形式,如:
#ifndef _LED_H_
#define _LED_H_
sbit led=P1^0; 加extern后,错误为:syntax error near sbit,
也就是说用头文件定义变量时,只要在需要时加上这
#endif 个头文件,不把它当外部变量且赋值是必须的。*/
//
//
/* 2、也可以在主C文件中“定义”变量,然后在需要用到此变量的C文件中进行“声明”,如:
主C文件中:
uchar ir_33bit[33]; 这三 个都是叫做“定义”
uchar ir_4byte[4];
uchar ir_disp[9]={0,0,0,0,0,0,0,0,'!'};
然后在用到的C文件中:
extern ir_33bit[33]; 这三个叫做“声明”
extern unsigned char ir_4byte[4];
extern ir_disp[9];
extern bit ir_proc_flag;//强调:去掉extern,为错,multiple public definitions;
在这不可赋值,否则为重复定义;uchar可写可不写;但去掉bit为错!
*/
//
/* 小结:(1)可以在一个头文件中声明除主函数以外的各个函数,注意前面要加extern;
(2)也可以为每个C文件分别建立各自的头文件;
(3) 发现sbit 型变量能与函数写在同一个头文件中,
但要注意sbit 前不能加extern且变量要赋值(见47行)。但其它变量好像不行!
*/
// 程序中P0换成P1口再实验,观看模拟口效果的变化,得出P1口模拟就正确的结果!
// 学习用逻辑分析仪观看波形实时变化情况,学会逻辑分析仪使用。

相关文档