① 51单片机用c语言怎么写延时函数
延时时间的计算与单片机的晶振频率有关。若晶振频率为12Mhz,那么单片机每震动一次所需要的时间是1/12M s。那么再来看看单片机执行一次自减所需要的振动次数是96次,假如我们对时间要求不是特别精确的话,可以约等于100来计算。现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1/12M *100(s),即1/120000 s,逆向计算一下,每1ms需要自减多少次?120次对吧。所以一个简单的延时功能就诞生了,我们只需要自减120次,就可以延时1ms,如果我们要延时50ms呢,那就自减50*120=6000次。那么在程序上如何表达呢?我们可以用两套for循环
void delay(int i){
int x,y;
for(x=i;x>0;x--){
for(y=120;y>0;y--)
}
}
参数 i 代表该函数延时多少ms
② 51单片机,用汇编语言编写程序,10秒内对外部脉冲进行计数,并数出外部脉冲频率。求高手编写程序。
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#51H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
MOV TH1,#0
MOV TL1,#0
SETB TR0
SETB TR1
SETB ET0
SETB EA
CLR A
MOV R2,#0
LOOP:
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
INC A
CJNE A,#20,T0E
MOV A,#0
INC R2
CJNE R2,#10,T0E
MOV R2,#0
MOV R1,TH1
MOV R0,TL1
MOV B,#10
LCALL DIV16
MOV P1,R0
T0E:
RETI
;R1:R0/B=R1:R0
DIV16:
MOV R7,#08H
MOV B,#6
DIV1:
CLR C
MOV A,R0
RLC A
MOV R0,A
MOV A,R1
RLC A
MOV R1,A
CLR C
SUBB A,B
JC DIV2
MOV R1,A
INC R7
DIV2:
DJNZ R7,DIV1
RET
END
③ 51单片机访问片内数据存储器某单元的内容用c语言怎么写
方法1:
char data *p; //定义一个指向片内RAM地址的指针
p = 0x30; //片内RAM地址为0x30
*p = 0x12; //向0x30内写入立即数0x12
方法2:
#include <absacc.h>
char x;
x = DBYTE[0x30]; //将片内RANM地址0x30的内容赋给变量x
DBYTE[0x30] = 0x12; //向0x30内写入立即数0x12
方法3:采用 _at_ 直接声明变量所处地址,但该变量必须是全局变量。
char data x _at_ 0x30 ; //x为char型全局变量,地址位于data区地址0x30
。。。。。
x = 0x12; //向0x30内写入立即数0x12
④ 51单片机用什么软件编程
51单片机用什么软件编程介绍如下:
与汇编相比,C语言在功能上、结构性、可读性、握腔可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。KeilC51软件提供丰富的函数库个功能强大的集成开发调试工具,全Windows界面。
⑤ 51单片机,stm32,arino都是用什么语言进行编程的
51单片机,STM32单片机用汇编或者C语言,现在基本都用C语言编程,Arino有自己的编程环境,用户也是用C语言编程。
51单片机的编程
51单片机进入中国比较早,在早前用汇编编程比较多,我在上大学时也是学习的汇编编程,但是现在我用C语言编程,汇编已经不会了。51单片机比较常用的编程环境是Keil,现在Keil更新到Keil5了。如下是51单片机Keil的编程环境。
STM32单片机的编程
STM32单片机是意法半导体推出的高性价比、片上资源丰富的32位单片机,这个系列的单片机我一直在用,都是用C语言进行编程,官方推出的库函数和HAL库都是用C语言编程的,虽然有一部分汇编共存。STM32单片机用KeilMDK进行编程。
Arino的编程
Arino是一款做的非常成功的开源硬件,并且有自己的开发环境,将底层的寄存器设置都进行了封装,用户不用自己配置寄存器,调用封装好的函数即可,可以在官方网站下载编程IDE。Arino旨在培养用户的编程兴趣,简化了技术难度,很受欢迎。
在用户层面,现在C语言编程已经是主流液敏,C语言的移植性和可读性比汇编蔽槐语言有很大的优势,也有闹并枝很多人在使用汇编编程,尤其是涉及到底层时。
⑥ at89c51单片机 如何用c语言编程啊
随着单片机硬件性能的提高,编写应用程序更着重于程序本身的效率。
Franklin或KEII.C51交叉编译器是专为51系列单片机设计的一种高效的C语言编译器,用其开发的应用程序易于维护,可移植性好,是目前较流行的51系列单片机的开发工具。
一、C51语言程序设计的基本技巧
首先,C51语言程序设计要尽可能采用结构化的设计方法。可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。对于不同的功能模块,分别指定相应的入口参数和出口参数,而经常使用的一些程序最好编成函数,这样既不会引起整个程序管理的混乱,还可使程序的可读性、移植性增强。
C51语言的主程序结构:
#include
main0{while(1);}
这是最小的C程序,包括头部文件和程序主体。头部文件为引用的外部资源文件,包括硬件信息和外部模块提供的可使用的函数和变量的说明。
语句定义后,就可以在C语言程序中像汇编一样使用这些硬件设备。
在C5l中常用项目来管理,项目一般分为C文件块和头部文件块,常把不同的功能写在不同的C文件中,依靠项目的管理,最后把所有文件连接起来,这样就可以得到烧录的HEX文件或BIN文件。没有在头部文件中列出的文件,可以算是该C文件的内部函数和变量,外部C不能使用。另外,在程序设计过程中要充分利用C51语言的预处理命令。
对于一些常用的常数,如TRUE、FAlSE、PI,以及各种特殊功能寄存器,或程序中一些重要的依据外界条件可变的常量,可采用宏定义(#de-fine)或集中起来放在一个头文件中进行定义,再采用文件包含命令(#in-elude)将其加入到程序中,这样当需要修改某个参量时,只需修改相应的包含文件或宏定义,而不必对使用它们的每个程序文件都进行修改,有利于文件的维护和更新。
举例:利用宏定义和条件编译,源程序不作任何修改就可适用于不同时钟频率的单片机系统,并可根据情况的不同取不同的delay值,完成不同的目的。程序如下:
#define flag 1#ifdef flag==l#define fose 6Mdelay=10;#elif flag==0#define fose 8Mdelay=12;#else#define fosc 12Mdelay=20;#endiFMain0{ for(I=O;l
⑦ 51单片机设计跑马灯的程序用(c语言)编写
|P1口接8个发光二极管共阳
#include <AT89X51.H>
unsigned char i;
unsigned char temp;
unsigned char a,b;
void delay(void)
{
unsigned char m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
void main(void)
{
while(1)
{
temp=0xfe;
P1=temp;
delay();
for(i=1;i<8;i++)
{
a=temp<<i;
b=temp>>(8-i);
P1=a|b;
delay();
}
for(i=1;i<8;i++)
{
a=temp>>i;
b=temp<<(8-i);
P1=a|b;
delay();
}
}
}
(7)51单片机怎么用语言编辑扩展阅读:
Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。
⑧ 51单片机中如何用汇编语言编写流水灯
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:
ORG 0000H ;复位启动
AJMP START ;
ORG 001BH ;T1中断
AJMP T1INT ;
;定义变量========================
YSJS EQU 30H;延时计数器
LED EQU 31H;LED控制缓冲器
;主程序==========================
START: MOV LED,#0FEH ;初始化数据
MOV YSJS,#0 ;
MOV TMOD,#10H ;定时器1工作于方式1,16位定时器
MOV TL1,#0B0H ;设置定时初值
MOV TH1,#3CH ;定时时间=50mS
SETB ET1 ;使能定时器1中断
SETB TR1 ;启动定时器1
SETB EA ;开总中断
MOV P1,LED ;初始化流水灯
LOOP: JMP LOOP ;循环等待中断
T1INT: PUSH PSW ;定时器1中断程序
PUSH ACC ;保护现场
MOV TH1,#3CH ;定时时间=50mS
MOV TL1,#0B0H ;
INC YSJS ;
PUSH ACC ;保护ACC
MOV A,YSJI ;
CJNE A,#2,QT1 ;50mS*2=100mS
MOV P1,LED ;
MOV A,LED ;
RL A ;累加器A的值循环左移1位
MOV LED,A ;
MOV YSJS,#0 ;
QT1: POP ACC ;恢复现场
POP PSW ;
RETI ;返回主程序
END ;汇编程序结束
(8)51单片机怎么用语言编辑扩展阅读:
实现流水灯的三个方法:
第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。
第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。
第三种,库函数实现流水灯。利用左移函数进行。