异想天开

What's the true meaning of light, Could you tell me why

单片机最小系统

日期:2018-04-07 17:59:06
  
最后更新日期:2018-04-09 23:06:21
本来想用单片机测试下电机使用,结果昨天晚上到现在,居然在这个最小系统上一直折腾到现在。这其中曲折远非一张最小系统电路图能概括,关键是这次的最小系统功能板是去年调通过一次,并在收音机上应用过,这次是重装了操作系统,坑就埋在重装系统上面了。

一. 电路部分
MCU为STC89C52RC,大学的时候买过单片机的开发板,MCU也是STC的51单片机。51单片机的最小系统,主要包括复位电路,晶振电路。可以参考网上给出的最小系统图。如:

我的最小系统板的电路也和这个一样,但需要注意的一点就是,选11.0592Mhz晶振要好一些。这个主要跟波特率有关,选12Mhz的晶振下载时波特率比较小,暂时不解释原因。
需要一些原材料:
11.0592Mhz晶振 一个
30p 瓷片电容 2个
10k 电阻一个 1k电阻一个
10u 电容 一个
万能板 一块
STC的ISP下载器一个
其实比较麻烦的应该是ISP下载程序电路,这个直接购买下载线通过串口烧录。原材料买回之后就是焊接。我用的是锡焊法,先用铅笔在洞洞板上规划好布线,然后用焊锡点连起来。成品如下:


电路焊接好了,就需要调试电路了。万用表量一下io口的电压输出,看是不是高电压。如果万用表可以量频率的,测一下晶振一端与电容近地线一端频率是不是正常,12Mhz的晶振,那么这里就大概是12Mhz。


二. 程序部分
没啥问题后,就写个小程序run起来。需要两个软件,一个是编译器, 我的是keil uvision3,另外一个是ISP下载软件。
点击keil uvision3, 新建一个工程, 首先会让你选择MCU, 由于没有添加STC的MCU,这里选择atmel公司的,都是工业51标准,相差不大。

选择51芯片

开始动手写程序,囧,忘了头文件该怎么写去了,太久没写。 其实打开keil的安装目录C:\Keil\C51\INC, 就找到了REG52.h。 写个小代码,对P1.1口赋为低电平0。
[code lang="cpp"]
#include <reg51.h>

sbit LED = P1^1;
int main()
{
LED = 0;
return 0;
}
[/code]
然后编译生产hex文件。

三. 烧录程序
下载烧录程序需要一个烧录软件,这次这里折腾了好久,第一次我的系统是32位的,除了波特率不对外,其他还正常。 这次我的64位系统,不知怎么抽风了,安装不了某些驱动,比如移动硬盘的驱动,即使启用了安装未经数字签名驱动也没有效果。暂时不想重装系统,还有几个软件要用。ok, 换用32位系统。
首先看端口有没有来? 没有则需要安装USB转串口驱动。在宏晶官网下载的stc-isp-15xxx-v6.86L.zip有这个ch340驱动。我的下载线用的是CH340芯片。

对89C51类芯片,官网建议是使用早期的STC-ISP V4.83版本。下载V4.83版本,却发现少了MSCOMM32.ocx和COMDLG32.ocx组件,打不开软件。

从网上下载这两个组件注册。
[code lang="cpp"]
copy mscomm32.ocx %windir%\system32\ /y
regsvr32 %windir%\system32\mscomm32.ocx /s
[/code]

注册完了,果然可以打开ISP软件了。

下载的时候,发现连接不上单片机。这时就可以测试一下波特率是不是正确。115200,9600,还可以试一下其他更低的值。也可以使用串口调试助手,测试发送一个hello world, 用不同的波特率看能不能收到一个hello world。

shit,当串口通了后,发现还是不能正常下载。我测了一下我的电源模块,电源模块是通过USB接到笔记本上面,发现5V档只有3.4V,3V档只有2V多。单片机的供电电压是3.3V~5V都可以。但实际中,测试出来3.4V并不可以。用笔记本的5V直供也不可以。最后的解决,是用之前买的Node MCU的电源电压给单片机供电, 下载再冷启动了,成功了。