280 likes | 408 Views
I/O 接口模块. 2010 年 7 月. 控制科学与工程学院. 控制. I/O. 检测. 单片机内部集成了 PORTA 、 PORTB 、 PORTE 、 PORTAD 、 PORTK 、 PORTT 、 PORTS 、 PORTM 、 PORTJ 、 PORTH 等 I/O 口 由于不同型号或者 同一型号不同的封装 , I/O 接口的引脚的具体数量会有很大的差异。. PORTA 、 PORTB 、 PORTE 和 PORTK 在芯片处于扩展方式下被用作总线信号.
E N D
I/O接口模块 2010年7月 控制科学与工程学院
控制 I/O 检测
单片机内部集成了PORTA、PORTB、PORTE、PORTAD、PORTK、PORTT、PORTS、PORTM、PORTJ、PORTH等I/O口单片机内部集成了PORTA、PORTB、PORTE、PORTAD、PORTK、PORTT、PORTS、PORTM、PORTJ、PORTH等I/O口 • 由于不同型号或者同一型号不同的封装,I/O接口的引脚的具体数量会有很大的差异。
PORTT、PORTP、PORTS、PORTM、PORTJ和PORTH被集成在端口集成模块(PIM)内 ,与片内其他功能模块的引脚复用
通用I/O接口 • I/O口作为输入使用 • 设置方向寄存器(DDRx)为输入(0x00) • 随时读取I/O口的数据寄存器(PORTx/PTx)
通用I/O接口 • I/O口作为输出使用 • 设置方向寄存器(DDRx)为输出(0xFF) • 设置驱动能力寄存器(非必须) • 拉电阻选择(非必须) • 随时写入I/O口数据寄存器(PORTx/PTx)
I/O接口的功能及设置方法 数据寄存器:并行I/O接口都有数据寄存器进行数据的读取和发送
方向寄存器 方向寄存器的某位为“0”表示相应的引脚为输入引脚;为“1”表示相应的引脚为输出引脚。
I/O口的中断功能 • MC9S12单片机的I/O接口PORTJ、PORTP(PORTH)具有中断功能. • 中断使能寄存器 • “1”表示允许中断 • “0”表示禁止中断 • 中断标志寄存器 • “1”表示有中断发生 • “0”表示无中断发生
中断边沿选择寄存器 • “1”表示上升沿中断, • “0”表示下降沿中断。 • 当检测到有效中断边沿时,中断标志寄存器PIFJ相应位被置1,产生中断并进入相应的中断服务程序。
程序举例 • 使用PORTJ口的中断功能。 • 设置PORTA口为输出口,PORTA的第6脚和PORTJ的第6脚硬件相连, • PORTB为输出口,用来控制8个LED灯, • PORTJ开中断,并且设置为上升沿触发。
void interrupt 24 PJI(void); /* 声明中断函数*/ void main(void){ EnableInterrupts; DDRJ=0x00; /*PORTJ作为输入*/ DDRB=0xFF; /*PORTB作为输出*/ PORTB=0xff; /*灯全灭*/ DDRA=0xff;/*PORTA输出*/ PORTA=0x00;/*PORTA全为低电平*/ PPSJ=0xff;/*上升沿中断*/ PIEJ=0xff;/*中断使能*/ for(;;){PORTA=0b11000000;/*产生中断*/} } #pragma CODE_SEG NON_BANKED void interrupt 24 PJI(void)/*中断服务程序,中断向量号为24*/ {PORTB=0xf0;/*LED灯高四灭,低四亮*/}
如何得知中断向量号? 中断向量表 向量号0 向量号1 依次向下数 向量号24 ……
例1 设计一个C语言程序,使教学板上发光二极管 • 点亮LED • 显示花灯效果 • 1、3、5、7先亮 • 延迟一段时间后2、4、6、8亮 • 再1、3、5、7亮,依次循环。 • 显示循环流水灯效果 • 1、2、3、4、5、6、7、8依次循环亮
例2、用扫描方式实现LED显示按键状态 • 例3、用中断方式实现LED显示按键状态
同时显示4个相同的数值 • 同时显示4个不同的数值(1、2、3、4)
例5 蜂鸣器 • 使蜂鸣器发出“嘀……嘀……嘀…………”的声音
(1)中断使能及方式控制(INTCR)(IRQCR) • 边沿触发允许位 • 0= 引脚低电平触发 • 1= 引脚下降沿触发 • IRQ中断允许位 • 0=IRQ引脚与中断逻辑 • 断开 • 1=IRQ引脚连接到中断 • 逻辑
例6 外部中断 • 利用外部中断点亮小灯