PIC单片机原理及应用.pptx

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6
1.2 I/O端口控制
1. I/O端口分组管理
7
1.2 I/O端口控制
2. I/O端口的控制寄存器
① TRISx寄存器:I/O端口方向控制寄存器。
– TRISx的位为“1”时,其对应的I/O 端口为输入。 – TRISx的位为“0”时,其对应的I/O 端口为输出。 – 复位以后,所有端口引脚被定义为输入。
//RE0=1输出高电平+5V,亮
delay();
//延时
TE0 =0; //RE0=0输出低电平0V,灭灯
delay();
//延时
}
}
12
1.3 I/O端口应用举例
例2、实现6个发光二极管流水灯功能。 硬件分析:6个发光二极管D1-D6分别连接着33-38引脚,即
RE0-RE5端口;每个引脚输出高电平时(=1)灯亮;输出 低电平时(=0)灯不亮。
② 控制步骤: – 将TRISE寄存器的TRISE0位置0,设置RE0为数据输出端 口; – 给LATE寄存器的LATE0位赋值为1/0, RE0输出高低电平;
软件设计为:
int main()
{
TRISEbits.TRISE0 = 0; //设置RE0为输出(1输入,0输出);
while(1)
{
TE0 =1; 灯
例1:实现发光二极管D1闪烁功能。 硬件分析:发光二极管D1连接着38引脚,即RE0端口;
RE0输出高电平时(=1),D1亮; RE0输出低电平时(=0),D1不亮;
高电低平电(平=1()=0)
软件分析:
① RE0管脚对应的寄存器及对应位 – 方向控制寄存器TRISE的 TRISE0位; – LATE寄存器的 LATE0位; – PORTE寄存器的 RE0位;
} }

//左移1位,改变为下个输出值 //第6个灯亮后,重新从
//第1个灯点亮
1.3 I/O端口应用举例
例2、实现按按键加1计数功能。每按S8按键一次,加1计数, 发光二极管D1-D6显示二进制的计数值。
硬件分析:D1-D6连接在33-38引脚(RE0-RE5),按键S8连 接17引脚(RE8)。S8没有按下时,RE8输入为高电平 (=1);S8按下时,RE8输入为低电平(=0)
软件分析:
(1)RE0-RE5管脚对应的寄存器及对应位 – 方向控制寄存器TRISE的 TRISE0-TRISE5位; – LATE寄存器的 LATE0-LATE5位; – PORTE寄存器的 RE0-RE5位;
(2)控制步骤: – 将TRISE寄存器的TRISE0-RISE5位置0,设置RE0-RE5为输 出端口; – 分别对LATE寄存器的LATE0-LATE5位赋值为1/0,6个端口分 别输出高低电平;
流水灯的实现方法
发光LED D6
D5
端口
RE5
RE4
输出值1
0
0
输出值2
0
0
输出值3
0
0
输出值4
0
0
输出值5
0
1
输出值6
1
0
方法一 循环输出
D4
D3
D2
RE3
RE2
RE1
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
方法二 移位输出
D1
RE0 0x01
1
0x02
0
0x04
0
0x08
0
0x10
0
0x20
0
软件设计 方法一:循环输出
输入引脚数据
1.1 I/O端口介绍
2. I/O 端口特点
• 所有I/O 输入端口

都是施密特触发器
输入,以增强抗干
扰性。
• 有些端口(除VDD、 VSS、MCLR 和 OSC1/CLKI之外) 为多功能复用端口。
• I/O 引脚可复用多种 外设功能
5
注:复用多种外设功能时,名字在前的外设优先级高
软件分析:
(1)RE8管脚对应的寄存器及对应位 – 方向控制寄存器TRISE的 TRISE8位; – LATE寄存器的 LATE8位; – PORTE寄存器的 RE8位;
(2)控制步骤: – TRISE寄存器的TRISE8位置1,设置RE8为数据输入端口; TRISE0-RISE5位置0,设置RE0-RE5为输出端口,即为 0x0100。 – 读PORTE寄存器的RE8位, 判断RE8输入的电平,判断按键 是否按下(按下时读入为0); – 计数值+1,并写入寄存器LATE,二进制计数值通过RE0-
软件设计为:
int adddata=0; TRISE =0x0100;
//变量adddata存放计数值 //RE0-RE5设置为输出,RE8设置为输入
while(1)
{ if (PORTEbits.RE8 ==0) //查询按键S8是否按下
{ delay(); if (PORTEbits.RE8 == 0) adddata++; LATE=adddata;
delay();
//延时
}
}
}
软件设计 方法二:移位输出
int led=0x01; int main(void) {
TRISE =0x00; while(1) { LATE =led; delay();
//存放输出值,初值是第一个输出值
//设置RE0-RE5为输出
//点灯 //延时
led = led<<1; if (led == 0x40) led = 0x01;
② PORTx寄存器:I/O端口读引脚电平状态寄存器。读时,读 入的是端口引脚值;写时,数据写到端口数据锁存器输出。
③ LATx寄存器:I/O端口电平输出锁存寄存器。读时,读入数 据锁存器里锁存的值;写时,数据写到端口数据锁存器输出。
8
dsPIC30F4011 端口寄存器
1.3 I/O端口应用举例
//延时消抖 //再次查询按键S8是否按下
PIC单片机原理及应用
第五章 功能模块
1
第1节 I/O端口
主要内容 I/O端口介绍 I/O端口的控制方法 I/O端口的应用举例 I/O端口实验
1.1 I/O端口介绍
1. I/O端口结构图
输出数据时
输出数据 输出使能=1
输出使能 输出数据
输出数据
输入数据时
输入数据 输入使能=0
输入使能
输入数据
数据传送给数据总线
int ledcode[6]={0x01,0x02, 0x04, 0x08, 0x10, 0x20};
//存放6个输出值
int main(void)
{
TRISE =0x00;
//设置RE0-RE5为输出
while(1)
{
for (i=0;i<6;i++)
{
LATE=ledcode[i];
//6个输出值依次输出循环点灯
相关文档
最新文档