❶ 52單片機rfid原理
射頻識別識別系統原理。52單片機是對兼容英特爾8052指令系統的單片機的統稱,其rfid工作是電子標簽可以接收到讀寫器發出的射頻信號,憑借感應電流產生的能量來進行發送,其是屬於使用射頻識別識別系統原理進行的。52單片機廣泛應用於家用電器、汽車、工業測控、通信設備中。
❷ 52單片機能做什麼
可以根據你自己編輯的程序運行!玩的話可以做智能小車,用手機藍牙或電腦藍牙控制。有WIFI接收模塊也可以用WIFI控制。機器人也行。也能做家庭智能控制方面的東西 比如定時開關,或在燈的開關上加感應器和單片機配合,觀賞方面的比如光立方!等等 單片機能做的事太多了,列舉不完。再比如家電,什麼智能洗衣機啊!微波爐啊,電磁爐啊,空調啊。都要用到單片機,這些工作52絕對能勝任
❸ 52單片機能做什麼
可以根據你自己編輯的程序運行!玩的話可以做智能小車,用手機藍牙或電腦藍牙控制。有WIFI接收模塊也可以用WIFI控制。機器人也行。也能做家庭智能控制方面的東西
比如定時開關,或在燈的開關上加感應器和單片機配合,觀賞方面的比如光立方!等等
單片機能做的事太多了,列舉不完。再比如家電,什麼智能洗衣機啊!微波爐啊,電磁爐啊,空調啊。都要用到單片機,這些工作52絕對能勝任
❹ 基於MCS 52系列的單片機有哪些其硬體設計相對於51系列有哪些不同啊
52是在51基礎上衍生出來的增強產品。主要差別在
1、內部ROM增加了4K,總計8K,相應的如果外擴程序存儲器,則從2000H開始從外部取指。
2、增加了128位元組的內部RAM,地址從80H到FFH。使用時這128位元組地址因為與特殊功能寄存器地址重疊,所以只能採用簡介定址的方式讀寫。
3、增加了定時器2,而且該定時器也可用作波特率發生器,具備16位自動重裝載和捕獲能力。
4、相應的增加了定時器2中斷。
5、增加了有關定時器2的特殊功能寄存器T2MOD、T2CON、RCAP2L、RCAP2H、TH2、TL2等,還有諸如T2、ET2等控制位
其它方面均與51一致。
其實現在51系列的增強型CPU很多,而且各生產廠家各有增強特色,不過一般而言均由其內部ROM大小而命名:
51:4K
52:8K
53:12K
54:16K
58:32K
516:64K
後4種其實都具備52的功能,換句話說其實52事實上已經變成了MCS51的標准。當然諸如IAP、ISP、A/D等增強部分各型號產品不一樣,需要對照具體型號的DATASHEET來確認。
至於52的基本資料,北京航空航天大學出版社大概在80年代末出版過一本《MCS51、96系列單片機原理及應用》,32開的小書,你可查一下,我自己的書皮都掉了,不知道是誰寫的。由於相對而言定時器2增加了不少內容,確實需要系統的看一下。
❺ 基於52單片機ISD1760語音晶元的原理圖和程序代碼。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
//******************定義埠******************//
sbit SS = P1^0;
sbit SCK = P1^1;
sbit MOSI = P1^2;
sbit MISO = P1^3;
sbit PR = P1^4;//PLAY = 0;REC = 1;
sbit STOP = P1^5;
sbit AN = P1^6;
sbit LED = P1^7;
//******************定義ISD1700狀態寄存器及各標志位******************//
uchar bdata SR0_L;//SR0寄存器低位、高位
uchar bdata SR0_H;
uchar bdata SR1;//SR1寄存器
uchar APC_L = 0, APC_H = 0;//APC寄存器
uchar PLAYADDL = 0, PLAYADDH = 0;//放音指針低位、高位
uchar RECADDL = 0, RECADDH = 0;//錄音指針低位、高位
sbit CMD_ERR = SR0_L^0;//SPI指令無效標志位
sbit FULL = SR0_L^1;//晶元存儲空間滿標志位
sbit PU = SR0_L^2;//上電標志位
sbit EOM = SR0_L^3;//EOM標志位
sbit INT = SR0_L^4;//操作完成標志位
sbit RDY = SR1^0;//晶元空閑標志位
sbit ERASE = SR1^1;//擦除標志位
sbit PLAY = SR1^2;//放音標志位
sbit REC = SR1^3;//錄音標志位
//******************定義標志位******************//
uchar bdata fang;
sbit PR_fang = fang^1;//錄音、放音標志位,放音=0,錄音=1
sbit Erase_fang = fang^4;//擦出標志位
sbit STOP_fang = fang^7;//停止放音標志位
//******************延時μs******************//
void delay(uint time)//延時n微秒
{
while(time!=0)
{
time--;
}
}
//******************延時ms******************//
void delayms(uint time)//延時n毫秒
{
for(time; time>0; time--)
{
TH0 = 0xfc;
TL0 = 0x18;
TR0 = 1;//計數器0啟動
while(TF0!=1);//計數溢出處理
TF0 = 0;
TR0 = 0;
}
}
//******************CPU初始化******************//
void cpu_init (void)
{
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
TMOD = 0x01;//定時器初始化,工作於方式1
EA = 0;//關中斷
fang = 0;//標志位歸0
LED = 1;//關指示燈
}
//******************發送、讀回數據******************//
uchar isd_senddata (uchar dat)
{
uchar i, BUF_ISD = dat;
SS = 0;
SCK = 1;
delay(4);
for(i=0; i<8; i++)
{
SCK = 0;
if((BUF_ISD&0x01)==1)
{
MOSI = 1;
}
else
{
MOSI = 0;
}
BUF_ISD = BUF_ISD >> 1;
if(MISO)
{
BUF_ISD = BUF_ISD|0x80;
}
SCK = 1;
delay(6);
}
MOSI = 0;
return(BUF_ISD);
}
//******************上電******************//
void isd_pu (void)
{
isd_senddata (0x01);
isd_senddata (0x00);
SS = 1;
delayms(50);
}
//******************停止當前操作******************//
void isd_stop (void)
{
isd_senddata (0x02);
isd_senddata (0x00);
SS = 1;
delayms(50);
}
//******************復位******************//
void isd_reset (void)
{
isd_senddata (0x03);
isd_senddata (0x00);
SS = 1;
}
//******************清除中斷******************//
void isd_clr_int (void)
{
isd_senddata (0x04);
isd_senddata (0x00);
SS = 1;
}
//******************讀狀態寄存器內容******************//
void isd_rd_status (void)
{
isd_senddata (0x05);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x05);
SR0_H = isd_senddata (0x00);
SR1 = isd_senddata (0x00);
SS = 1;
}
//******************讀放音指針******************//
void isd_rd_playptr (void)
{
isd_senddata (0x06);
isd_senddata (0x00);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x06);
SR0_H = isd_senddata (0x00);
PLAYADDL = isd_senddata (0x00);
PLAYADDH = isd_senddata (0x00);
SS = 1;
}
//******************下電******************//
void isd_pd (void)
{
isd_senddata (0x07);
isd_senddata (0x00);
SS = 1;
delayms(50);
}
//******************讀錄音指針******************//
void isd_rd_recptr (void)
{
isd_senddata (0x08);
isd_senddata (0x00);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x08);
SR0_H = isd_senddata (0x00);
RECADDL = isd_senddata (0x00);
RECADDH = isd_senddata (0x00);
SS = 1;
}
//******************讀晶元ID******************//
uchar isd_devid (uchar deviceNO)
{
isd_senddata (0x09);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
isd_senddata (0x09);
isd_senddata (0x00);
deviceNO = isd_senddata (0x00);
SS = 1;
return(deviceNO);
}
//******************放音******************//
void isd_play (void)
{
isd_senddata (0x40);
isd_senddata (0x00);
SS = 1;
}
//******************錄音******************//
void isd_rec (void)
{
isd_senddata (0x41);
isd_senddata (0x00);
SS = 1;
}
//******************擦除******************//
void isd_erase (void)
{
isd_senddata (0x42);
isd_senddata (0x00);
SS = 1;
}
//******************全部擦出******************//
void isd_g_erase (void)
{
isd_senddata (0x43);
isd_senddata (0x00);
SS = 1;
}
//******************讀APC寄存器內容******************//
void isd_rd_apc (void)
{
isd_senddata (0x44);
isd_senddata (0x00);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x44);
SR0_H = isd_senddata (0x00);
APC_L = isd_senddata (0x00);
APC_H = isd_senddata (0x00);
SS = 1;
}
//******************寫APC寄存器******************//
void isd_wr_apc2 (uchar apcdatl,apcdath)
{
isd_senddata (0x65);
isd_senddata (apcdatl);
isd_senddata (apcdath);
SS = 1;
}
//******************將APC寄存器內容寫入NVCFG******************//
void isd_wr_nvcfg (uchar apcdatl,apcdath)
{
isd_senddata (0x46);
isd_senddata (apcdatl);
isd_senddata (apcdath);
SS = 1;
}
//******************將NVCFG內容寫入APC******************//
void isd_ld_nvcfg (void)
{
isd_senddata (0x47);
isd_senddata (0x00);
SS = 1;
}
//******************快進******************//
void isd_fwd (void)
{
isd_senddata (0x48);
isd_senddata (0x00);
SS = 1;
}
//******************空檢查******************//
void isd_chk_mem (void)
{
isd_senddata (0x49);
isd_senddata (0x00);
SS = 1;
}
//******************外部時鍾的啟用、關閉******************//
void isd_extclk (void)
{
isd_senddata (0x4a);
isd_senddata (0x00);
SS = 1;
}
//******************指定地址放音******************//
void isd_set_play (uchar saddl,saddh,eaddl,eaddh)
{
isd_senddata (0x80);
isd_senddata (0x00);
isd_senddata (saddl);
isd_senddata (saddh);
isd_senddata (eaddl);
isd_senddata (eaddh);
isd_senddata (0x00);
SS = 1;
}
//******************指定地址錄音******************//
void isd_set_rec (uchar saddl,saddh,eaddl,eaddh)
{
isd_senddata (0x81);
isd_senddata (0x00);
isd_senddata (saddl);
isd_senddata (saddh);
isd_senddata (eaddl);
isd_senddata (eaddh);
isd_senddata (0x00);
SS = 1;
}
//******************指定地址擦除******************//
void isd_set_erase (uchar saddl,saddh,eaddl,eaddh)
{
isd_senddata (0x82);
isd_senddata (0x00);
isd_senddata (saddl);
isd_senddata (saddh);
isd_senddata (eaddl);
isd_senddata (eaddh);
isd_senddata (0x00);
SS = 1;
}
//******************晶元系統初始化******************//
void isd_init (void)
{
uchar i = 2;
SS = 1;
SCK = 1;
MOSI = 0;
do
{
isd_pu ();
isd_rd_status ();
}while(CMD_ERR||(!PU));
isd_wr_apc2 (0x40,0x04);
do
{
isd_rd_status ();
}while(RDY==0);
do
{
LED = 0;
delayms(300);
LED = 1;
delayms(300);
i--;
}while(i>0);
}
//******************isd1700的相關操作******************//
void isdwork (void)
{
uchar i;
switch (fang)
{
case 0x00:
{
do
{
isd_rd_status ();
}while(RDY==0);
delayms(10);
isd_play ();
delayms(2);
LED = 0;
do
{
isd_rd_status ();
if(STOP==0)
{
delayms (10);
if(STOP==0)
{
LED = 1;
isd_clr_int ();
isd_stop ();
isd_reset ();
isd_pd ();
isd_init ();
return;
}
}
}while(PLAY==1);
LED = 1;
isd_clr_int ();
do
{
isd_rd_status ();
}while(RDY==0);
delayms (10);
isd_fwd ();
do
{
isd_rd_status ();
}while(RDY==0);
}
break;
case 0x02:
{
isd_clr_int ();
do
{
isd_rd_status ();
}while(RDY==0);
delayms(10);
isd_rec ();
delayms(2);
LED = 0;
do
{
isd_rd_status ();
if(FULL==1)
{
for(i=3; i>0; i--)
{
LED = 0;
delayms (300);
LED = 1;
delayms (200);
}
}
}while(AN==0);
isd_clr_int ();
isd_stop ();
LED = 1;
}
break;
case 0x10:
{
do
{
isd_rd_status ();
}while(RDY==0);
delayms (10);
isd_g_erase ();
delayms (2);
do
{
isd_rd_status ();
}while(RDY==0);
for(i=3; i>0; i--)
{
LED = 0;
delayms (300);
LED = 1;
delayms (200);
}
}
break;
case 0x80:
{
isd_clr_int ();
isd_stop ();
isd_reset ();
isd_pd ();
}
break;
}
}
//******************主程序******************//
void main (void)
{
uchar i;
cpu_init ();
delayms (1);
isd_init ();
while(1)
{
if(AN==0)
{
delayms (10);
if(AN==0)
{
if(PR==1)
{
PR_fang = 1;
}
else
{
PR_fang = 0;
}
isdwork ();
}
}
if(STOP==0)
{
delayms (10);
if(STOP==0)
{
for(i=100; i>0; i--)
{
if(STOP==1)
{
STOP_fang = 1;
isdwork ();
isd_init ();
break;
}
delayms(30);
}
if (STOP_fang==1)
{
fang = 0;
continue;
}
Erase_fang = 1;
isdwork ();
}
}
}
}
這個是按鍵錄放的常式,你可以根據這個常式自己修改一下