标题: 刚开始用stc8g1k08,这个程序写的对不对啊,为啥单片机没反应 [打印本页]

作者: zzsxjzscx    时间: 2022-5-12 21:57
标题: 刚开始用stc8g1k08,这个程序写的对不对啊,为啥单片机没反应
如题,这个D2灯照样亮,是我程序的问题吗

5a9743f6b34ee85d.jpg (206.49 KB, 下载次数: 44)

5a9743f6b34ee85d.jpg

-21cfc5bec82a8ef6.jpg (269.78 KB, 下载次数: 42)

-21cfc5bec82a8ef6.jpg

作者: zzsxjzscx    时间: 2022-5-12 22:17
吐槽一下,这个芯片要是能在protues上仿真就好了,要不学习编程确实比较费劲
作者: wulin    时间: 2022-5-13 05:32
zzsxjzscx 发表于 2022-5-12 22:17
吐槽一下,这个芯片要是能在protues上仿真就好了,要不学习编程确实比较费劲

void main()
{
        port_mode();
        LED=0;
        beep=0;
        while(1);
}

作者: man1234567    时间: 2022-5-13 08:23
程序写的只要编译能通过就对,但能不能实现你想要的功能两说;
单片机有没有反应不是肉眼凡胎直接可以看全的;
能仿真通过的未必实物也一样;
先学好基础再深入。
作者: weijoyer    时间: 2022-5-13 08:33
你这三极管给低电平才导通的,给1肯定是没反应的
作者: zzsxjzscx    时间: 2022-5-13 08:49
weijoyer 发表于 2022-5-13 08:33
你这三极管给低电平才导通的,给1肯定是没反应的

很奇怪,这个LED只要上电就亮,我想让他灭,看看程序管不管用
作者: kxcuser    时间: 2022-5-13 09:30
PNP的三极管要给低电平才行,STC的芯片要配置成推挽输出,P1M0=0x03;P1M0=0x00;多看书,不要一点小问题就来问,高手是没空理你的
作者: zzsxjzscx    时间: 2022-5-13 09:40
kxcuser 发表于 2022-5-13 09:30
PNP的三极管要给低电平才行,STC的芯片要配置成推挽输出,P1M0=0x03;P1M0=0x00;多看书,不要一点小问题就来 ...

感谢高手大哥的回复,但是问题是这样的,我的小灯上电就亮,我想让他关掉,所以这样写。推挽模式可能能帮助小灯灭吧
作者: jhczy    时间: 2022-5-13 09:51
zzsxjzscx 发表于 2022-5-13 08:49
很奇怪,这个LED只要上电就亮,我想让他灭,看看程序管不管用

上电灭的话,端口要设置成双向或推挽,且端口输出为高电平,另电路图中R3、4改成1k,R5取值计算一下,51估计小了
作者: jhczy    时间: 2022-5-13 09:57
zzsxjzscx 发表于 2022-5-13 09:40
感谢高手大哥的回复,但是问题是这样的,我的小灯上电就亮,我想让他关掉,所以这样写。推挽模式可能能帮 ...

R3、4改成1k的电阻,2k肯定不行。主程序:
void  main()
{
port_mode();
LED=1;
beep=1;
while(1)
{
...
}
}
作者: zzsxjzscx    时间: 2022-5-13 10:02
jhczy 发表于 2022-5-13 09:57
R3、4改成1k的电阻,2k肯定不行。主程序:
void  main()
{

十分感谢解答。小灯的电阻应该不是问题,之前也是用的一样的电路,只不过用的是C52RC控制,能实现功能。我把while加上试试吧。
作者: Y_G_G    时间: 2022-5-13 10:44
如果你有电脑又有学习板或者其它的硬件电路板,别用protues,那玩意没有用,只会浪费时间
1,D2是由P1.1控制的,低电平亮
2,P1.1输出要设定成强推挽模式,而不是传统的8051模式
3,如果还亮的话,启用内置的上拉电阻看一下
正常来说,一般是不用这种驱动电路的,不知道你VCC是不是单片机的电源,如果VCC是5V的,单片机是3.3V的,你是控制不了的,而且还有可能损坏单片机
作者: kxcuser    时间: 2022-5-13 11:13
zzsxjzscx 发表于 2022-5-13 09:40
感谢高手大哥的回复,但是问题是这样的,我的小灯上电就亮,我想让他关掉,所以这样写。推挽模式可能能帮 ...

用PNP的三极管比较麻烦,如果供电电压不一样,是关不了的(就比如说你的单片机是5V,但是三极的VCC是12V),除非前面在用一个NPN的三极管控制PNP,当然单片机供电电压和VCC一样就可以
作者: zzsxjzscx    时间: 2022-5-13 12:00
Y_G_G 发表于 2022-5-13 10:44
如果你有电脑又有学习板或者其它的硬件电路板,别用protues,那玩意没有用,只会浪费时间
1,D2是由P1.1控制的 ...

大哥真厉害。vcc供电是和单片机一样的,都是3.3V。我觉得proteus好主要是因为他可以按照电路图构建电路,仿真比较有说服力。这个硬件不是我设计的,之前准备用89C52RC的芯片,临时换到这个STC8G,所以没准备开发版。如果有仿真的话可以更好的分辨是硬件还是软件的问题,方便排查。再次感谢
作者: zzsxjzscx    时间: 2022-5-13 12:00
kxcuser 发表于 2022-5-13 11:13
用PNP的三极管比较麻烦,如果供电电压不一样,是关不了的(就比如说你的单片机是5V,但是三极的VCC是12V ...

供电电压相同,费心了。
作者: yfpc2006    时间: 2022-5-14 15:39
电路最好是:     +VCC------>负载(LED)------>三极管(NPN或PNP)或MOS管------> GND,具体原因这里就不说了,楼主要好好补补基础知识!
作者: yaoyao2022    时间: 2022-5-14 16:27
建议你使用pmos管,如果使用三极管的电路有问题,比如ao3401  
作者: 188610329    时间: 2022-5-19 11:36
你既然用stc8h了,直接ice不好么?不比protuse好玩么?
作者: 啤酒瓶子老大    时间: 2022-5-19 12:19
建议还是别仿真了。不是说仿真不好,只是就算仿真通过了。做实物也不一定能成功。不如一步到位自己做实物。有问题了直接查,然后就学会了。
就像KEIL 一样,编译通过了,不表示程序没有问题。逻辑通过了不表示单片机能跑出想要的结果。
作者: 51老鹰    时间: 2022-6-24 15:23
新手刚学51,这个程序大部分都可以理解,就是中间的一段
void port _mode()
{
P0M0=0x00;
P0M1=0x00;
P1M0=0x00;
P2M0=0x00;
P2M1=0x00;
P3M0=0x00;
P3M1=0x00;
}
这一段不知道干嘛用的,看图中mcu没有P0M0、P0M1啊。而且程序中也没有用到这些东西。刚学51,有很多东西都不懂,请各位大佬别笑话。
作者: 13205495918    时间: 2022-6-24 15:34
51老鹰 发表于 2022-6-24 15:23
新手刚学51,这个程序大部分都可以理解,就是中间的一段
void port _mode()
{

对每组IO口进行配置,你可以搜一搜就行了
作者: 雪玉寐影    时间: 2022-6-24 17:38
51老鹰 发表于 2022-6-24 15:23
新手刚学51,这个程序大部分都可以理解,就是中间的一段
void port _mode()
{

STC官网下个STC8G的手册学学!
作者: hhh402    时间: 2022-6-24 20:39
STC8G单片机IO口可以直接控制LED,不需要三极管。
作者: 51老鹰    时间: 2022-6-25 09:29
感谢高手,刚学单片机,有很多的常识不是很理解,请见谅。
是不是可以这么理解:给定端口输出置1,相当于I/O端口输出高位。
如果外部通过10K电阻拉高端口电平的话是不是就不需要在程序中申明了。另外在弱弱的问一下,P0M0和P0M1这两个端口在stc8g1k08中是没有的,为什么要这么申明?

作者: lkc8210    时间: 2022-6-25 16:26
51老鹰 发表于 2022-6-25 09:29
感谢高手,刚学单片机,有很多的常识不是很理解,请见谅。
是不是可以这么理解:给定端口输出置1,相当于I ...

有啊?怎么没有?





作者: 51老鹰    时间: 2022-6-25 17:03
lkc8210 发表于 2022-6-25 16:26
有啊?怎么没有?

非常感谢,原来这个就是I/O口的设置,我们需要哪种情况就在程序中先设定好,双向口、推挽输出、高阻状态、开漏输出原来是这么设定的,这下子是算有点明白了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1