首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

一个奇怪的有关问题,51单片机会自己复位么

2013-01-02 
一个奇怪的问题,51单片机会自己复位么?试验一个单片机串口和液晶显示屏通信的程序,单片机选用的89C58(没有

一个奇怪的问题,51单片机会自己复位么?
试验一个单片机串口和液晶显示屏通信的程序,单片机选用的89C58(没有程序跑飞后自动复位的功能),显示屏选用的河南友利华的YD711-ARMWH,标准RS232接口,12V供电,经询问技术人员,用3个引脚用来进行穿行通信,GND连接单片机的GND(此处5V与12V共地),DSR连接单片机的任意管脚作为单片机输入(显示屏有256字节的缓冲区,DSR为高电平表示缓冲区空,可以发送数据,低电平表示缓冲区满,要等待),RXD连接单片机的标准串行接口TXD,硬件上就这3根线连接(已和他们的技术人员确认),单片机除了晶振电路/复位电路外无别的连接。
程序大体如下,具体的在实验室电脑上不太记得了

#include<reg52.h>


#define uchar unsigned char;
#define uint unsigned int;


sbit DDTR=P1^0;//单片机管脚,连接液晶显示器的DSR
sbit P11=P1^1;//自己设置的管脚,用于示波器观测脉冲波形


void delay()//延时子程序,约50ms
{
XXXXX;
}

sendchar(uchar c)//RS232发送子程序
{
TI=0;//清发送中断
while(DDTR==0);//等待DDTR==1
SBUF=c;//把数据发送到缓冲区
while(TI==0);//等待发送完成
TI=0;//清发送中断
}

main()
{
XXXXXX;//初始化,串口,波特率设置等语句

P1=0X01;//使P1.0为输入
P11=0;
delay();
sendchar(0x1b);//往液晶显示屏送1b 4c 00,清显示屏为黑色
P11=1;
delay();
sendchar(0x4c);
P11=0;
delay();
senchar(0x00);
P11=1;
delay();
}

试验中发现,如果不加主程序中的3处sendchar语句,则程序正常执行,观测到p1.1的两次脉冲波形,结果和程序预期一样;如果加上sendchar,则p1.1表现为重复的脉冲波形,好像单片机复位后不断重新给p1.1赋值一样。p1.0一直为高电平,单片机的TXD管脚一直为低电平。观测reset管脚,上电均正常复位,上电后一直为低电平,VCC管脚的电压为4.1-5.9V,开始怀疑是毛刺太大导致复位,但如果不加sendchar语句,程序正常工作,排除了这种可能。

很奇怪,加上sendchar语句后,哪里影响导致了上述问题的出现?
[解决办法]
程序有看门狗 隔一段时间需要喂狗 或是关闭看门狗功能
[解决办法]
断开跟外部设备的引线试下,不要迷信别人的话
如果还是有问题把你的电源换成好点的,电源有问题的话可能会引起乱七八糟的很多问题
[解决办法]
89C58,PHILIPS公司 有看门狗的吧?
[解决办法]
异常了,也是有可能复位的。

电流过大了,也是可能的。
[解决办法]
1. 你的main函数里面没有主循环?还是你的代码不完整?如果什么都不干,至少要在结尾处加上while(1)
2. LCD模块的RS232通讯,你的板子必须要加232电平转换芯片。单片机与其他系统串口通讯加RS232芯片是常识。
3. 你模拟的串口加了电平装换芯片么?没加的话不会通讯成功。
4. 如果你的设置没问题。不用换T2试的。不会是定时器问题。

热点排行