⑴ 单片机led显示仿真一切正常,烧录后显示不正常,干扰严重
"电磁阀断开" 这个出现概率比较大。
电磁阀 打开和关闭的瞬间电流发生变换(和干扰)导致。。
另外如果你后面用164驱动的话。。点数码管的时候没有进行 电磁阀操作
仿真器调试的时候 正常。。
那么最有可能的只有三点。
1.你单片机的晶振可以没弄好,单片机不工作,一般的仿真器都是直接带晶振的
如果有的话 。你可以在仿真器设置中巴 晶振用线路板上的晶振。
这个方便测试。。
2.就是你单片机电源本身就有问题。。导致你的单片机根本没有工作
3. 如果是51单片机的话。。单片机有一个外扩存储器端口选择端
那个端口一定要接好。。具体引脚名字你自己看pdf
这个在仿真的时候一般不会起作用的。所以仿真不出来
单片机的工作频率一般都不高emc这种的,基本可以排除的。。
补充:
如果你的蜂鸣器完全按照你的预想的结果的话(没有频繁 ,叫等情况)
至少说明你的晶振是没有问题。。而且电源基本正常
你仿真的时候管子能亮。
那就说明板子有问题。。最有可能就是。51选择外部存储器那个引脚没有上拉或者下拉。你查看一下pdf。。第几脚忘了。
////////////////////////////////////////////////////
PSEN为程序存取器选择端,高电平,程序从内部执行,就是单片机内部的程序存储器有效,接低电平,程序从外面扩展的ROM开始执行。
⑵ 单片机C语言定时中断程序设计,在线等
1,13位模式就是TOMD=0x00,不是TOMD=0x01(16位),
2,TR0=1 后,程序在往下走,定时器也在走,当中断来了后,中断,然后返回断点,不一定是TR0=1,
你的程序有漏洞,应在中断中,做一标志,如flag=1;
void Tim() interrupt 1
{
flag=1;
TR0=0;
sound=!sound; //将P3.7引脚输出电平取反,形成方波
TH0=(x-C)/y; //可证明这是13位计数器TH0高8位的赋初值方法
TL0=(x-C)%y; //可证明这是13位计数器TL0低5位的赋初值方法
}
while(1) //无限循环
{
while(f[i]!=0xff) //只要没有读到结束标志就继续播放
{
C=500000/f[i];
TH0=(x-C)/y; //可证明这是13位计数器TH0高8位的赋初值方法
TL0=(x-C)%y; //可证明这是13位计数器TL0低5位的赋初值方法
if(flag==1)
{
flag=0;
for(j=0;j<JP[i];j++) //控制节拍数
delay(); //延时1个节拍单位
i++; //播放下一个音符
TR0=1; //启动定时器T0
}
}
}
}
⑶ 用proteus进行51单片机仿真的问题。
要看你动态先使用的是什么程序,可能延时有问题,不能太短,你可以把你的程序给我看一下。我这有一个动态显示的程序仿真是正确的,你可以对比一下。
#include <REG51.H>
unsigned char code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*===================================*/
void delay(unsigned int k);
//-----------------------------------------------------------
void main(void)
{
unsigned char val1=0;
long i;
char min=0;
while(1)
{
for(i=0;i<50;i++)
{
P2=0xfe;
P1= SEG7[val1%10];
delay(1);
P2=0xfd;
P1= SEG7[val1/10];
delay(1);
P2=0xfb;
P1= SEG7[min%10];
delay(1);
P2=0xf7;
P1= SEG7[min/10];
delay(1);
}
val1=val1+1;
/*if(val1>59)
val1=0; */
if(val1>59)
{
min++;
val1=0;
}
if(min>59)
min=0;
}
}
//----------------------------------------------------
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++)
;
}
}/*四位数码管实现分秒定时
⑷ RS232串口中利用P3.0和P3.1连接两台单片机,我只是隐约知道是这样连接求大神
串口主要用到两个引脚
RX和TX
R代表接收Recieve,T代表发送Transent
所以两个串口互联的时候
R和T要互换
单片机1的RX连接单片机2的TX
单片机1的TX连接单片机2的RX
最后两个单片机共地即可。
⑸ 懂单片机的进来
for(count=0;count<10000;count++)
{
unsigned int a,b,c,d;
a=count%10;
b=count/10%10;
c=count/100%10;
d=count/1000;
for(i=50;i>0;i--)
{
P0=table[a]; //注意位置
P2_3=0; //可能有关
delay();
P2_3=1;
动态扫描法中,数码管个数,扫描频率对其都有影响。
以上只是提高了一些程序运行效率,因为像取余似的运算是很耗时的。
当然如果你再想想,上面计算abcd的方法还可以进一步优化。
你也可以试试调整一下delay时间
另外,在硬件方面的一点建议就是,由于数码管过多,可以加锁存器解决。
或者直接使用数码管驱动芯片,效果更好,例如 MAX7219 等等。
另外,另外,汇编都写出来了,你基础不错啊
⑹ 51单片机 1602液晶初始化为什么要设置4次显示设置
写多少次不是单片机或者C语言决定的,是由液晶屏的资料决定的,液晶屏内部也有一个MCU控制,它的操作指令是出厂就定好了的,不同厂家的屏它的指令也可能会不一样。
⑺ 哈佛结构是不是比冯诺依曼结构要好
哈佛结构和冯诺依曼结构各有好处,相对于冯诺依曼结构,哈佛结构更可靠,更加适合于那些程序固化、任务相对简单的控制系统,哈佛结构的微处理器也相对更高效。
不过在通用计算机系统中,应用软件的多样性使得计算机要不断地变化所执行的代码的内容,并且频繁地对数据与代码占有的存储器进行重新分配,这种情况下,冯诺依曼结构占有绝对优势,因为统一编址可以最大限度地利用资源。
而哈佛结构的计算机若应用于这种情形下则会对存储器资源产生理论上最大可达50%的浪费,这显然是不合理的。
⑻ 请问如何自己焊接单片机电路板
学习单片机是需要买挺多元件的。
1、注意电解电容、发光二极管、蜂鸣器的正负极性不能接反、三者均是长的管脚接正极、短的管脚接负极,如接反轻则烧毁元气件,重则发生轻微爆炸。
2、三极管9015的E、B、C、注意接法,板子上面有相应的图形形状。按照那个图形焊接。
3、焊接元气件的过程之中焊接时间应在2-4秒。焊接时间不宜过长,否则不仅会烧毁元气件、而且易使焊点容易脆裂。
4、电阻焊接过程中注意相应的阻值对应,不要焊错。否则影响相应的电流大小。
5、排阻焊接过程之中、RP1、RP2、RP3、有公共端应该接VCC、其余管脚为相应的独立端、排阻焊接过程之中用万用表测量各排阻的阻值、对照说明书焊接相应的排阻。
(8)单片机隐约扩展阅读:
器件的封装引脚与内核电路引线的连接处处理,电路的半导体材质特性以及器件的封装材质都会影响其高温焊接时的耐受度,具体讲来一篇论文都说不完。
从经验上说,如果使用的是非高温的铅锡合金焊锡,熔化温度在300度以下,那么焊接时当观察到焊锡在焊点充分熔化后,应该在5秒内完成焊接动作。
器件是不会因为这几秒的高温而损坏的。 如果一定要挑选烙铁的功率,宁可选择功率大的烙铁,因为烙铁头升温更快,那样反而不容易因为长时间加热焊点而造成器件损坏。
⑼ 为什么按这个电路连线,刚想连上电机,隐约听到直流电机一声,然后单片机就烧了。程序都下不进了。
电机的驱动应该是12V的,但是你的泄放回路却接到了5V上面。电机一转,停下的瞬间反冲电压就可能把单片机搞死。还有你的二极管怎么接的,没有连接点啊。