技术文档

单片机经典程序 程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍

小编 2025-06-07 技术文档 23 0

程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍

单片机是一种可编程控制器,搭好硬件电路后,可以利用程序实现很多非常复杂的逻辑功能,与纯硬件电路相比,简化了硬件外围的设计、方便了逻辑的设计、丰富了逻辑的输出。不同厂家的单片机需要不同编程IDE来实现编程。在学习单片机之前,要先清楚单片机程序是如何烧写到单片机内部的,在烧写的过程中需要用到什么工具?因为不通用的烧写工具可能价格较贵,比如说Micorchip单片机使用的ICD系列编程器,单台价格在600-1000元人民币之间。今天和大学来认识一下单片机最常用的四种烧写方式和所使用到的工具。

1.使用JTAG接口实现

JTAG接口是一种标准的测试协议,可以实现编程时在线调试,利用单步追踪可以很方便的查找代码的Bug,大多数的单片机都支持这种接口。这种接口除了电源线和复位引脚之外,还要用到单片机的四个引脚,分别是:TDI、TMS、TCK、TDO,他们所代表的含义如下所示:

TDI--数据输入 ,所有写入寄存器的数据都是通过TDI接口串行输入的;TMS--模式选择 ,Jlink输出给目标CPU的时钟信号;TCK--时钟信号 ,所有数据的输入输出都是以该时钟信号为基准的;TDO--数据输出 ,所有从寄存器读出的数据都是通过TDO接口串行输出的;

以上这四个引脚都是协议里强制要求的,而且协议建议在设计电路时要选用上拉电阻。JTAG接口有多种形式,常用的20引脚、14引脚和10引脚。以20引脚JTAG为例,所设计的JTAG烧写电路如下图所示:

JTAG接口

上图中JTAG接口都通过电阻上拉了,有的单片机的这几个引脚在内部已经上拉,所以这几个上拉电阻可以省略,减少了成本和PCB空间的占用。

JTAG接口烧录方式常用的工具为J-Link,实物图如下图所示。

Jlink实物图

相信大家都见过或者听过这个烧写工具,这个工具很通用,但是大家在使用的时候一定要注意版权信息,因为这个工具是有版权的,前两年因为版权风波,网购平台还集中整治过一次。

2.SWD接口烧录方式

SWD是一种串行调试接口,与JTAG相比,SWD只需要两根线,分别为:SWCLK和SWDIO。他们的含义如下:

SWDIO --串行数据线,用于数据的读出和写入;SWDCLK --串行时钟线,提供所需要的时钟信号;

一般来说,大多数单片机的JTAG接口和SWDIO接口是复用的,SWD也是用J-Link工具来实现的。所以在使用的时候,只需要在软件界面做一下选择,使用SWD方式还是JTAG方式,硬件上无需改动。除了J-Link外,意法半导体的ST-Link也是支持SWD模式的。

SWD接口

SWD的接口如上图所示,可以看出,SWD和JTAG是相互复用的,由于SWD只需要两根线所以大大减少了对单片机GPIO口的占用,SWD方式也是可以在线调试的。

3.ISP烧写方式,用UART实现

使用过国产51单片机的朋友都清楚这种烧写方式,这种烧写方式是通过单片机的UART串口来实现的,所需要的工具也比较简单-USB/TTL。这个USB/TTL的芯片可以通过MAX232、CH340G等芯片来实现,通过MAX232实现的UART烧写电路如下所示:

UART串口烧写电路

在与单片机连接的时候,一定要注意交叉连接,所谓交叉连接即,单片机的TXD接串口RXD,单片机的RXD接串口TXD,否则数据通信失败。51单片机在使用该方式下载时需要断一下点再上电才能下载。

STM32单片机可以使用UART来实现程序下载,但是需要选择BOOT的模式,现在通过CH340G芯片可以实现自动ISP的下载方式,即不需要手动设置BOOT模式。

4.SWIM单总线下载方式

这种下载方式是针对STM8系列的单片机,这种方式只需要一根线即可实现程序的下载,所使用的工具为ST-Link,如下图所示:

ST-Link

以上为几种常见的烧写方式以及所使用的工具,欢迎大家留言评论,如果转载请注明作者信息和头条出处,感谢支持。

单片机常用程序有哪些?高级工考核反复使用的三个程序

今天给大家分享高级工考核经常使用的三个单片机程序

1、按键扫描

#include<reg52.h>

#include<stdio.h>

#define uchar unsigned char //宏定义

#define uint unsigned int

sbit K1=P0^0;

sbit L1=P1^0;

void delay_ms(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void main(void)

{

while(1)

{

if(K1==0) //开关、按钮是否接通

{

delay_ms(10); //延时去抖动

{

if(K1==0) L1=0;// 开关接通,有输出

else

L1=1;//断开,没有输出

}

}

}

}

2、定时与中断

void init_interrupt()//The Init of interrupt

{TH0=88;

TL0=0;

TMOD=0x01;

ET0=0;

IT0=0;

EX0=0;

TR0=0;

EA=0;

}

void timer_0(void) interrupt 1 //中断服务函数

{

;

}

void int_0(void) interrupt 0 //中断服务函数

{

;

}

3、数码显示相关

#include <at89x51.h> //头文件

#define uchar unsigned char //宏定义

#define uint unsigned int

#define ulint unsigned long int

sbit Data=P3^7; //定义595数据管脚 14管脚

sbit sck=P3^6; //上升沿时数据寄存器的数据移位 11脚

sbit rck=P3^5; //上升沿时数据进入数据存储区12脚

//共阴数码光字形表,0 1 2 3 4 5 6 7 8 9

uchar table[10]={0x3F,0X06,0X5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar Date[6]={0,0,0,0,0,0};

ulint a; //全局变量

/*******************延时子函数*********************/

void delay_ms(uint z) //z=1,延时1毫秒

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/*******************结束*****************************/

/*******************595初始化函数*********************/

void initialization_595() //595初始化

{

Data=0;

sck=0;

rck=0;

}

/*******************结束*****************************/

/****************595时序及显示函数************************/

void display(uchar *n) //显示6位数据,根据后面display(Date),则uchar *n指针指向Date数组

{

uchar i,dat; //局部变量

char j;

for(j=5;j>-1;j--) //6位数据依次循环

{

dat=table[n[j]]; //6位数据分别赋值

for(i=0;i<8;i++) //依次写入8位数据

{

if(dat&0x80) Data=1; //按位与操作,判断是1还是0

else Data=0;

dat<<=1; //左移一位等待下次判断

sck=0; //上升沿有效(上升沿时数据寄存器的数据移位)

sck=1;

}

}

rck=0; //将6位数据发出数码管(上升沿时移位寄存器的数据进入数据存储器,更新显示数据)

rck=1;

}

/*******************结束*****************************/

/*******************变量运算函数**********************/

calculate()

{

Date[0]=a/100000;

Date[1]=(a/10000)%10;

Date[2]=(a/1000)%10;

Date[3]=(a/100)%10;

Date[4]=(a/10)%10;

Date[5]= a%10;

}

/*******************结束*****************************/

/*******************主函数****************************

void main()

{ a=80310; //08级1班10号

initialization_595(); //调用595初始化子函数

while(1) //进入循环体

{

calculate(); //调用计算函 数

display(Date); //调用数码管显示函数

}

}*******************结束*****************************/

相关问答

单片机程序 讲解?

单片机程序是由中央处理器、存储器、输入输出端口(包括并行I/O、串行I/O、模数转换器)、计时器和计数器等组成,具有完整数字处理功能的大规模集成电路。单片...

单片机程序 是如何执行的?

单片机从这里取第一条指令,开始执行。3、按指令PC逐次增加或跳转4、中断被触发时,PC指向中断向量,从这里取指令。5、中断服...1、单片机复位。2、PC指向000...

不要烧录器,怎么样把 单片机程序 拷贝到单片机里,-ZOL问答

用STC的单片机,就不用专用的烧录器,用一条串口线就能把程序下载到单片机里,非常方便的。一般不叫拷贝,叫下载程序或编程。我这边用到的是ICD2还有ICD3,做仿真...

单片机 里的 程序 能读出来吗?能复制到其它空片里吗?具体怎么做?

这个问题嘛。你可以这样理解:你先利用烧录软件把你烧好的软件给读出来,然后反汇编就可以看到源程序代码了,不过在这个地方要注意了,如果你的源程序是汇编的...

怎么把 单片机 里原有的 程序 拷贝出来?

if(单片机加密){if(想要这个程序)找专门破解公司读取;if(想要这个功能){找会这个单片机的人设计程序,或者硬件也重新设计;...if(单片机加密){if(想...

单片机程序 下载好后如何运行?

只要程序下载进单片机里了,它就会自动从ROM区的起始地址开始运行。程序怎样安排的它就怎样运行,比如按键检测、引脚输出、其他中断程序等。比如你写了一个循...

单片机 程序 只能烧一次吗?为什么?

不是的,现在的单片机都是flash的程序存储器,利用flash这种工艺做的存储器可以少些至少20000次以上,因此一般在学习中不需要考虑说是烧了几次后单片机就坏了。...

定时器在 单片机 程序 的运行过程 - 懂得

我觉得是这样的,单片机的定时器,它的计数过程是相当于电脑里面一个后台运行的东东一样。在计数时单片机同时在执行其他程序,计数周期就是单片机的一...

程序 是怎么写入 单片机 的?

先在电脑中把程序写好,接着通过一个RS232的串口连接至电脑,最后用ISP下载器把程序导入到单片机中就行了。单片机是一种集成电路芯片,是采用超大规模集成电路技...

单片机 里头有已经 程序 烧入还可以改吗-ZOL问答

我现在在做的arm就是想用哪个程序,直接Load就行了。原来的程序就被覆盖了。查芯片数据手册看看是否带些保护或是一次性的单片机,如果是排除这些原因应该是片子...

猜你喜欢