STC89c52单片机 用指针和数组写个流水灯程序

STC89c52单片机 用指针和数组写个流水灯程序,第1张

#include<reg51h>

#define uchar unsigned char

uchar led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void delay(uchar a)

{

uchar i,j;

for(i=0;i<a;i++)

for(j=0;j<120;j++);

}

main()

{

uchar i;

while(1)

{

P0=(led+i);

delay(50);

i++;

i%=8;

}

}

你这个只是代码段,读程序最好是要能从整体到局部。就先讲讲你的这几个问题吧。问题1:指针的指向是需要赋值的,所以它的实际指向是在调用语句中体现的。至于你说的指向,看看 W1302(ucAddr,pClock); 后面的注释,再看看time_data_buff,lcd1602_line1,mun_to_char 后面的注释,要匹配。不是随便乱赋值的。问题2:EA=0;所有中断失能。EA=1;所有中断使能。关掉中断可以防止反复触发,比如这个程序本身就是中断服务子程序的话,可以防止中断程序对其的影响。问题3:指针的地址都是在调用的时候赋值的,有的编译器默认初值是0,有的不是。为了防止指针的错误,最好调用时赋值,也可防止错误先在定义时赋个初值,不要依赖编译器的特性。

这个程序段貌似是对液晶显示时手动调时间的功能的实现,感觉似乎是按键中断的子程序。按键用来控制是否调时间,所以可以解释问题2了。这里有些小建议:能写出好程序不难,能读懂别人的程序才是真的大神。读程序首先要明确整体功能,可以先忽略细节,抓住每个函数的作用,要利用好注释。首先应该知道在做什么,然后才是怎么做。有模块化的 思想。将子程序和主函数结合起来,不要割裂了。编程最难的不是语法,而是思想。平时写完程序后尽量多想想,怎样更简洁些?写程序应该追求的是,可靠--足够的健壮性;简洁--简约而不简单,简约指代码量要少,不简单指功能足够满足用户;可移植性--尽量保证你写的函数可以几乎不加修改的被调用,从而屏蔽掉编译器等的影响;前瞻性--尽量保证你的代码在三年后仍然有生命力,为什么很多真正的实用程序都有很多空函数,就是为了便于将来功能扩展预先留下的。

汇编语言是非常好实现指针的,指针 *** 作的实质是程序内部直接 *** 作内存或者寄存器,而汇编最常用的mov指令就是直接 *** 作内存地址里面的数据。所以要实现指针,你需要用一个内存单元来存放内存的地址,这样就构成了间接寻址。间接寻址就是高级语言中的指针。

第一步首先定义指针:将要寻址的地址放入寄存器中,如:MOV R0,#33h,把33h放到R0里面。

第二步:取内容:如MOV A,@R0,这样就把33h内存里面的内容放入A当中了。

嘿嘿,汇编的效率是非常高的啊。

PC——程序计数器,功能:用来指示下一条指令的地址(逻辑地址即偏移量),一般情况下,系统指示对其进行加1 *** 作,担当遇到转移指令,如JMP,CALL,LOOP等时系统就会将跳转到的指令地址保存在PC中

这个要理清楚加不加code的区别。

不加code,变量是存在片内RAM里面,就是通常意义上的变量,是运行时才从RAM里面分配的,可以在代码中修改变量的值。

加code,虽然写法上是变量,实际上是存储在ROM里面的,就是在程序烧写到单片机时已经分配好了,就是固定的常量,不能在代码中对其值进行修改的。

加不加code区分以后就很好解释了,语句4加code,在烧写进去时是必须定好的常量,语句 1 2 3就必须加code,因为不能在烧写程序时的ROM空间的指针指向尚未初始化的RAM内容。语句4不加code,在运行后分配的RAM指针指向不加code的RAM空间也行,指向加code的ROM空间也行。

先确定好你的通讯方式

比如互联网、串口等等

然后定好一个协议,包括包头内容包尾神马的

接着单片机上撸好代码,烧写成功

上位机撸好代码,编译成dll

接着其他人就调用你的dll完事

实在不会可以外包出来

判断程序是否跑飞可以按照你说的方法来做,至于要求复位之后回到模块2继续执行可以这样实现:将程序模块化,在每个模块的程序开始执行时,现保存该段程序的入口地址,如果程序跑飞,我们把入口地址取出,继续执行即可。

以上就是关于STC89c52单片机 用指针和数组写个流水灯程序全部的内容,包括:STC89c52单片机 用指针和数组写个流水灯程序、单片机C语言编程 指针的问题、单片机 汇编 怎么用指针啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9354159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存