导航:首页 > 操作系统 > 单片机代码怎么做

单片机代码怎么做

发布时间:2022-09-07 03:01:07

‘壹’ 单片机代码编写

假设:
P0和P1接数码管显示,
熄灭P1.0用低电平,
按键盘P3.2按下是低电平,
程序如下:

1 ORG 0000H
0000 020030 2 LJMP 0030H
3 ORG 0030H
0030 75803F 4 MOV P0,#3FH
0033 7590FF 5 MOV P1,#0FFH
0036 75A000 6 MOV P2,#00H
0039 C290 7 CLR P1.0
003B D2B2 8 L01: SETB P3.2
003D 20B209 9 JB P3.2,L02
0040 75805B 10 MOV P0,#5BH
0043 75905B 11 MOV P1,#5BH
0046 02003B 12 LJMP L01
0049 75803F 13 L02: MOV P0,#3FH
004C 7590FF 14 MOV P1,#0FFH
004F 02003B 15 LJMP L01
16 END

‘贰’ 如何写出高效的单片机C语言程序代码

由于单片机的性能同电脑的性能是天渊之别的,无论从空间资源上、内存资源、工作频率,都是无法
与之比较的。PC 机编程基本上不用考虑空间的占用、内存的占用的问题,最终目的就是实现功能就可以了。
对于单片机来说就截然不同了,一般的单片机的Flash 和Ram 的资源是以KB 来衡量的,可想而知,单片
机的资源是少得可怜,为此我们必须想法设法榨尽其所有资源,将它的性能发挥到最佳,程序设计时必须
遵循以下几点进行优化:

1. 使用尽量小的数据类型
能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义的变
量就不要用长整型(long int),能不使用浮点型(float)变量就不要使用浮点型变量。当然,在定义变
量后不要超过变量的作用范围,如果超过变量的范围赋值,C 编译器并不报错,但程序运行结果却错了,
而且这样的错误很难发现。

2. 使用自加、自减指令
通常使用自加、自减指令和复合赋值表达式(如a-=1 及a+=1 等)都能够生成高质量的
程序代码,编译器通常都能够生成inc 和dec 之类的指令,而使用a=a+1 或a=a-1 之类
的指令,有很多C 编译器都会生成二到三个字节的指令。

3. 减少运算的强度
可以使用运算量小但功能相同的表达式替换原来复杂的的表达式。
(1) 求余运算
N= N %8 可以改为N = N &7
说明:位操作只需一个指令周期即可完成,而大部分的C 编译器的“%”运算均是调用子程序来
完成,代码长、执行速度慢。通常,只要求是求2n 方的余数,均可使用位操作的方法来代替。
(2) 平方运算
N=Pow(3,2) 可以改为N=3*3
说明:在有内置硬件乘法器的单片机中(如51 系列),乘法运算比求平方运算快得多, 因为浮点数
的求平方是通过调用子程序来实现的,乘法运算的子程序比平方运算的子程序代码短,执行速度快。
(3) 用位移代替乘法除法
N=M*8 可以改为N=M<<3
N=M/8 可以改为N=M>>3
说明:通常如果需要乘以或除以2n,都可以用移位的方法代替。如果乘以2n,都可以生成左移
的代码,而乘以其它的整数或除以任何数,均调用乘除法子程序。用移位的方法得到代码比调用乘除法子
程序生成的代码效率高。实际上,只要是乘以或除以一个整数,均可以用移位的方法得到结果。如N=M*9
可以改为N=(M<<3)+M;
(4) 自加自减的区别
例如我们平时使用的延时函数都是通过采用自加的方式来实现。
void DelayNms(UINT16 t)
{
UINT16 i,j;
for(i=0;i<t;i++)
for(j=0;i<1000;j++)
}
可以改为
void DelayNms(UINT16 t)
{
UINT16 i,j;
for(i=t;i>=0;i--)
for(j=1000;i>=0;j--)
}
说明:两个函数的延时效果相似,但几乎所有的C 编译对后一种函数生成的代码均比前一种代码少1~3
个字节,因为几乎所有的MCU 均有为0 转移的指令,采用后一种方式能够生成这类指令。

4. while 与do...while 的区别
void DelayNus(UINT16 t)
{
while(t--)
{
NOP();
}
}
可以改为
void DelayNus(UINT16 t)
{
do
{
NOP();
}while(--t)
}
说明:使用do…while 循环编译后生成的代码的长度短于while 循环。

5. register 关键字
void UARTPrintfString(INT8 *str)
{
while(*str && str)
{
UARTSendByte(*str++)
}
}
可以改为
void UARTPrintfString(INT8 *str)
{
register INT8 *pstr=str;
while(*pstr && pstr)
{
UARTSendByte(*pstr++)
}
}
说明:在声明局部变量的时候可以使用register 关键字。这就使得编译器把变量放入一个多用途的寄存
器中,而不是在堆栈中,合理使用这种方法可以提高执行速度。函数调用越是频繁,越是可能提高代码的
速度,注意register 关键字只是建议编译器而已。

6. volatile 关键字
volatile 总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在
哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以死代码消除。一般来
说,volatile 关键字只用在以下三种情况:
a) 中断服务函数中修改的供其它程序检测的变量需要加volatile(参考本书高级实验程序)
b) 多任务环境下各任务间共享的标志应该加volatile
c) 存储器映射的硬件寄存器通常也要加volatile 说明,因为每次对它的读写都可能由不同意义
总之,volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素
更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码
就不再进行优化,从而可以提供对特殊地址的稳定访问。

‘叁’ 如何编写高效率稳定的单片机代码

要写出高效率稳定的单片机代码:
1、使用汇编语言编写。
2、熟练掌握和灵活应用各种算法

‘肆’ 51单片机程序编写

最简程序如下:

‘伍’ 单片机定时器实验的代码怎么写求详细注释。

如果是100ms中断一次,那么晶振需要用6MHz

#include<reg51.h>
#defineucharunsignedchar
uchart1,sec1,dscan=0,dis[3]={0,0,0};
uchartable={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voidt0isr()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t1++;
if(t1>=20)
{
t1=0;
sec1++;
dis[0]=sec1%10;
dis[1]=sec1%100/10;
dis[2]=sec1/100;
}
}
voidt1isr()interrupt3
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
P2=1<<dscan;
P0=table[dis[dscan]];
}
main()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
TR0=1;
ET0=1;
TR1=1;
ET1=1;
EA=1;
t1=0;
sec1=0;
while(1);
}

‘陆’ 单片机的程序怎么编写

你可以先把0放到一个单元里面,比如说100h,然后
mov
r0,100h
inc
100h
mov
r1,100h
inc
100h
继续写下去就可以了。

‘柒’ 利用单片机,如何才能正确的编写出一段程序,编写的步骤是什么

51之类的入门级单片机搭建的小程序可以用Keil来编比较方便,C语言记得导入头文件reg51.h或者reg52.h,然后后面用类似普通的C语言语法,注意这里的Keil C51和普通的C不同,比如sbit之类的,因为是交叉编译,所以要注意各个接口,深入学习一定需要看书的。KeilC步骤:1、下载Keil42、project选择芯片类型3、导入头文件4、编程

‘捌’ 单片机的程序怎么写

看你用什么单片机啊,每种单片机都会对应有一个或多个编译器的,比如8051单片机,用得最多的就是keil了,如果你用的是51单片机,-下载keil软件安装包-安装软件------打开软件----------就可以编写单片机的程序了。

‘玖’ 单片机代码编写

51 单片机。
MOVA,R0
ADDA,R3
MOVR4,A
MOVA,R1
ADDCA,R2
MOVR5,A
MOVA,#0
ADDCA,#0
MOVR6,A

END

‘拾’ 用c++怎样编写51单片机程序

相信很多初学者都有同样的疑问,也有同样的希望。就是用C++语言来写单片机程序的源代码。现在我来解释一下单片机的源代码程序几乎没有人用C++来写的。
1. 假设一下你现在用C++写完了一个程序代码。那么你要让单片机认识必须要编译吧,对吧 。请问你有合适的编译软件来编译你的代码吗?
2. 就算有编译器能编译,你能保证它的代码效率一定能给单片机用吗?
单片机的ROM是K级的水平,执行指令的速度也远远小于PC。绝对不能和PC机相比的。这个就决定了单片机编程时很多时候要考虑它的代码效率和代码大小问题。所以一般情况下对于单片机编程我们之用汇编语言或者C语言。就算是用C写程序也要注意代码的效率等问题。
还有就是只有很大型的项目及应用程序开发才有可能有C++来写程序。一般的系统文件,应用程序都是用C来写的。有的系统代码甚至要用汇编语言来写。
举个生活中的例子:如果你从家里去公司上班你一般的出行方式是什么?
1.坐公车 2.骑车 3.自己开车 4.坐地铁 5.走过去。如果谁说他是做直升飞机去上班的。那要么这个人脑子不正常,要么就是太有钱了炫富。如果你要打苍蝇用苍蝇拍子就行了。如果要你用巡航导弹来打苍蝇,你认为可能吗?
所以我们单片机写程序的话一般就是汇编语言和C语言。几乎没有人用C++语言的。

阅读全文

与单片机代码怎么做相关的资料

热点内容
phpurl中文乱码问题 浏览:889
程序员那么可爱大结局陆漓产子 浏览:534
java如何从云服务器读取本地文件 浏览:915
压缩空气软管制作方法 浏览:907
天河三号算法 浏览:924
php队列教程 浏览:632
洪水命令 浏览:529
安卓怎么弄成苹果在线 浏览:435
谷歌web服务器地址 浏览:898
安卓锁屏图片如何删除 浏览:719
python3多进程编程 浏览:714
证明代码是程序员写的 浏览:397
算法错误发现办法 浏览:410
河南省医院挂号是哪个app 浏览:629
冬日恋歌哪个APP能看 浏览:673
委内瑞拉加密货 浏览:10
程序员写日记哪个软件好 浏览:108
加密机操作手册 浏览:860
dos命令自动关闭 浏览:328
心田花开app在哪里评价 浏览:449