2015-11-27 20:37:58 tr1912 阅读数 1199
  • 玩转你的开发板-1.4.第1季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第4个课程,主要内容是带领大家玩转课程配套开发板,包括:开发板的整体配件认识、检测、程序下载及接线、实验现象的确认等。目的是让大家学会下载程序进行实验,以便后续自己编写程序时可以去实验验证。

    1746 人正在学习 去看看 朱有鹏

         在这个星期,心血来潮,完成了单片机的大作业,设计一个红绿灯的交互式的C语言的程序,写到单片机里,就可以实现红绿灯的来回亮灭,这次写博客是为了分享我自己设计的程序,里面一定会有一些不足,正式上交的时候会改正的,以下是程序:

<pre name="code" class="cpp">#include<stc89.h>                   //我用的专门的stc芯片的库,没有的可以用reg52.h
void delay (unsigned char x)	     //延时函数
{
	unsigned char i,j,k;
	for(i=0;i<=x;i++)
		for(j=0;j<=250;j++)
			for(k=0;k<=100;k++);
}

void NumberLight (unsigned char x)	  //数码管计数
{
	switch(x)
	{
		case 0:
			P2=0x03;
			break;
		case 1:
			P2=0x9f;
			break;
		case 2:
			P2=0x24;
			break;
		case 3:
			P2=0x0c;
			break;
		case 4:
			P2=0x99;
			break;
		case 5:
			P2=0x48;
			break;
		case 6:
			P2=0x40;
			break;
		case 7:
			P2=0x1f;
			break;
		case 8:
			P2=0x00;
			break;
		case 9:
			P2=0x08;
			break;
	}
}

void CountLight(unsigned char x)
{
	unsigned char i;
	for(i=x;i>0;i--)
	{
		NumberLight(i);
		delay(10);
	}
	NumberLight(0);
	  delay(10);	
}

void GreenOn(unsigned char n)         //控制绿灯亮,N=1时为南北方向,N=2时为东西方向
{
	switch(n)
	{
		case 1:
			P1=0x7e;
			break;
		case 2:
			P1=0xdb;
			break;
	}				
}

void YellowOn(unsigned char n)       //控制黄灯亮,N=1时为南北方向,N=2时为东西方向
{
	switch(n)
	{
		case 1:
			P1=0x7d;
			break;
		case 2:
			P1=0xbb;
			break;
	}	
}

void GreenFlash(unsigned char n)	   //控制绿灯闪烁,N=1时为南北方向,N=2时为东西方向
{
	switch(n)
	{
		case 1:
			P1=0x7f;
			NumberLight(3);
			delay(10);
			GreenOn(1);
			delay(10);
			P1=0x7f;
			NumberLight(2);
			delay(10);
			GreenOn(1);
			delay(10);
			P1=0x7f;
			NumberLight(1);
			delay(10);
			GreenOn(1);
			delay(10);
			P1=0x7f;
			NumberLight(0);
			delay(10);
			GreenOn(1);
			delay(10);
			break;
		case 2:
			P1=0xfb;
			NumberLight(3);
			delay(10);
			GreenOn(2);
			delay(10);
			P1=0xfb;
			NumberLight(2);
			delay(10);
			GreenOn(2);
			delay(10);
			P1=0xfb;
			NumberLight(1);
			delay(10);
			GreenOn(2);
			delay(10);
			P1=0xfb;
			NumberLight(0);
			delay(10);
			GreenOn(2);
			delay(10);
			break;
	}	
}

void NanBei()           
//南北向通行流程
{
	GreenOn(1);
	CountLight(9);
	GreenFlash(1);
	YellowOn(1);
	CountLight(3);
}

void DongXi()
 //东西向通行流程
{
	GreenOn(2);
	CountLight(9);
	GreenFlash(2);
	YellowOn(2);
	CountLight(3);
}

void main()
{
	//硬件自检,检查硬件的可用性
	P1=0x00;              
	P2=0x00;
	delay(40);
	//红绿灯工作状态的循环
	while(1)            
	{
		NanBei();           //南北向通行
		DongXi();           //东西向通行
	}
}




       PS:单片机的P1口是管理的红绿灯,P2口是管理的数码管显示数字,数码管是共阳极,且引脚g-a接在了P3的1-7上,儿红绿灯用的是P1口上的LED,分别是0-2口和5-7口上的,灯的闪烁用的是程序控制,没有做到精确的时间控制,以后会把单片机的时间控制加上,还有外部中断的实现也会加上的。

2016-10-13 14:57:34 guangyinglanshan 阅读数 2299
  • 玩转你的开发板-1.4.第1季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第4个课程,主要内容是带领大家玩转课程配套开发板,包括:开发板的整体配件认识、检测、程序下载及接线、实验现象的确认等。目的是让大家学会下载程序进行实验,以便后续自己编写程序时可以去实验验证。

    1746 人正在学习 去看看 朱有鹏

早期一般是将调试好的单片机程序写入到ROM、EPROM中,这种操作就像刻制光盘一样,实在高电压方式下写入,PROM是一次性写入,存储内部发生变化,有些线路或元件就被烧断,不可再恢复,所以叫做烧写,EPROM可以使用紫外线将原来写入的内容擦除,重新烧写,目前大量采用EEPROM,是可以电擦写的存储器。

单片机启动时会直接运行这些芯片中的程序,完成既定的功能。

所谓烧写,其实就是对单片机中的rom进行擦写。现代工艺下,rom已经可以进行多次擦写,但在早期,rom只能一次性设计好,例如早期的PLC,把二极管上的丝烧了后就永久编码出1。而我们知道,单片机程序经编译连接后传给机器便是机器语言,简而言之就是一大堆1和0。在少些过程中,我们将烧不烧一大堆MOS管和BJT的丝或连不连上通道来表示这些1和0。

烧写的三种方式:

1.把单片机当做一个ROM芯片,早期的单片机都是如此。将单片机放在通用编程上编程时,就像给28C256这样的ROM中写程序的过程一样。只是不同的单片机使用的端口,编程用的时序不一样。

2.像AT89S52或AVR单片机一样,在单片机上有SPI接口,这时用专用的下载线将程序烧写到单片机中。这时不同的是,单片机的CPU除了执行单片机本身的指令之外,还能执行对ROM进行操作的特殊指令,如ROM擦除、烧写和校验指令。在编程ROM时,下载线先通过传输这些指令给CPU执行(擦除ROM、读入数据、烧写ROM、和校验ROM),这样完成对单片机的ROM的烧写。此外,现在普遍使用的JTAG仿真器也是这样,单片机的CPU能执行JTAG的特殊指令,完成对ROM的烧写操作。

3.引导程序,即单片机中已经存在了一个烧写程序。启动单片机时首先运行这程序,程序判断端口状态,如果符合“要烧写ROM”的状态存在,就从某个端口(串口、SPI等等)读取数据,然后写入到单片机的ROM中。如果没有“要烧写ROM”的状态,就转到用户的程序开始执行。像AVR单片机的bootloader方式、STC的串口下载方式,还有其他单片机的串口编程等等都是这样。

2015-04-12 03:26:20 mdy09 阅读数 1547
  • 玩转你的开发板-1.4.第1季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第4个课程,主要内容是带领大家玩转课程配套开发板,包括:开发板的整体配件认识、检测、程序下载及接线、实验现象的确认等。目的是让大家学会下载程序进行实验,以便后续自己编写程序时可以去实验验证。

    1746 人正在学习 去看看 朱有鹏

我要问的不是如何制作烧写接口。 而是,电脑在通过接口向单片机烧写时(此时单片机 内没有程序),电脑是如何通过接口访问内部rom的??对应p口怎么就会指向单片机内部rom(就像单片机是一个rom?

有三种方式:

1.把单片机当做一个ROM芯片,早期的单片机都是如此。将单片机放在通用编程上编程时,就像给28C256这样的ROM中写程序的过程一样。只是不同的单片机使用的端口,编程用的时序不一样。

2.像AT89S52或AVR单片机一样,在单片机上有SPI接口,这时用专用的下载线将程序烧写到单片机中。这时不同的是,单片机的CPU除了执行单片机本身的指令之外,还能执行对ROM进行操作的特殊指令,如ROM擦除、烧写和校验指令。在编程ROM时,下载线先通过传输这些指令给CPU执行(擦除ROM、读入数据、烧写ROM、和校验ROM),这样完成对单片机的ROM的烧写。此外,现在普遍使用的JTAG仿真器也是这样,单片机的CPU能执行JTAG的特殊指令,完成对ROM的烧写操作。

3.引导程序,即单片机中已经存在了一个烧写程序。启动单片机时首先运行这程序,程序判断端口状态,如果符合“要烧写ROM”的状态存在,就从某个端口(串口、SPI等等)读取数据,然后写入到单片机的ROM中。如果没有“要烧写ROM”的状态,就转到用户的程序开始执行。像AVR单片机的bootloader方式、STC的串口下载方式,还有其他单片机的串口编程等等都是这样。

2018-12-27 13:40:11 qq_29769263 阅读数 5370
  • 玩转你的开发板-1.4.第1季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第4个课程,主要内容是带领大家玩转课程配套开发板,包括:开发板的整体配件认识、检测、程序下载及接线、实验现象的确认等。目的是让大家学会下载程序进行实验,以便后续自己编写程序时可以去实验验证。

    1746 人正在学习 去看看 朱有鹏

51单片机无法烧录程序的N种解决办法


  1. 有没有掉电!!!如果没有自动掉电的电路时,需要手动掉电;
  2. 单片机的晶振有没有安装好,是否有缺失,晶振的负载电容是否合适;
  3. CH340的TXD,RXD要与单片机的TXD,RXD反接,CH340的地线有没有和单片机接好;
  4. 如果单片机的最小系统是自己焊接的,检查一下复位电路,是否因为复位电路有问题,导致RST引脚电平一直被拉高;
  5. 确认单片机的型号是否正确,尝试降低下载的波特率。
2017-07-11 10:24:46 OurRtems 阅读数 658
  • 玩转你的开发板-1.4.第1季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第4个课程,主要内容是带领大家玩转课程配套开发板,包括:开发板的整体配件认识、检测、程序下载及接线、实验现象的确认等。目的是让大家学会下载程序进行实验,以便后续自己编写程序时可以去实验验证。

    1746 人正在学习 去看看 朱有鹏

    最近把家里的古董--我买的最早的一块51单片机开发板拿了出来,额,,这块板子有十几年了吧,应该2004年左右看到《电子制作》的期刊广告邮购的。再次拿了出来换上stc宏晶的stc89c52单片机,想让他继续发挥作用。用stc的下载工具下载程序时发现,下载软件一直提示给单片机上电。


    研究了大半天都没找出问题,试过:

1.换单片机

2.换usb转串口线

3.换供电方式

4.换max232芯片

5.研究原理图,看板子上跳线

    试了上面几种方法都没成功,后面干脆拿万用表测量串口通路,发现单片机txd、rxd两根线到max232芯片,max232到跳线,跳线到db9整个通路都是通的,那这就没问题了。忽然想起以前调试stm32单片机时,有一次调串口程序时没有连地线导致不能给其下载程序的问题,也是研究了半天才发现问题的原因。有了这个解决问题的思路,立刻做实验,问题解决。

    总结:无论是51单片机还是stm32单片机,用串口下载程序一定要接地线,即txd、rxd、gnd三根线。

by:霜月孤鸟

2017.07.11

单片机程序构架

阅读数 2913

使用485线直接进行STC程序下载

博文 来自: zvvzxzko2006
没有更多推荐了,返回首页