一块51单片机如何输出4个程序,执行4个不同功能?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一块51单片机如何输出4个程序,执行4个不同功能?相关的知识,希望对你有一定的参考价值。

请大家帮忙解决。

1、首先要明白pwm的含义,pwm就是输出不同占空比的脉冲,
2、普通51单片机io口输出pwm的话,可以用定时器去计时,比如要输出100hz的占空比50%的pwm。可以配置1ms的定时器中断,在中断中计数,一个中断就是1ms,100hz的脉冲,周期是10ms,50%的占空比,可以计数到5的时候把io口取反;程序如下
void
main()

tmod
=
0x01;
th0
=
0xfc;
tl0
=
0x18;
//
晶振选择12mhz,配置定时器中断1ms
et0
=
1;
tr0
=1;
ea=
1;
while(1);
//程序停止在这里,,接下来就是去响应中断

void
timer0()
interrupt
1

static
unsigned
char
t
=
0;
th0
=
0xfc;
tl0
=
0x18;
//重新装入初值;
t++;
if(t
<5)

io
=
0;

else
if(t
<
10)

io
=
1;

else

t
=
0;


上面的程序就是周期是10ms,占空比为50%的输出了,,,需要调节占空比的话,只要改变io口电平电话的时间就可以了;
3、多个io口
输出不同占空比的pwm;
原理是和1个的是一样的,
多用几个时间变量去计时,判断就可以了。
4、上面说的是普通的51单片机,现在有很多增强型单片机,内部有pwm模块,可以直接使用,赋值一个周期值,比如30000到特定的寄存器里面;
然后改变第一次电平变化的时间和第二次电平变化的时间
就可以实现不同的占空比调节了。具体的可以参考下单片机的数据手册都会有例程说明的,。如果是使用内部pwm模块的话,需要选择含有多路pwm功能的单片机来满足设计要求了。
参考技术A 做成四个片段放一起就行了。不过内存的分配使用要注意:寄存器可以有四个组选,普通内存就要注意分开,别冲突了。
切换可以用中断,外中断触发时作一定条件判断,然后把相应程序段的首地址压入PC,返回后就能跳到相应的程序段执行了。不过要注意堆栈的操作,在转跳前要把堆栈指针SP复位。
参考技术B 是想把程序搞成好几个功能块吧!
应该好实现的
通过外部的跳线,把程序引向不同的功能模块。

单片机的IAP是啥意思?

AP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:
1)检查是否需要对第二部分代码进行更新
2)如果不需要更新则转到4)
3)执行更新操作
4)跳转到第二部分代码执行
第一部分代码必须通过其它手段,如JTAG或ISP烧入;第二部分代码可以使用第一部分代码IAP功能烧入,也可以和第一部分代码一道烧入,以后需要程序更新是再通过第一部分IAP代码更新。
对于STM32来说,因为它的中断向量表位于程序存储器的最低地址区,为了使第一部分代码能够正确地响应中断,通常会安排第一部分代码处于Flash的开始区域,而第二部分代码紧随其后。
在第二部分代码开始执行时,首先需要把CPU的中断向量表映像到自己的向量表,然后再执行其他的操作。
如果IAP程序被破坏,产品必须返厂才能重新烧写程序,这是很麻烦并且非常耗费时间和金钱的。针对这样的需求,STM32在对Flash区域实行读保护的同时,自动地对用户Flash区的开始4页设置为写保护,这样可以有效地保证IAP程序(第一部分代码)区域不会被意外地破坏。
IAP与ISP的区别
在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程,而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。ISP的实现一般需要很少的外部电路辅助实现,而IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。
参考技术A IAP in appplication program 在应用可编程

意思就是 在单片机工作的时候编程它

单片机自己编程自己 就是在线升级

通常需要 boot区支持 boot区是一个独立的 程序存储区 将boot区的程序 设计为 通过通信端口更改程序存储区flash 的内容 于是就实现了 在线升级的功能 这就是 IAP
参考技术B In Application Programming 是指在应用编程,单片机程序自己可以往程序存储器里写数据或修改程序! 参考技术C 在应用中变成,意思就是在程序运行时,你可以通过远程或通过某一端口,如串口下载升级本身的应用程序。 参考技术D IAP就是指在应用编程

以上是关于一块51单片机如何输出4个程序,执行4个不同功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过单片机输出标准的4到20mA的电流

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。

单片机C语言控制舵机

单片机的程序存储器和数据存储器共处同一地址空间为啥不会发生总线冲突?

51单片机中断程序大全

51单片机2个外部中断实现5中模式4中速度跑马灯效果