C与单片机的简单程序问题请教

作者&投稿:勾琼 (若有异议请与网页底部的电邮联系)
你的程序有问题:
1.else应该加一个花括号
2.P3指的是MCU的P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7这8个口。所以你写P3=1,表示P3.0=1
见下表。这个十进制数表示为1
P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0
0 0 0 0 0 0 0 1
我没有看见你的硬件电路结构,所以就把你的P3口全部拉成高电平了。见下表,这个数二进制是1111,1111B,十进制是255,如果写16进制就是0xff(或者0ffH)
P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0
1 1 1 1 1 1 1 1
我帮你改了一下程序段,你再试试吧。
if(h_num==12&m_num==0&s_num==15) //分别设置时分秒的启动时间
P3=0x00; //接通继电器
else
{
if(h_num==12&m_num==0&s_num==20)
P3=0xff; //关闭继电器
}

P3,应该是8个引脚的接口。
P3=0,8个脚,都输出0;
P3=1,8个脚,只有P3.0输出1。

老徐回答的很好呀!

51单片机C语言简单程序问题请教:~

由于看不到硬件电路,以下以推测为前提。
首次:没有看到按键去抖动程序。这是不合理的,按键的识别是需要去抖动的。机械式按键,或者说机械式的开关都需要去抖动的程序。通过硬件的方法当然可以去抖动,但是如果想程序稳定可靠,这个还是不能少的。
其次:定时器初始化程序缺少相关的变量的初始化,num可能没有被清零。如果按键抖动被程序认为是多次真正的按键,这就很可怕了。比如某一次抖动启动了定时器,可是不符合下一条if语句,程序直接跳出了。但是下一次符合if语句的情况发生时,num已经不是0了。这次的结果就有可能造成了你所描述的情况。
总的来说,想法的大思路是可以的,但是要注意细节。比如:定时器初始化位置不对,这条语句不应该在这个位置,它应该在按键按下处理的语句之后,前面加判断while(XXX),括号内的请自己思考。定时器的寄存器赋值不应该存在计算,这会给你的延时时间计算造成很大的麻烦。其他的细节就不多说了。
这样过的程序写法对于初学者来说,是可以的。但是如果你想把这个东西做好,做到稳定可靠的运行,不能这样写。这样的程序,只能是“有时候好用”,换个说法就是“有时候不好用”。具体该怎么做,就是你需要去学习的。

一帧一帧的收发数据,一般无校验,有校验的话要选择9位数据模式,用TB8,和RB8,自己送校验位,每帧都校验。

请教有关单片机的三个简单问题
答:有的多 指令也是一样的啊 有的一个字节 有的两个 有的三个 3、对于这个问题我曾经学微机原理的时候也有过类似的感受 你只有理解了这条指令的使用方法 至于分类没必要完全按照书上的来 因为你是你自己 不可能所有的思想都和作者相同 最后 看得出你学习很用心 很细心的 加油 ...

求教一个简单单片机程序
答:问题:1,void main(void){ led = 0x00;//这是要让led亮还是灭?如果是灭,那么led是共阴连接,52单片机的准双向IO根本没有那么大的拉电流去驱动led,除非你用的是能将IO配置成推挽输出的52单片机,否则led将一直是灭着的。open = 1;//这是P0口的,有内部上拉或外部上拉电阻吗?如果没有,...

一个只有8行的51单片机程序,遇到问题想请教下。
答:末尾端加个while(1);不然程序会一直往下跑直到地址寄存器溢出。然后程序地址归零,就相当于复位了。也就是你这个程序使劲在复位。P1^7的LED只是灭了P1=temp到溢出的周期,然后重新复位又全亮了所以会出现你说的这种情况。单片机内部有专门的位寻址区,用unsigned char bdata定义 例如 unsigned char b...

C与单片机的简单程序问题请教
答:你的程序有问题:1.else应该加一个花括号 2.P3指的是MCU的P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7这8个口。所以你写P3=1,表示P3.0=1 见下表。这个十进制数表示为1 P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 0 0 0 0 0 0 0 ...

单片机汇编语言的几个疑问
答:终极方法:分部仿真设断点甚至于单步执行。对一些外部输入可以采用到断电后修改寄存器数值的方法来模拟。当然最理想的情况是不用,只是初期恐怕是免不了的。比如对上面所说的C标志位问题,我个人当初几乎都是这样找出的问题 大的汇编程序的调试确实比较麻烦,首先要求你对软件流程很清晰,对单片机的运行模式...

关于简单单片机的程序请教
答:include<reg51.h> // 包含51单片机寄存器定义的头文件 sbit S1=P2^0; //将S1位定义为P1.4引脚 sbit S2=P2^1; //将S1位定义为P1.4引脚 sbit S3=P2^2; //将S1位定义为P1.4引脚 sbit S4=P2^3; //将S1位定义为P1.4引脚 sbit LED0=P3^3; //将LED0位定义...

8051单片机的汇编程序编程问题!!!
答:既然向我求助,那我就写一下大概的思路和C语言程序,至于汇编语言,兄弟可自己由C语言翻译,我今天的确没太有时间.周期为2个ms的方波,也就是说半个周期为1ms,也就是说,P1.2每1ms翻转一次;同理,P1.3每3.5ms翻转一次,因为只能用一个定时器,所以,取1ms和3.5ms的最大公约数,是0.5ms,也就是说,...

单片机C程序的问题
答:/// 另外continue语句供你参考:continue;其语义是:结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环条件的判断与执行。应注意的是, 本语句只结束本层本次的循环,并不跳出循环。既,如果P1.4~1.5键都不按,后面的语句就不执行了,而不是没有延时。

关于51单片机的几个问题: 经过一段时间的学习,对单片机有了初步的认...
答:AT89C52和STC89C52rc除了厂商以外在编程时都是一样的,不用特别的在意,就是烧写程序的方式不同?stc89c52rc的rc好像是贴片单片机吧!其实你只要知道怎么用就行了,只要把单片机玩转了就行了,管那么多干嘛!精力也不够,用到什么学什么,因为要学的东西太多,合理分配!本人谈不上高手,只是略懂,就当...

请教一个单片机程序的小问题
答:include<reg51.h> // 试试#define uchar unsigned charuchar aa;sbit key10 = P3^2; // asbit key11 = P3^3; // bbit bdata tt0,tt1,tt2; // 标志位uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d...