为什么LED能点亮?
概念引入:输出电压=VCC就是高电平,输出电压
=GND(一般是OV)就是低电平,分别用1和0来表示,这个是理想值。
现在STC 的带硬件USB的MCU支持用硬件USB下载,因为用的是USB-HID通信协议,不需要安装任何驱动。STC打狗棒、降龙棍、开天斧、屠龙刀核心板以及STC开源示波器、STC实验箱在D-/P3.0.D+/P3.1与 PC-USB端口连接好的状况下,
USB-ISP下载程序步骤;
1、按下板子上的P3.2/INTO按键,就是P3.2接地
2、给目标芯片重新上电,不管之前是否已通电。
—==电子开关是按下停电后再松开就是上电
等待STC-ISP下载软件中自动识别出"STC USB Writer (HID1)”,识别出来后,就与P3.2状态无关了,这时可以松开P3.2按键
===传统的机械自锁紧开关是按上来停电,按下去是上电
3、点击下载软件中的“下载/编程”按钮(注意:USB下载与串口下载的操作顺序不同)
下载成功!
—==另外从用户区软复位到系统区也是等待USB下载。
通用输入输出端口的简称,可以通过软件来读取其输入电平,或者控制他输出高低电平。
P5.0就是一个GPIO口
PO是一组GPIO口
PO.0是一组的其中一个GPIO口,从PO.0到P0.7总共有8个。
我们一次可以操作一个IO口
也可以此同时操作一组
如何点亮LED4?它接在了P6.0的这个端口上。
根据原理图,需要:P40输出低电平,P60输出低电平完成点灯。
参考:三极管的工作原理及使用用法
两种三极管的工作原理总结如下:
NPN的发射极(e)接地,集电极©接高电平,基极(b)接控制信号,用b-e的电流(Ib)控制c-e的电流(Ic),e极电位最低,且正常放大时通常c极电位最高,即Vc> Vb > Ve。三极管导通,电流从c极流向e极。
PNP的发射极(e)接高电平,集电极©接低电平,基极(b)接控制信号,用e-b的电流(Ib)控制e-c的电流(Ic),e极电位最高,且正常放大时通常c极电位最低,即Vc < Vb < Ve。三极管导通,即电流从e极流向c极。
跟着手册:《STC32G12K128实验箱-V9.4使用说明书》新建工程,一步一步实现点亮。
上一节已经添加过STC芯片库,这里在下拉菜单中选择:STC MCU Database
新建文件Demo.c(扩展名建议小写):
写入代码:
sfr P0 = 0x80; //关键字sfr以红色显示
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
while(1)
{
P0++;
}
}
编译通过。“.\Objects\Demo” - 0 Error(s), 0 Warning(s).
但未提示生成任何文件。
重新编译:
提示:creating hex file from “.\Objects\Demo”…
sbit P00 = P0^0; //选择P0.0引脚
手册9.2.12 STC32G系列单片机中可位寻址的数据存储器:
STC32G系列单片机内部可位寻址的数据存储器包括两部分:第一部分的地址范围为DATA 区域的20H7FH,第二部分的地址范围是特殊功能寄存器SFR:8OHFFH。
特殊功能寄存器(SFR)区域
全部 SFR区域的80H~-FFH。共128个字节。每个字节均可位寻址。指定名字,对应一个路径。单片机根据地址里的数值去实现去我们要的一个功能。
每个IO的配置都需要使用两个寄存器进行设置。
以P0口为例,配置P0口需要使用P0M0和P0M1两个寄存器进行配置,如下图所示:
即P0M0的第0位和P0M1的第0位组合起来配置P0.0口的模式
即P0M0的第1位和P0M1的第1位组合起来配置P0.1口的模式,其他所有IO的配置都与此类似。
虽然每个IO口在弱上拉(准双向口)/强推挽输出/开漏模式时都能承受20mA的灌电流(还是要加限流电阻,如 1K、560Q2、472Q2等),在强推挽输出时能输出20mA的拉电流(也要加限流电阻),但整个芯片的工作电流推荐不要超过90mA,即从VCC流入的电流建议不要超过90mA,从GND流出电流建议不要超过90mA,整体流入/流出电流建议都不要超过90mA。
这里配置为准双向口,既可以向外输出高低电平,又可以读取外部的一个高低电平。
来源:百度百科
准双向口:有固定的内部上拉电阻。
准双向口是指P1、2、3有固定的内部上拉电阻,当用做输入时被拉高,当外部拉低时(低电平)会拉电流(source current, 这里拉电流是电流从单片机往外走),而P0则是真双向口,因为作为输入时它是悬浮的。
中文名准双向口特 点内部有上拉,故高电平为内部给出不是真正的外部信号
释义
C51的说明书上说:”Because Ports 1, 2, and 3 have fixed internal pullups, they are sometimes called quasi-bidirectional ports. When configured as inputs, they pull high and source current (IIL) when externally pulled low. Port 0, on the other hand, is considered truly bidirectional, because it floats when configured as an input. "
“准”就是“基本上的意思”,也就是“准双向口”不是真正的双向口。
其实重点在P0口.
P0口是双向指的是它被用作地址/数据端口时,只有在这个时候,P0口才处于两个开关管推挽状态,当两个开关管都关闭时,才会出现高阻状态.当P0口用于一般I/O口时,内部接Vcc的那个开关管是与引脚(端口)脱离联系的,这个时候,只有拉地的那个开关管起作用,P0口作为输出,是必须外接上拉电阻的,不然就无法输出高电平;
如果P0口作为输入,则必须先对端口写1,使拉地的开关管断开,这个时候,如果不接上拉电阻,则是高阻状态,就是一个双向口,如果接上拉电阻,则本身输出高电平,对输入信号的逻辑无影响(注意是对逻辑无影响,对实际参数有无影响我不确定,但是我认为是有的).
双向与准双向,根本原则是双向包含了高阻这个状态,而不在于是否需要先写1或者不写,P1P3口因为有内部上拉电阻,因此无论如何不是双向;P0口内部无上拉电阻,在处于数据/地址功能时,自动完成3态的转换,是双向,处于一般I/O口时,如果不接外部上拉,而且先向端口写了1,那么就处于高阻状态,此时,它也是一个人为的双向口,这与它处于地址/数据功能时的自动双向有区别,以及与P1P3处于输入时输出锁存器为1是有区别的跟I2C总线上那种漏极开路或者集电极开路结构差不多. 通过上拉电阻(或者下拉电阻)来提供一种电平的驱动.
当作为输入使用时,就将开关断开,这样就只剩下上拉(或者下拉)电阻,因而阻抗比较高,
可以由其它设备驱动该IO口。准双向口在做为输入使用时,实际上还是一种输出状态.
只是该输出状态的内阻比较大而已. 而真正的双向IO口,有方向控制寄存器,作为输入
使用时输出部分被断开.
双向口与准双向口的区别为双向口有高阻态,输入为真正的外部信号,准双向口内部有上拉,故高电平为内部给出不是真正的外部信号!软件做处理时都要先向口写“1”!
P0口为真正的双向口,其余为准双向口!P0内部无上拉(开漏输出),外加NMOS电路需接上拉!输入为高阻悬浮态!P0的驱动能力是单个其余口的两倍!
//sfr P0 = 0x80; //原始例程,关键字sfr以红色显示,第一次下载不亮,需修改
//sfr P0M1 = 0x93;
//sfr P0M0 = 0x94;
sfr P2 = 0xA0; //P2端口操作完成(屠龙刀三板载led)
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
//sfr P4 = 0xC0; //P4端口操作完成(STC32G12K128实验箱-V9.6)
//sfr P4M1 = 0xB3;
//sfr P4M0 = 0xB4;
//sfr P6 = 0xE8; //P6端口操作完成(STC32G12K128实验箱-V9.6)
//sfr P6M1 = 0xCB;
//sfr P6M0 = 0xCC;
//sbit P40 = P4^0; //选择P4.0引脚(三极管控制)
//sbit P60 = P6^0; //选择P6.0引脚(LED控制)
sbit P21 = P2^1; //选择P2.1引脚(LED控制)(屠龙刀三板载led)
void main()
{
// P0M0 = 0x00; //原始例程,
// P0M1 = 0x00; //原始例程,
// P4M0 = 0x00; //配置P4为准双向口
// P4M1 = 0x00;
// P6M0 = 0x00; //配置P6为准双向口
// P6M1 = 0x00;
P2M0 = 0x00; //配置P2为准双向口(屠龙刀三板载led)
P2M1 = 0x00;
//
while(1) //死循环
{
//P0++; //原始例程,
// P40 = 0; //三极管引脚输出低电平(STC32G12K128实验箱-V9.6)
// P60 = 0; //LED引脚输出低电平(STC32G12K128实验箱-V9.6)
P21 = 0; //设置低电平 (屠龙刀三板载led)
}
}
可参考:学习笔记|添加型号和头文件|下载程序(手动方式)| 通过P3.2口按键触发|通过USB指令复位并自动下载|STC32G单片机视频开发教程(冲哥)|第三集-2:三种下载方式
1.了解新工程的一个基本流程
2.了解IO口的高低电平的含义
3.务必牢记端口的几个寄存器 PxM0,PxM1,Px
4.务必牢记 sbit 的 作用,牢记#include的作用
5.了解USB_CDC不停电下载的用法
USB_HID不停电下载