学校发的实验例子太高深了,对于我们零基础的孩子来说太痛苦了,只有自己找资料凑凑了。边学习边记录,提供大家参考和指正。
先说说基础定义吧:
1.一般要先定义端口的输入和输出Sx(数据方向寄存器)
如果相应的TRISx的位为0表示为输出,这个很容易记住,Output的第一个字母O和数字0相象。 如果相应的TRISx的位为1表示为输入,这个很容易记住,Input的第一个字母I和数字1相象。
如: TRISB=0b11001010;(二进制表示0b)注意的是二进制从右向左数依次为0,1,2... TRISB=0xCA;(十六进制0x)
他们的效果都是一样的表示RB7,RB6,RB3,RB1为输入,其余(RB5,RB4,RB2,RB0)为输出。
也可以单独的对某个位进行操作:
TRISAbits.TRISA7=0;//A端的编号七设置为输出
TRISBbits.TRISB1=1;//B端的编号一设置为输入
1.1也可以用我们实验例子中所用到的在plib.h头文件中的库函数
PORTSetPinsDigitalOut(IOPORT_B, BIT_7);//将B端的RB7设为数字输出端口
顺便说一下,PIC默认时,引脚是输入的,即默认时,TRISx=0xFF.F=1111;
关于何时输入输出的问题百度了以下:
输出:如果你要用某个引脚控制一个东东,如让它高电平或低电平,则这个引脚就得设置为输出。(例如点亮一个灯) 输入:如果你想知道某个引脚是高电平或低电平,则这个引脚就得设置为输入。还有如果作为AD转换,相应的引脚就得做为输入。(例如获取按钮的状态)
2.然后就是设置I/O口的值PORTx ——— 端口寄存器(可以点亮led灯了)
如果相应的PORTx的位为1表示为高电位
如果相应的PORTx的位为0表示为低电位
如:
PORTA=0b10100010;
同样也可以单个控制
PORTBbits.RB6=1;//B端的RB6为高电位
2.1也可以用我们实验例子中所用到的在plib.h头文件中的库函数
PORTSetBits(IOPORT_B,BIT_7|BIT_8|BIT_9);//将B端IO口的RB7,RB8,RB9置1高电位
PORTClearBits(IOPORT_A,BIT_0|BIT_1|BIT_3);//将A端IO口的RA0,RA1,RA3清零低电位
注意:要引用这些库函数需要在起始位置添上#include
先写个简单的流水灯例子吧
电路原理图如下:
注意到有四个led D10,D12,D13,D4灯分别对应RB7,RB8,RB9,RB13只需控制这几个端口就可以做简单的流水灯了。
但观察实际的开发板从上到下为D13,D12,D10,D4,也就是从上到下控制RB9,RB8,RB7,RB13要以实际为主。
代码如下:
#include //32位的基本头文件 #include//定义了多种库函数的头文件 #pragma config JTAGEN = OFF//好像用MPLABX IDE测试都要关闭JTAGEN端口(不太懂)
int main() {
//设置RB7,RB8,RB9,RB13为输出
//也可直接用PORTSetPinsDigitalOut(IOPORT_B, BIT_7|BIT_8|BIT_9|BIT_13);代替
PORTSetBits(IOPORT_B,BIT_7|BIT_8|BIT_9|BIT_13);
//将RB7,RB8,RB9,RB13
while(1)
3.总结
面对一个新的领域确实有点摸不着头脑,还有一些语句也太多了,几条不同的语句竟然都表示同一个意思甚至汇编,C语言,伪指令都混用。
虽然这样可移植性和适用语言性大大增强了,但对我们初学者也太多了,有点混乱。看来我的基础也没有掌握,还有这么多语句要理解。
转载请说明出处谢谢。
-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。