【官网例子分析系列】例子02--跑马灯。
本帖最后由 durongze 于 2024-5-3 23:17 编辑注意事项:
通常每个io口有8中模式:浮空输入,上拉输入,下拉输入,模拟输入,推挽输出,复用推挽,开漏输出,复用开漏
但本mcu有4中:00准双向口,01推挽输出,10高阻输入,11开漏模式。
----------------------------------------------------------------------------------
概念描述:
总共 8个 端口,端口数据寄存器用Px表示,位用Px.n表示
1.每个端口2个配置寄存器,PxM0,PxM1;两个模式寄存器对应的指定位有四种配置:
00准双向口,01推挽输出,10高阻输入,11开漏模式
2.每个端口1个上拉电阻控制寄存器,PxPU;
0:禁止端口内部的 :禁止端口内部的 4.1K上拉
1:使能端口内部的 :使能端口内部的 4.1K上拉
3.每个端口1个施密特触发控制寄存器,PxNCS;
0:使能端口的施密特触发功能。(上电复位后默认使能施密特触发)
1:禁止端口的施密特触发功能。
4.每个端口1个电平转换速度控制寄存器,PxSR;
0:电平转换速度快,相应的上下冲会比较大
1:电平转换速度慢,相应的上下冲比较小
5.每个端口1个驱动电流控制寄存器,PxDR;
0:增强驱动能力
1:一般驱动能力
6.每个端口1个数字信号输入使能控制寄存器,PxIE;
0:禁止数字信号输入。
1:使能数字信号输入。
7.每个端口1个下拉电阻控制寄存器,PxPD;
0:禁止端口内部的下拉电阻
1:使能端口内部的下拉电阻
----------------------------------------------------------------------------------
原理图:
----------------------------------------------------------------------------------
例子分析:
WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
P0M1 = 0x30; P0M0 = 0x30; //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
P1M1 = 0x30; P1M0 = 0x30; //设置P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V)
P2M1 = 0x3c; P2M0 = 0x3c; //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V)
P3M1 = 0x50; P3M0 = 0x50; //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
P4M1 = 0x3c; P4M0 = 0x3c; //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
P5M1 = 0x0c; P5M0 = 0x0c; //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
P6M1 = 0x00; P6M0 = 0xff; //设置为推挽输出
P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
P40 = 0; //LED Power On
while(1)
{
P60 = 0; //LED On
delay_ms(250);
P60 = 1; //LED Off
P61 = 0; //LED On
delay_ms(250);
P61 = 1; //LED Off
P62 = 0; //LED On
delay_ms(250);
P62 = 1; //LED Off
P63 = 0; //LED On
delay_ms(250);
P63 = 1; //LED Off
P64 = 0; //LED On
delay_ms(250);
P64 = 1; //LED Off
P65 = 0; //LED On
delay_ms(250);
P65 = 1; //LED Off
P66 = 0; //LED On
delay_ms(250);
P66 = 1; //LED Off
P67 = 0; //LED On
delay_ms(250);
P67 = 1; //LED Off
}
我有个疑问,那就是P1-P5,P7为什么要设置,看起来毫无关系啊。
页:
[1]