本帖最后由 rester 于 2017-12-1 18:48 編輯
本人也是業(yè)余愛好, 得一門禁成品機 里面芯片用的是STC的,讀卡是358放大 直接進 芯片解碼 沒有讀卡芯片 硬件一切正常 芯片是STC 10F12XE的
各個IO功能都有定義, 程序的 125K方波輸出 是完全正常的,示波器觀察的,我的思路是通過 定時器1延時 256微秒 來讀卡 。曼徹斯特碼分解后的128 數(shù)據(jù) 分16組8位 通過串口發(fā)送到電腦,串口通訊 設置也正常,可正常接收數(shù)據(jù) ,問題是 為啥我接收的數(shù)據(jù)是亂碼 沒有規(guī)律呢, 按道理講 接收到的應該是16組 一樣的數(shù)據(jù), 晶振是24M的。附送 圖紙一張 圖紙是工廠內(nèi)部批量生產(chǎn)的 很成熟的方案
#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;//串口中斷 最優(yōu)先
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;}
}
|