飞思卡尔MC9S12G系列芯片之【GPIO】模块总结

合集下载

第六讲MC9S12单片机IO接口和功能模块

第六讲MC9S12单片机IO接口和功能模块
逐次逼近型A/D 由一个比较器和D/A 转换器通过逐次 比较逻辑构成,从MSB 开始,顺序地对每一位将输入 电压与内置D/A 转换器输出进行比较,经n 次比较而输 出数字值。其电路规模属于中等。
9S12的A/D模块主要特性
8位/10位可选择的转换精度; 速度快,每进行一次10位的转换,仅
仅需要7nS; 采样时间可编程; 左对齐/右对齐的数据格式,有符号/
控制寄存器2—ATDCTL2
ADPU:A/D模块的电源管理。1=正常模式,0=低功耗 模式。
AFFC:标志位快速清零。1=对转换结果寄存器访问会 自动清除标志位,0=正常模式,访问结果寄存器前读状 态寄存器1可以清楚转换完成标志CCF。
AWAI:等待时进入低功耗模式。1=进入,0=正常工作。 ETRIGLE、ETRIGP:外部触发的边沿/极性控制。 ETRIGE:上两位的使能位。允许在PAD7输入外部触发
AN7/ETRIG/PAD7(58):模拟量输入通道7, 通用数字输入端口。它也可以被配置为A/D 转换 的外部触发引脚。
AN6/PAD6 - AN0/PAD0(51-57):模拟量输入 通道6-0,通用数字输入端口。不可以被用作外部 触发引脚。PAD0通过50K滑动变阻器接到VCC, 调可变电阻可以调试A/D转换。
没有PS4-PS7
PORTAD
只能输入
1、通用I/O接口
I/O口作为输入使用
设置方向寄存器(DDRx)为输入(0X00) 随时读取I/O口的数据寄存器(PORTx)
I/O口作为输出使用
设置方向寄存器(DDRx)为输出(0XFF) 设置驱动能力寄存器(非必须) 拉电阻选择(非必须) 随时写入I/O口数据寄存器(PORTx)
A/D时钟的计算公式如右图。

飞思卡尔S12G系列芯片Demo程序之看门狗实验

飞思卡尔S12G系列芯片Demo程序之看门狗实验

1、看门狗代码示例#include <hidef.h>#include "derivative.h"#define LEDCPU PORTD_PD3#define LEDCPU_dir DDRD_DDRD3/*************************************************************//* 初始化锁相环*//* 使用外部晶振:16MHz *//* 设置总线频率:16MHz *//*************************************************************/void INIT_PLL(void){CPMUPROT=0x26; //解除时钟配置保护CPMUCLKS_PSTP = 0;CPMUCLKS_PLLSEL = 1;CPMUOSC_OSCE=1; //使能外部晶振CPMUSYNR = 0x01; //SYNDIV的值为1,CPMUREFDIV =0x81; //REFDIV的值为1CPMUPOSTDIV=0x00;CPMUPLL=0x10; //锁相环调频启用,用以减少噪音while(CPMUFLG_LOCK==0); //等待PLLCLK锁定CPMUPROT=0x01; //使能时钟配置保护}/*************************************************************//* 初始化看门狗*//*************************************************************/void INIT_COP(void){CPMUPROT =0x26; //解除时钟配置保护CPMUCLKS &=(~0x10);CPMUCLKS |=0x01; //设置时钟源为晶振时钟CPMUCOP = 0x07; //设置看门狗复位间隔,2^24个晶振周期,为1.048576s CPMUPROT=0x00; //使能时钟配置保护}/*************************************************************//* 延时函数*//*************************************************************/void delay(void){unsigned int i;for(i=0;i<50000;i++);}/*************************************************************//* 主函数*//*************************************************************/void main(void){DisableInterrupts;INIT_PLL();//初始化锁相环的目的是为了使外部晶振起振,否则看门狗无法使用晶振时钟。

飞思卡尔MC9S12G系列芯片之【看门狗】模块总结

飞思卡尔MC9S12G系列芯片之【看门狗】模块总结

飞思卡尔MC9S12G系列芯片之【看门狗】模块总结一、看门狗(监控芯片)1、为什么要使用看门狗?在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误、不在程序区、取出错误的程序指令等,都会陷入死循环,程序的正常运行被打断,从而由单片机控制的系统无法继续正常工作,会造成整个系统的陷入停滞状态,发生不可预料的后果。

看门狗就是定期查看芯片内部的情况,一旦发生错误就向芯片发出重启信号的电路。

看门狗命令在程序的中断中拥有最高的优先级。

2、工作原理看门狗电路的应用,使单片机可以在无人状态下实现连续工作。

看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。

看门狗,又叫watchdog timer,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端。

?MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给WDT清零,如果超过规定的时间不喂狗(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位,防止MCU 死机。

在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位,所以在使用有看门狗的芯片时要注意清看门狗。

3、作用看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

【精品课件教案PPT】 第六讲 MC9S12单片机IO接口和功能模块PPT文档共98页

【精品课件教案PPT】 第六讲 MC9S12单片机IO接口和功能模块PPT文档共98页
【精品课件教案PPT】 第六讲 MC9S12单片机IO接口和功能模块
6













7、翩翩新 来燕,双双入我庐 ,先巢故尚在,相 将还旧居。
8













9、 陶渊 明( 约 365年 —427年 ),字 元亮, (又 一说名 潜,字 渊明 )号五 柳先生 ,私 谥“靖 节”, 东晋 末期南 朝宋初 期诗 人、文 学家、 辞赋 家、散
文 家 。汉 族 ,东 晋 浔阳 柴桑 人 (今 江西 九江 ) 。曾 做过 几 年小 官, 后辞 官 回家 ,从 此 隐居 ,田 园生 活 是陶 渊明 诗 的主 要题 材, 相 关作 品有 《饮 酒 》 、 《 归 园 田 居 》 、 《 桃花 源 记 》 、 《 五 柳先 生 传 》 、 《 归 去来 兮 辞 》 等 。

60、生活的道路一旦选定,就要勇敢地 走到底 ,决不 回头。 ——左
1
0














Байду номын сангаас

56、书不仅是生活,而且是现在、过 去和未 来文化 生活的 源泉。 ——库 法耶夫 57、生命不可能有两次,但许多人连一 次也不 善于度 过。— —吕凯 特 58、问渠哪得清如许,为有源头活水来 。—— 朱熹 59、我的努力求学没有得到别的好处, 只不过 是愈来 愈发觉 自己的 无知。 ——笛 卡儿

第2章MC9S12DG128的结构与工作原理

第2章MC9S12DG128的结构与工作原理

2.1 MC9S12DG128的内部结构
2.1.1 CPU12内核(Star Core)
(2)间址/变址寄存器(Index Register) X、Y
❖ CPU12内部有两个16位地址寄存器IX和IY,称为间接寻址寄 存器,简称间址寄存器或变址寄存器。一般情况下作为指针 寄存器,用于多种寻址方式下的地址计算,也可用于临时存 放数据或参与一些运算,只能按照16位方式访问。
❖ 若把一个16位数据存入累加器D中,则高8位在A寄存器中,低8位在B 寄存器中。与此相对应,若把D寄存器中的一个16位数据存入存储器, 则高8位在存储器的低位地址,低8位在存储器的高位地址。
❖ 注意,任何Motorola (Freescale)公司独立设计的16位、32位CPU中, 寄存器与存储器字节的对应关系都是高位数据存放于低位地址,低位数 据占用高位地址,这与Intel公司的CPU数据存放格式正好相反。
2.1 MC9S12DG128的内部结构
2.1.1 CPU12内核(Star Core)
❖ SP主要用于堆栈管理,用于中断和子程序调用时保存系统地址信息,也 可以存储临时信息,一般不做他用。
❖ 在不影响其内容的前提下,也可替补用作所有变址寻址方式下的变址寄 存器,通常不参与运算。
❖ 惟一例外的是,在符号扩展指令中用作目的寄存器。此外,还具有自身 的加、减1指令。
(Program State Word),但不同的是,它还可以参与控制CPU的行为。 ❖ 条件码寄存器中各位的定义:
CCR中的各位包括两部分: ➢5个算术特征位(Arithmetic Flag Bit) ,即H、N、Z、V、C,它们反映上一条指令执 行结果的特征(状态); ➢3个MCU控制位,即中断屏蔽位X、I和STOP指令控制位,这3位通常由软件设定, 以控制CPU的行为。复位后,X、I两位默认状态为1,屏蔽系统中断。CCR是真正的 专用寄存器,除了C、H位以外,其他各位不参与任何运算。

飞思卡尔MC9S12G系列芯片之【GPIO】模块总结

飞思卡尔MC9S12G系列芯片之【GPIO】模块总结

位数 8 8 8 8 2
小注: a. 由上表可知,这五个寄存器通过同一个电阻控制寄存器 PUCR 的 0~4 位分别
对应控制端口 A~D;
b. 在学习板中(这是前提,以下模块与寄存器的连接仅限此开发板):
LED 灯是通过 PORTA 寄存器控制,LED1~LED8 分别对应 PORTA 的 P0~P7 位(注意
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生
位数 8
8
端口 P 和 J 都含有 7 个寄存器,其中与中断有关的寄存器有两个:
中断使能寄存器 PIEx 及中断标志寄存器 PIFx。
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
WOMN 寄存器为 PORTS 和 PORTM 特有的寄存器,不常用。
位数 8
8
端口名称
寄存器种类 数据寄存器(PTT)
PORTT (PT)
GPIO 模块总结(以 MC9S12G128 为例)
一、常见功能
功能 设置输入/输出端口 设定 I/O 口的高低电平 选择内置上拉/下拉电阻 中断输入方式的选择 驱动能力的设置
需配置寄存器 DDRx(置 0 为输入,置 1 时为输出) PORTx(置 0 低电平、置 1 高电平) PERx PIEX XS128 芯片具有
EnableInterrupt;
// 定义主函数
// 禁止中断 // 设置 I/O 方向为输出 / *对 data 取反后为 0111 1111,因 LED 在低

飞思卡尔MC9S12XS128功能模块驱动

用了一年多飞思卡尔MC9S12XS128这款处理器,现在总结下各个功能模块的驱动.//锁相环时钟的初始化总线频率为40MHz(总线时钟为锁相环时钟的一半)//晶振为11.0592MHzvoid PLL_init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1) { //锁相环时钟= 2*11.0592*(39+1)/(10+1)=80MHz 总线时钟为40MHzREFDV=0x0A;SYNR=0x67; //0110_0111 低6位的值为19,高两位的值为推荐值while(CRGFLG_LOCK != 1);CLKSEL_PLLSEL = 1; //选定锁相环时钟//FCLKDIV=0x0F; //Flash Clock Divide Factor 16M/16=1M}//周期中断定时器的初始化-// //周期中断通道1用于脉冲累加器的定时采样,定时周期为: 10ms= (199+1)*(1999+1)/(40M) (没有使用)//周期中断通道0用于控制激光管的轮流发射,定时周期为: 2000us= (399+1)*(199+1)/(40M)//2011/4/4 15:24 定时时间改为1msvoid PIT_init(void){PITCFLMT_PITE = 0; // 禁止使用PIT模块 PITCFLMT :PIT 控制强制加载微计数器寄存器。

PITCE_PCE0 = 1; // 使能定时器通道0//PITCE_PCE1 = 1; //使能定时器通道1PITMUX = 0; //通道0,和通道1均选择8位微计数器0//修改时间只需要改下面四行PITMTLD0 = 199; //向8位微计数器中加载的值PITLD0 = 199; //向16位计数器中加载的值//PITMTLD1 = 39; //向8位微计数器中加载的值 8位,最大值不要超过255//PITLD1 = 1999; //向16位计数器中加载的值PITINTE |= 0x01; //使能定时器通道0的中断PITCFLMT_PITE = 1;//使能PIT模块}//脉冲累加器的初始化, PT7口外接光电编码器//最新修改: 2011/3/25 16:53void PT7_PulAcc_Init(void){DDRT &= 0x77;//设置PT7,PT3口为输入(硬件上PT7,PT3通过跳线联到了一块)PERT |= 0x80; //使能通道7的上拉电阻PPST &= 0x7f; //电阻设为上拉电阻TCTL4 &= 0x3f; //禁止PT3的输入捕捉功能PACTL = 0x50; //启动脉冲累加计数器,上升沿触发,禁止触发中断和溢出中断,主定时器禁止}//通道1用于控制舵机1 PWM 高电平有效,//通道3用于控制电机1 PWM 低电平有效,这与前两代车高电平有效有区别!!!!!//通道7用于给上排激光管提供PWM信号 PWM高电平有效!!!!!//通道6用于给下排激光管提供PWM信号 PWM高电平有效!!!!!// 2011-03-17 7:56 增加了A端口的使用新增通道6//2011-6-9 23:03 //增加了通道4,5的联合使用,用于控制下排方向舵机 void PWM_init(void){PWME = 0x00;//PWM禁止PWMPRCLK = 0x03; // ClockA=40M/8=5M, Clock B = 40M/1=40M PWMSCLB = 10; // Clock SB= 40/2*10= 2MHz(供电机)PWMSCLA = 5; // SA = Clock A/2*5 = 5M/10 = 500K = SA 用于控制舵机PWMPOL = 0xe2; //1110_0010通道7,通道6与通道1、通道5先输出高电平然后输出低电平,POLx=1先输出高电平后输出低电平; PPOLx=0先输出低电平)PWMCAE = 0x00; // 左对齐输出(CAEx=0为左对齐,反之为中心对齐)//PWMCLK = 0010_1010 (0 1 4 5位控制SA_1;或A_0; 2 3 6 7位控制SB_1 或B_0)//为PWM通道1选择时钟 SA(500KHz),//为PWM通道5选择时钟 SA(500KHz),//为通道3选择时钟 SB(10MHz)//为通道7选择时钟B(40MHz)//为通道6选择时钟B(40MHz)PWMCLK = 0x2A; //0010_1010PWMCTL = 0x70; //0111_0000 CON45=1,把通道4,5联合使用。

飞思卡尔MC9S12XS128单片机重点模块讲解



这一点和 51 单片机的 I/O 口有区别,在典型的 51 单片中 P0 口内部没有上拉电阻,但作为 I/O 口使用时需要外接排阻。其他 P1-P3 口则可以直接作为双向口使用,51 单片在上电复位 后端口被默认的置 1.在 51 单片中端口的某一位置 0 时端口作为输出口使用,置 1 时作为输 入口使用。例如如果我们想把 P1 作为输出口使用时我们可以在程序开始时写 P1=0x00; 如果 我们想把 P1 口作为输入口使用时我们可以写 P1=0xff; 这一点正好和飞思卡尔的 128 单片机 相反,另外 128 单片有专门的数据方向寄存器 DDRA 或者 DDRB 等来管理各个端口的输入 输出选择,51 单片没有。如果我们想把端口 A 作为输入口使用,我们只需写 DDRA=0x00; 即所有位都置 0,如果我们想把端口 A 作为输出口使用,我们只需要写 DDRA=0xff; 即所有 位都置 1 ,而如 果我们想要 把端口 A 的高四 位做输入口 ,低 4 位做输 出口时我们 就 写 DDRA=0x0f; 当我们需要将该端口的某一位做输出或者输入口使用时只需要将该端口对应的 方向位置 1 或者置 0 即可。例如我们想把 A3 口作输入口, A4 口作输出口使用时我们只需 要写: DDRA_DDRA3=0; DDRA_DDRA4=1; 即可。 � � 对于数据方向寄存器的使用只要记住:置 1——输出 置 0——输入 PORTA 数据寄存器也是由 8 位组成,任何时候都可以对它进行读写操作。
#define uchar unsigned char //数据类型宏替换 #define uint unsigned int /*------------------------延时函数--------------------------------------*/ void delay(uint a) { uint i,j; for(i=0;i<a;i++) for(j=0;j<a;j++) ; } /*--------------------------指示灯闪烁函数-------------------------------*/ void light() { while(INPUT) { PORTB=0x3f; delay(500); PORTB=0x00; delay(500); } } //6 只灯全点亮 //延时一段时间 //6 只灯全熄灭 //延时一段时间 //判断输入电平的高低

飞思卡尔MC9S12G系列详解

飞思卡尔MC9S12G系列详解
电子发烧友网:随着驾驶员对车内舒适度和便利性的要求在提高,汽车车身电子产品在保持具有竞争力价格的同时,还需要继续提供性能更高的半导体。

飞思卡尔半导体目前开始扩大现已普及的16位S12微控制器(MCU)系列,以优化大量对成本敏感的汽车车身电子应用。

先进的S12G 器件设计针对应用需求,提供灵活的内存、封装和成本选项。

MC9S12G系列是一个专注于低功耗、高性能、低引脚数量的高效汽车级16位微控制器产品。

这个系列是桥连8位高端微机和16位高性能微机,像MC9S12XS系列。

本文将详细介绍关于飞思卡尔MC9S12系列的芯片简介、MC9S12单片机最小系统硬件设计、典型程序应用、飞思卡尔XS128和G128两种单片机的主要区别等进行阐述。

飞思卡尔MC9S12G系列单片机中文简介
1.1介绍
MC9S12G系列是一个专注于低功耗、高性能、低引脚数量的高效汽车级16位微控制器产品。

这个系列是桥连8位高端微机和16位高性能微机,像MC9S12XS系列。

MC9S12G系列是为了满足通用汽车CAN或
LIN/J2602通信应用。

这些应用的典型例子包括body controllers,occupant。

飞思卡尔MC9S12XS128(定时器)ECT寄存器详解

1、定时器IC/OC功能选择寄存器TIOSIOS[7..0]IC/OC功能选择通道0 相应通道选择为输入捕捉(IC)1 相应通道选择为输出比较(OC)2、定时器比较强制寄存器 CFORCFOC[7..0]设置该寄存器某个FOCn位为1将导致在相应通道上立即产生一个输出比较动作,在初始化输出通道时候非常有用。

【说明】这个状态和正常状态下输出比较发生后,标志位未被置位后的情况相同。

3、输出比较7屏蔽寄存器 OC7MOC7M[7..0]OC7(即通道7的输出比较)具有特殊地位,它匹配时可以直接改变PT7个输出引脚的状态,并覆盖各个引脚原来的匹配动作结果,寄存器OC7M决定哪些通道将处于OC7的管理之下。

OC7M中的各位与PORTT口寄存器的各位一一对应。

当通过TIOS将某个通道设定为输出比较时,将OC7M中的相应位置1,对应的引脚就是输出状态,与DDR中的对应位的状态无关,但OC7Mn并不改变DDR相应位的状态。

【说明】OC7M具有更高的优先级,它优于通过TCTL1和TCTL2寄存器中的OMn和OLn设定的引脚动作,若OC7M中某个位置1,就会阻止相应引脚上由OM和OL设定的动作。

4、输出比较7数据寄存器 OC7DOC7D[7..0]OC7M对于其他OC输出引脚的管理限于将某个二进制值送到对应引脚,这个值保存在寄存器OC7D中的对应位中。

当OC7匹配成功后,若某个OC7Mn=1,则内部逻辑将OC7Dn送到对应引脚。

OC7D中的各位与PORTT口寄存器的各位一一对应。

当通道7比较成功时,如果OC7M中的某个位为1,OC7D中的对应位将被输出到PORTT的对应引脚。

【总结】通道7的输出比较(OC7)具有特殊的位置,在OC7Mn和OC7Dn两个寄存器设置以后,OC7成功输出后将会引起一系列的动作。

比如:OC7M0=1,则通道0处在OC7的管理下,在OC7成功后,系统会将OC7D0的逻辑数据(仅限0或者1)反应在PT0端口上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用于检测过载或输出 引脚短路条件
置 0:输入 置 1:输出 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生 置 0:无极性沿发生 置 1:有极性沿发生
位数 8
小注:
端口的使用按照功能优先级进行。
小注:
a:端口的使用按照功能优先级进行; b:PP 端口作为 PWM 模块端口; c:PT 端口作为 TIM 模块端口;
三、代码实例
----以通过 PORTA 端口控制 LED 灯为例 实现功能:让 LED 灯从左往右依次闪烁并循环 #include <hidef.h> #include “derivative.h”
两者的对应关系)。
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0
LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED8
即寄存器的位与 LED 的排列顺序是相反的,给寄存器赋值时应注意。
端口 名称
寄存器种类 数据寄存器(PTP)
输入寄存器(PTIP)
PORTP (PP)
GPIO 模块总结(以 MC9S12G128 为例)
一、常见功能
功能 设置输入/输出端口 设定 I/O 口的高低电平 选择内置上拉/下拉电阻 中断输入方式的选择 驱动能力的设置
需配置寄存器 DDRx(置 0 为输入,置 1 时为输出) PORTx(置 0 低电平、置 1 高电平) PERx PIEX XS128 芯片具有
极性选择寄存器 0(PPS0AD)
极性选择寄存器 1(PPS1AD)
中断使能寄存器 0(PIE0AD)
中断使能寄存器 1(PIE1AD)
中断标志寄存器 0(PIF0AD)
中断标志寄存器 1(PIF1AD)
小注:
寄存器功能
置 0:低电平 置 1:高电平 置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件
EnableInterrupt;
// 定义主函数
// 禁止中断 // 设置 I/O 方向为输出 / *对 data 取反后为 0111 1111,因 LED 在低
电平时发光,故可点亮 LED1*/ // 使能中断
for (; ;) {
delay ( ); data = data <<1;
if ( data == 0 ) data = 0x80;
数据方向寄存器(DDRP) 上拉使能寄存器(PERP) 极性选择寄存器(PPSP)
中断使能寄存器(PIEP)
中断标志寄存器(PIFP)
数据寄存器(PTJ)
输入寄存器(PTIJ)
PORTJ (PJ)
数据方向寄存器(DDRJ) 上拉使能寄存器(PERJ) 极性选择寄存器(PPSJ)
中断使能寄存器(PIEJ)
2、分类
1)S12G128 共有 100 个 I/O 口,其中通用 I/O 口 84 个,各端口所含寄存器如下 图所示:
小注: 每个端口大部分为复用端口,通过配置相关寄存器可实现 I/O 口与不同模块或 外设之间的数据通信。 2)各端口寄存器名称、位数(含有几个通道口)及常见功能说明如下表所示: 由表 1)可以看出: PORTA~PORTE 端口所含寄存器种类相同; PORTP、PORTJ、PORTAD 三者相同; PORTS、PORTM 两者相同; PORTT 单独为一种类型 按类型进行总结如下:
二、端口详解 1、引脚图
小注:
1)除 BKGD 外,其余引脚都可用作通用的输入输出口。 2)EXTAL(PE0、12 脚):外部晶振(时钟)输入引脚。
3)XTAL(PE1、14 脚):内部晶体驱动输出引脚 4)IRQ(PB4、47 脚):可屏蔽中断(即可由用户控制),芯片接收外部事件中断 的主要手段,低电平或下降沿时产生中断请求。
端口 名称
寄存器种类 数据寄存器 0(PT0AD)
数据寄存器 1(PT1AD)
输入寄存器 0(PTI0AD)
输入寄存器 1(PTI1AD)
数据方向寄存器 0(DDR0AD)
数据方向寄存器 1(DDR1AD)
PORTAD 上拉使能寄存器 0(PER0AD) (PAD) 上拉使能寄存器 1(PER1AD)
LED = ~data; } }
小注:
// 定义无限循环,等价于 while(1)
/*左移一位,注意此处的左移是指 PORTA 寄存器的位进行左移*/
1)注意 PORTA 寄存器各位于 LED 灯的对应关系,如下所示:
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0
LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
输入寄存器(PTIT) 数据方向寄存器(DDRT) 上拉使能寄存器(PERT)
极性选择寄存器(PPST)
3)端口通用功能说明
寄存器功能
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
中断标志寄存器(PIFJ)
小注:
寄存器功能
置 0:低电平 置 1:高电平 用于检测过载或输出引 脚短路条件
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生 置 0:低电平 置 1:高电平 用于检测过载或输出引 脚短路条件
端口 名称
PORTA (PA)
PORTB (PB)
PORTC (PC)
PORTD (PD)
PORTE (PE)
寄存器种类
数据寄存器(PA)
数据方向寄存器(DDRA) 上拉电阻控制寄存器(PUCR) 数据寄存器(PB)
数据方向寄存器(DDRB) 上拉电阻控制寄存器(PUCR) 数据寄存器(PC)
数据方向寄存器(DDRC) 上拉电阻控制寄存器(PUCR) 数据寄存器(PD)
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生
位数 8
8
端口 P 和 J 都含有 7 个寄存器,其中与中断有关的寄存器有两个:
中断使能寄存器 PIEx 及中断标志寄存器 PIFx。
位数 12
a. 由上表可知,G128 可作为中断口的只有 PP、PJ 和 PAD 三个端口;
b. PAD 端口寄存器都为两个原因:
PAD 端口分别为 AD 模块及 KWAD 模块的复用端口
端口 名称
寄存器种类 数据寄存器(PTS)
输入寄存器(PTIS)
PORTS (PS)
数据方向寄存器(DDRS) 上拉使能寄存器(PERS)
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
WOMN 寄存器为 PORTS 和 PORTM 特有的寄存器,不常用。
位数 8
8
端口名称
寄存器种类 数ቤተ መጻሕፍቲ ባይዱ寄存器(PTT)
PORTT (PT)
因此在最初点亮 LED1 后,要想让 LED 从左往右依次闪烁,应配置寄存器从 0 位
往 7 位依次变化,即进行左移操作。
#define LED PORTA #define LED_dir DDRA unsigned char data =0x80;
// 宏定义,即用符号变量 LED 代替 PORTA // 定义全局变量,二进制为 1000 0000
void dely () {
unsigned int i, j; for (i=0; i<10; i++) {
极性选择寄存器(PPSS) 有线或模式寄存器(WOMM) 数据寄存器(PTM)
输入寄存器(PTIM)
PORTM 数据方向寄存器(DDRM) (PM) 上拉使能寄存器(PERM)
小注:
极性选择寄存器(PPSM) 有线或模式寄存器(WOMM)
寄存器功能
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
数据方向寄存器(DDRD) 上拉电阻控制寄存器(PUCR) 数据寄存器(PE)
数据方向寄存器(DDRE) 上拉电阻控制寄存器(PUCR)
寄存器功能
置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 0 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 1 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 2 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 3 位确定 置 0:低电平 置 1:高电平 置 0:输入 置 1:输出 PUCR 4 位确定
for(j=0; j<60000; j++);
}
}
// 定义延时函数
// 定义循环变量 // 进行循环嵌套,增加循环次数
/*此处是指 60000 个机器周期,机器周期 =12 时钟周期=12/晶振频率*/
void main ( ) {
DisableInterrupt; LED_dir = 0xff; LED = ~data;
相关文档
最新文档