当前位置:首页 > 程序 > 正文

单片机程序用啥写

  • 程序
  • 2024-04-24 06:52:16
  • 1394
本文目录一览

I、单片机编程语言一般有哪几种

单片机的编程语言有很多种,大致分为三类:机器语言、汇编语言和高级语言。 机器语言对于大多数用户来说不再方便,因为它很麻烦并且容易出错。

1.微控制器汇编语言

汇编语言是一种使用文本助记符表示机器指令的符号语言。 其主要优点是需要资源少、程序执行效率高。 由于一条指令对应一段机器码,每一步的执行动作清晰,程序大小和堆栈调用情况易于控制,更易于调试。 然而,不同类型的单片机的汇编语言可能略有不同,因此移植并不容易,因为它们的命令系统不同。 但是汇编语言的知识可以帮助你理解影响四川语言效率的特殊规则。 例如,如果您了解汇编语言指令,则可以使用片上RAM作为变量,因为片外变量需要多个指令来配置累加器和数据指针以进行访问。 当需要使用浮点数并启用功能时,只有汇编编程经验才能防止生成大型、低效的程序。 对于这方面的编程,如果没有汇编语言,这是不可能的。

2.单片机用C语言

单片机用C语言是一种编译型编程语言,兼顾了几种高级语言的特点,并具有汇编语言的功能。 C语言库函数丰富、运算速度快、编译效率高、可移植性好,可以直接控制系统硬件。 另外,C语言程序具有完整的程序模块结构,这是在软件开发中采用模块化编程方法的有力保证。 与汇编相比,它有以下优点:

不需要了解单片机的命令系统知识,只需初步了解51的存储器结构即可。 至于寄存器分配、寻址不同存储器等细节和数据类型等由编译器管理。 程序具有标准化的结构,可以分为不同的功能。 这种方法有利于程序结构化,将变量选择与特殊操作结合起来,并提高程序的可读性。

编程和程序调试时间大幅减少,提高效率。 提供的库包含许多标准子程序,具有强大的数据处理能力。 由于它具有实用的模块化编程技术,因此可以轻松地将已编写的程序集成到新程序中。

提供的库包含许多标准子程序,具有强大的数据处理功能。 它可以轻松集成到新程序中。

微控制器的C语言作为一种非常实用的语言得到了广泛的支持。 (语言程序本身不依赖于机器硬件系统,基本上可以根据不同的翻译进行比较,无需修改

使用单片机语言进行编程已经成为单片机软件开发的主流。 作为单片机开发者,这是最好掌握的

高级资料

单片机,又称单片机)是一种微型计算机。 将中央处理单元、存储器、定时器/计数器(timer/counter)和各种输入输出接口集成在一块集成电路芯片上,是用于个人计算机的通用微处理器。 无需外部硬件)并节省成本。 它的最大优点是可以放置在设备中,但存储容量小,输入输出接口简单,功能性低,旧定义单一。 片式微型计算机已经不能满足,这就是为什么它们在许多应用中被称为更广泛的微控制器。 由于单片机常被用作控制器,因此目前中国大陆仍使用单片机。


II、为什么在用单片机汇编编程时,开头都要写上ORG0000HAJMPMAINORG0030H这些呢?请各位大侠多多指点!

原因:在单片机中,0000H单元是系统启动地址。 ORG0000HAJMPMAIN在此地址存放一条完整的跳转指令,并传送到主程序的入口地址。 ORG0030H用于定位用户RAM区域(30H-7FH)中的用户程序。 存储单元地址0000H-0030H还有其他特殊功能。

在汇编语言源程序的开头,通常使用org伪指令来指定程序的起始地址。 如果不使用org规范,编译后的目标程序将从0000H开始。 程序在ROM中是从0000开始存储的,但AJMPMAIN是无条件跳转指令,即单片机开机后首先从0000开始执行程序。

但是,AJMP直接将程序带到MAIN标号指示的存储区域来获取指令并执行它们,通常,MAIN标号放在语句ORG0030之后,即主程序开始于。 0030.地址开始被存储。

扩展信息:

微控制器数据存储器的特殊部分:

1.工作寄存器区(00H-1FH)共有8个工作寄存器,均用R0-表示。 这些寄存器称为R7,称为通用寄存器。 工作寄存器用于临时存储8位信息。 使用时,工作寄存器文件由程序状态字寄存器中的RS0和RS1选择。

2.位寻址区(20H-2FH)

片内数据存储器的20H-2FH存储区是位寻址区,可以用位寻址来对一个公共单元进行寻址。 也可以做。 位寻址区由16个字节组成,位地址为00H-7FH。

参考来源:百度百科-MCU内存

参考来源:百度百科-org


III、用52单片机C语言编写程序,实现00~59计时。 要求用T0,工作方式1。
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitdula=P2^6;//段选择
sbitwela=P2^7;//位选择
ucharshi,ge,num1,num2;//变量
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,//共阴极字库代码
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelay(uintx)//延迟子程序
{
uinti,j
for(i=0;i for(j=0;j<120;j++);
voidinit()
{
TMOD=0x01;//设置定时器工作模式0
TH0=(65536-50000)/256;//加载初始值
TL0=(65536-50000)%256;/>EA=1;//使能总中断
ET0=1;//使能中断0定时器
TR0=1;//使能启动定时器0
voiddisplay()//显示子程序
{
dula=1;
P0=table[ge];//发送段选择数据
dula=0;
P0=0xff;//发送位选择数据之前关闭所有屏幕
wela=1;
P0=0xfe;//发送位选择数据
wela=0;
delay(5);//延迟
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1; wela=0;
delay(5);
voidmain()
{
init();
while(1)
{
display();
voidtimer()interrupt1
{
TH0=(65536-50000)/256;//重置为原始值
TL0=(65536-50000)%256;
num1++;
if(num1==20)//20次时,1秒有过期
{
num1=0;//删除0,重新计数
num2++;
if(num2==60)
num2=0;
P1=0x00;
delay(500);
P1=0xff;
shi=num2/10;//分隔一个2位数字号码,单独发送数码管显示
ge=num2%10;//十位和单位
试过了就放心申请吧!