本帖最后由 rester 于 2017-12-1 18:48 编辑
本人也是业余爱好, 得一门禁成品机 里面芯片用的是STC的,读卡是358放大 直接进 芯片解码 没有读卡芯片 硬件一切正常 芯片是STC 10F12XE的
各个IO功能都有定义, 程序的 125K方波输出 是完全正常的,示波器观察的,我的思路是通过 定时器1延时 256微秒 来读卡 。曼彻斯特码分解后的128 数据 分16组8位 通过串口发送到电脑,串口通讯 设置也正常,可正常接收数据 ,问题是 为啥我接收的数据是乱码 没有规律呢, 按道理讲 接收到的应该是16组 一样的数据, 晶振是24M的。附送 图纸一张 图纸是工厂内部批量生产的 很成熟的方案
#include<stc10f.h>
#include<intrins.h>
#define fm P0
sbit btn=P1^6; //出门按钮
sbit gled=P1^5; //绿灯
sbit rled=P1^4; //红灯
sbit jdq=P1^3; // 继电器 输出
sbit jiance=P4^1; //按键检测
sbit ky0=P0^4; //按键
sbit ky1=P0^5; //按键
sbit ky2=P0^6; //按键
sbit ky3=P0^7; //按键
sbit out=P3^4; // 125k 方波输出
sbit js=P3^5; //读卡入口
unsigned char a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,cc;
bit k;
unsigned char a,b,jss;
unsigned char sju[35];
void ys1() ;
void ys(unsigned int z);
void main()
{ a1=a2=a3=a4=a5=a6=a7=a8=a9=a10=a11=a12=a13=a14=a15=a16=a17=0; k=0;
jiance=1; fm=0xff; rled=1;gled=1; jdq=0; jss=0; a=0; b=0;
P1M1=0X00;P1M0=0X08; //P1.3设置强推大电流模式
P3M1=0X00; P3M0=0X10; //P3.4
EA=1; REN=1; ES=1; SCON=0X50; PCON = 0x00;
BRT=0XB2;//独立波特率9600初值
// PT1=1;//串口中断 最优先
AUXR =0x95;//1T 0x80 独立波特率 1T模式
WAKE_CLKO=0x01;//t0 输出允许位 //T0CLKO=1;
TMOD=0x12;
TR0=1; TH0=TL0=0XA0; //输出频率设定
// sju[33]=0x16; sju[34]=0x17;sju[35]=0x18;
TH1=(65536-512)/256;
TL1=(65536-512)%256; // sju[1]=0x00; sju[2]=0x11;sju[3]=0x22;
// sju[4]=0x33; sju[5]=0x44;sju[6]=0x55;
//sju[7]=0x66; sju[8]=0x77;sju[9]=0x88;
ET1=1;
while(1)
{
if(js==1){ys1();
if(js==1&&a1==0){TR1=1;sju[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]=0;
}
}
if(a1==16){TR1=0;jss=0;a=0;}
if(a1==16&&TR1==0)
{
for(a3=0;a3<16;a3++){SBUF=sju[a3];while (TI==0);TI=0;}a1=0;a=0;TR1=0; }
}
}
void ys(unsigned int z)
{ unsigned int e ,f;
for(e=z;e>0;e--)
for(f=1000;f>0;f--);
}
void ys1() //@24.000MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 5;
j = 160;
do
{
while (--j);
} while (--i);
}
void zd() interrupt 3
{
TH1=(65536-512)/256;
TL1=(65536-512)%256;
ys1();
if(js==1){jss<<=1;jss++;a++;} else {jss<<=1;a++;}
if (a==8){sju[a1]=jss;a1++;a=0;jss=0;}
if(a1==16){TR1=0;jss=0;a=0;}
}
void chuangkou()interrupt 4
{
// RI=0; // while (TI==0);TI=0;
//if(RI==1){RI=0;}
// if(TI==1) {TI=0;}
}
|