初级会员
- 积分
- 72
- 金钱
- 72
- 注册时间
- 2014-3-11
- 在线时间
- 14 小时
|
1金钱
51单片机系统,我这个是用到车上的,车上供电是12V,车上有车载电脑,供电也是车载电脑的USB,通信也是这个USB。做的一个刷卡计时系统,刷卡后上位机发一个1,继电器动作,车可以打火,当时间走完,上位机发一个0,继电器断开,车熄火。就这样一个系统,但用着用着就死机了,单片机死机,用串口调试工具发数据也不好用了。我之前用AVR单片机做的没什么问题,一直好用,下面我把原理图还有程序展示出来,系统大家给我提点意见,谢谢。
1、原理图
[img]file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\765605164\QQ\WinTemp\RichOle\UUGOB$[DH6F3B4NHU5XM}M5.png[/img]
2、程序
#include <reg52.h> //包括一个52标准内核的头文件
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
uchar flag=0,temp=0;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main(void) // 主程序
{
P0=0X00;
REN=1;
TMOD=0x20; //定时器1,16位工作方式
TH1=0XFD;
TL1=0XFD;
TR1=1; //启动定时器1
PCON=0X00; //SMOD=0
SCON=0X50; //工作方式1,波特率9600,允许接收
ES=1; //串行口中断
EA=1; //打开总中断0
while(1) //程序循环
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=temp;
while(!TI);
TI=0;
ES=1;
}
}
}
//接收中断函数
void ser() interrupt 4
{
RI=0;
temp=SBUF;
flag=1;
if(temp==1) //收到数值为1,P0口输出高,继电器闭合。
P0=0XFF;
if(temp==0)//收到数值为0,P0口输出低,继电器断开。
P0=0X00;
}
file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\765605164\QQ\WinTemp\RichOle\0(SSG8Q%EUWQN6H]2F3L4FC.png
|
-
-
|