18205|20

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

msp430g2553编程问题之两个灯交替闪烁 [复制链接]

 
本人自学新手(很新的那种!)看见一段程序,不知怎么理解望大神解答!
#include
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= BIT0 | BIT6; // P1.0, P1.1output.
P1REN |= BIT0 | BIT6; // P1.0, P1.1pullup
P1OUT |= BIT0;
P1OUT &= ~BIT0;
while (1)
{
P1OUT ^= BIT0 | BIT6;
__delay_cycles(1000000);
}
}
1.为什么while前让p1.0亮后又马上让他灭,这是何用意啊?代码:P1OUT |= BIT0;
                P1OUT &= ~BIT0;
2.while里p1out^=(BIT0 | BIT6),我觉得按理是让p1.0和p1.6一起亮后又一起啊(bit0与bit6先或再与之异或),怎么能让他们交替闪烁啊?
望大神解惑!

最新回复

淡定,淡定,淡定……   详情 回复 发表于 2019-2-25 16:33
点赞 关注(1)

回复
举报

3183

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
1.就是让它一个亮一个灭呀
2.取反还是一个亮一个灭呀。交替闪烁
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 

回复

6040

帖子

205

TA的资源

版主

板凳
 
这段代码如果按你描述的功能,是有问题的。
1. while前两句应该是
P1OUT |= BIT0;
P1OUT &= ~BIT6;
让p1.0和p1.6一个高一个低,这样进入循环之后就可以交替闪烁。
2. 如果改成上面的代码,那么问题2就不存在了。

点评

P1OUT &= ~BIT0;这句话应该是不小心弄错了,按你说的改一下就没问题  详情 回复 发表于 2019-2-25 11:58
因为使能了端口上拉电阻,所以BIT6不用单独设置为输出高,因为上拉的存在,这个端口平时就是被拉高了  详情 回复 发表于 2019-2-25 09:28

赞赏

1

查看全部赞赏

 
 
 

回复

6366

帖子

4929

TA的资源

版主

4
 
P1OUT ^= BIT0 | BIT6;
这句话的意思是让两个端口输出状态取反。
程序中最开始这两个端口因为上拉电阻的缘故,端口都处于高电平,而在主循环前把BIT0置低,这样在主循环前这两个端口的状态一个是高电平,一个是低电平。主循环中,把这两个端口状态取反,就实现了一高一低交替变化。
 
 
 

回复

6366

帖子

4929

TA的资源

版主

5
 
lcofjp 发表于 2019-2-25 08:59
这段代码如果按你描述的功能,是有问题的。
1. while前两句应该是
P1OUT |= BIT0;
P1OUT &= ~BIT6;
让p ...

因为使能了端口上拉电阻,所以BIT6不用单独设置为输出高,因为上拉的存在,这个端口平时就是被拉高了

点评

430是推挽输出,不存在上拉输出之说。  详情 回复 发表于 2019-2-25 10:12
 
 
 

回复

6366

帖子

4929

TA的资源

版主

6
 
你可以实际做实验看看运行结果,如果结果正确,再反推程序这么做的原因。
还有就是你应该多看看C语言的位操作,
 
 
 

回复

6040

帖子

205

TA的资源

版主

7
 
tiankai001 发表于 2019-2-25 09:28
因为使能了端口上拉电阻,所以BIT6不用单独设置为输出高,因为上拉的存在,这个端口平时就是被拉高了

430是推挽输出,不存在上拉输出之说。

点评

端口内部有上拉电阻的,可以选择是否使能,他这个程序中使能了上拉电阻,所以会被拉高,设为输出口后,该端口是高电平的  详情 回复 发表于 2019-2-25 10:48
 
 
 

回复

6366

帖子

4929

TA的资源

版主

8
 
lcofjp 发表于 2019-2-25 10:12
430是推挽输出,不存在上拉输出之说。

端口内部有上拉电阻的,可以选择是否使能,他这个程序中使能了上拉电阻,所以会被拉高,设为输出口后,该端口是高电平的

点评

上拉电阻仅是上拉输入用的  详情 回复 发表于 2019-2-25 10:50
 
 
 

回复

6040

帖子

205

TA的资源

版主

9
 
tiankai001 发表于 2019-2-25 10:48
端口内部有上拉电阻的,可以选择是否使能,他这个程序中使能了上拉电阻,所以会被拉高,设为输出口后,该 ...

上拉电阻仅是上拉输入用的

点评

其实使能了内部上拉后,与端口的输入输出没关系啦,上拉电阻会把端口初始电平拉到高,直到有强制拉低的低电平,这个可以是外部过来的低电平,也可以是端口输出低电平  详情 回复 发表于 2019-2-25 11:11
电路上我不是很明白。 但是就像他程序里面设置了这个端口的上拉电阻,又把端口设置为输出,这个时候这个端口的电平不是高?  详情 回复 发表于 2019-2-25 11:05
 
 
 

回复

6366

帖子

4929

TA的资源

版主

10
 
lcofjp 发表于 2019-2-25 10:50
上拉电阻仅是上拉输入用的

电路上我不是很明白。
但是就像他程序里面设置了这个端口的上拉电阻,又把端口设置为输出,这个时候这个端口的电平不是高?
 
 
 

回复

6366

帖子

4929

TA的资源

版主

11
 
lcofjp 发表于 2019-2-25 10:50
上拉电阻仅是上拉输入用的

其实使能了内部上拉后,与端口的输入输出没关系啦,上拉电阻会把端口初始电平拉到高,直到有强制拉低的低电平,这个可以是外部过来的低电平,也可以是端口输出低电平

点评

如果你懂数字电路,应该看一下datasheet的IO端口结构图,如果你懂软件,应该看一下user guide相关寄存器配置说明。  详情 回复 发表于 2019-2-25 11:21
单片鸡怎样工作不能凭空想象吧,要根据手册来。 手册里指明了,IO口设置为输出的时候,上下拉电阻自动失效。 再说那个电阻也不止是上拉,可以根据设置配成上拉或者下拉,这些都是要看手册的。  详情 回复 发表于 2019-2-25 11:19
 
 
 

回复

6040

帖子

205

TA的资源

版主

12
 
tiankai001 发表于 2019-2-25 11:05
电路上我不是很明白。
但是就像他程序里面设置了这个端口的上拉电阻,又把端口设置为输出,这个时候这个 ...[/quote]

[quote]Each bit in each PxOUT register is the value to be output on the corresponding I/O pin when the pin is
configured as I/O function, output direction, and the pullup/down resistor is disabled.
 
 
 

回复

6040

帖子

205

TA的资源

版主

13
 
tiankai001 发表于 2019-2-25 11:11
其实使能了内部上拉后,与端口的输入输出没关系啦,上拉电阻会把端口初始电平拉到高,直到有强制拉低的低 ...

单片鸡怎样工作不能凭空想象吧,要根据手册来。
手册里指明了,IO口设置为输出的时候,上下拉电阻自动失效。
再说那个电阻也不止是上拉,可以根据设置配成上拉或者下拉,这些都是要看手册的。
 
 
 

回复

6040

帖子

205

TA的资源

版主

14
 
tiankai001 发表于 2019-2-25 11:11
其实使能了内部上拉后,与端口的输入输出没关系啦,上拉电阻会把端口初始电平拉到高,直到有强制拉低的低 ...

如果你懂数字电路,应该看一下datasheet的IO端口结构图,如果你懂软件,应该看一下user guide相关寄存器配置说明。

点评

1、想问题太想当然了,没有去看手册说明 2、硬件还是所知甚少,需要向你拜师  详情 回复 发表于 2019-2-25 12:08
我确实没看数据手册,刚才特意查了一下,回答问题有些想当然了  详情 回复 发表于 2019-2-25 11:54
 
 
 

回复

6366

帖子

4929

TA的资源

版主

15
 
lcofjp 发表于 2019-2-25 11:21
如果你懂数字电路,应该看一下datasheet的IO端口结构图,如果你懂软件,应该看一下user guide相关寄存器 ...

我确实没看数据手册,刚才特意查了一下,回答问题有些想当然了
 
 
 

回复

6366

帖子

4929

TA的资源

版主

16
 
lcofjp 发表于 2019-2-25 08:59
这段代码如果按你描述的功能,是有问题的。
1. while前两句应该是
P1OUT |= BIT0;
P1OUT &= ~BIT6;
让p ...


P1OUT &= ~BIT0;这句话应该是不小心弄错了,按你说的改一下就没问题
 
 
 

回复

6366

帖子

4929

TA的资源

版主

17
 
lcofjp 发表于 2019-2-25 11:21
如果你懂数字电路,应该看一下datasheet的IO端口结构图,如果你懂软件,应该看一下user guide相关寄存器 ...

1、想问题太想当然了,没有去看手册说明
2、硬件还是所知甚少,需要向你拜师

点评

你言重了,我就是刚好赶上碰见我知道的,就回了下,我早就不干硬件了,转web开发了。  详情 回复 发表于 2019-2-25 13:03
 
 
 

回复

6040

帖子

205

TA的资源

版主

18
 
tiankai001 发表于 2019-2-25 12:08
1、想问题太想当然了,没有去看手册说明
2、硬件还是所知甚少,需要向你拜师

你言重了,我就是刚好赶上碰见我知道的,就回了下,我早就不干硬件了,转web开发了。
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

19
 
tiankai001 发表于 2019-2-25 09:26
P1OUT ^= BIT0 | BIT6;
这句话的意思是让两个端口输出状态取反。
程序中最开始这两个端口因为上拉电阻的 ...

谢谢各位大神,小弟还有点没明白的是那个p1ren,我知道他跟上拉电阻有关,可是那个按钮是p1.3,他这样p1ren |=bit0|bit6具体是什么意思,找了好久都没找到解释清楚的。还有这个程序我运行了能使两个灯闪烁,但灯亮度很小,特别是绿灯!

点评

你可以先直接把两个LED都点亮,让他们一直亮着,看看两个LED的亮度是否一样。 然后把主循环中那个延时时间加长,看看亮度有什么变化,(也可以缩短延时时长,观察亮度的变化)。  详情 回复 发表于 2019-2-25 14:17
 
 
 

回复

6366

帖子

4929

TA的资源

版主

20
 
Timfma7 发表于 2019-2-25 13:06
谢谢各位大神,小弟还有点没明白的是那个p1ren,我知道他跟上拉电阻有关,可是那个按钮是p1.3,他这样p1r ...

你可以先直接把两个LED都点亮,让他们一直亮着,看看两个LED的亮度是否一样。
然后把主循环中那个延时时间加长,看看亮度有什么变化,(也可以缩短延时时长,观察亮度的变化)。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表