導航:首頁 > 操作系統 > 單片機CHK埠

單片機CHK埠

發布時間:2022-10-15 18:43:10

1. 求控制ISD1820的stc89c52單片機程序

#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
//******************定義埠******************//
sbitSS=P1^0;
sbitSCK=P1^1;
sbitMOSI=P1^2;
sbitMISO=P1^3;
sbitPR=P1^4;//PLAY=0;REC=1;
sbitSTOP=P1^5;
sbitAN=P1^6;
sbitLED=P1^7;
//******************定義ISD1700狀態寄存器及各標志位******************//
ucharbdataSR0_L;//SR0寄存器低位、高位
ucharbdataSR0_H;
ucharbdataSR1;//SR1寄存器
ucharAPC_L=0,APC_H=0;//APC寄存器
ucharPLAYADDL=0,PLAYADDH=0;//放音指針低位、高位
ucharRECADDL=0,RECADDH=0;//錄音指針低位、高位

sbitCMD_ERR=SR0_L^0;//SPI指令無效標志位
sbitFULL=SR0_L^1;//晶元存儲空間滿標志位
sbitPU=SR0_L^2;//上電標志位
sbitEOM=SR0_L^3;//EOM標志位
sbitINT=SR0_L^4;//操作完成標志位
sbitRDY=SR1^0;//晶元空閑標志位
sbitERASE=SR1^1;//擦除標志位
sbitPLAY=SR1^2;//放音標志位
sbitREC=SR1^3;//錄音標志位
//******************定義標志位******************//
ucharbdatafang;
sbitPR_fang=fang^1;//錄音、放音標志位,放音=0,錄音=1
sbitErase_fang=fang^4;//擦出標志位
sbitSTOP_fang=fang^7;//停止放音標志位
//******************延時μs******************//
voiddelay(uinttime)//延時n微秒
{
while(time!=0)
{
time--;
}
}
//******************延時ms******************//
voiddelayms(uinttime)//延時n毫秒
{
for(time;time>0;time--)
{
TH0=0xfc;
TL0=0x18;
TR0=1;//計數器0啟動
while(TF0!=1);//計數溢出處理
TF0=0;
TR0=0;
}
}
//******************CPU初始化******************//
voidcpu_init(void)
{
P1=0xFF;
P2=0xFF;
P3=0xFF;
TMOD=0x01;//定時器初始化,工作於方式1
EA=0;//關中斷
fang=0;//標志位歸0
LED=1;//關指示燈
}
//******************發送、讀回數據******************//
ucharisd_senddata(uchardat)
{
uchari,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);
}
//******************上電******************//
voidisd_pu(void)
{
isd_senddata(0x01);
isd_senddata(0x00);
SS=1;
delayms(50);
}
//******************停止當前操作******************//
voidisd_stop(void)
{
isd_senddata(0x02);
isd_senddata(0x00);
SS=1;
delayms(50);
}
//******************復位******************//
voidisd_reset(void)
{
isd_senddata(0x03);
isd_senddata(0x00);
SS=1;
}
//******************清除中斷******************//
voidisd_clr_int(void)
{
isd_senddata(0x04);
isd_senddata(0x00);
SS=1;
}
//******************讀狀態寄存器內容******************//
voidisd_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;
}
//******************讀放音指針******************//
voidisd_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;
}
//******************下電******************//
voidisd_pd(void)
{
isd_senddata(0x07);
isd_senddata(0x00);
SS=1;
delayms(50);
}
//******************讀錄音指針******************//
voidisd_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******************//
ucharisd_devid(uchardeviceNO)
{
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);
}
//******************放音******************//
voidisd_play(void)
{
isd_senddata(0x40);
isd_senddata(0x00);
SS=1;
}
//******************錄音******************//
voidisd_rec(void)
{
isd_senddata(0x41);
isd_senddata(0x00);
SS=1;
}
//******************擦除******************//
voidisd_erase(void)
{
isd_senddata(0x42);
isd_senddata(0x00);
SS=1;
}
//******************全部擦出******************//
voidisd_g_erase(void)
{
isd_senddata(0x43);
isd_senddata(0x00);
SS=1;
}
//******************讀APC寄存器內容******************//
voidisd_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寄存器******************//
voidisd_wr_apc2(ucharapcdatl,apcdath)
{
isd_senddata(0x65);
isd_senddata(apcdatl);
isd_senddata(apcdath);
SS=1;
}
//******************將APC寄存器內容寫入NVCFG******************//
voidisd_wr_nvcfg(ucharapcdatl,apcdath)
{
isd_senddata(0x46);
isd_senddata(apcdatl);
isd_senddata(apcdath);
SS=1;
}
//******************將NVCFG內容寫入APC******************//
voidisd_ld_nvcfg(void)
{
isd_senddata(0x47);
isd_senddata(0x00);
SS=1;
}
//******************快進******************//
voidisd_fwd(void)
{
isd_senddata(0x48);
isd_senddata(0x00);
SS=1;
}
//******************空檢查******************//
voidisd_chk_mem(void)
{
isd_senddata(0x49);
isd_senddata(0x00);
SS=1;
}
//******************外部時鍾的啟用、關閉******************//
voidisd_extclk(void)
{
isd_senddata(0x4a);
isd_senddata(0x00);
SS=1;
}
//******************指定地址放音******************//
voidisd_set_play(ucharsaddl,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;
}
//******************指定地址錄音******************//
voidisd_set_rec(ucharsaddl,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;
}
//******************指定地址擦除******************//
voidisd_set_erase(ucharsaddl,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;
}
//******************晶元系統初始化******************//
voidisd_init(void)
{
uchari=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的相關操作******************//
voidisdwork(void)
{
uchari;
switch(fang)
{
case0x00:
{
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;
case0x02:
{
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;
case0x10:
{
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;
case0x80:
{
isd_clr_int();
isd_stop();
isd_reset();
isd_pd();
}
break;
}
}
//******************主程序******************//
voidmain(void)
{
uchari;
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();
}
}
}
}

2. 51單片機編寫lcd1602顯示程序,第一行顯示自己的姓名,第二行顯示學號

1、首先我們打開Keil μVision編譯器,新建一個工程,然後保存在硬碟上的位置,然後選擇Atmel-AT89C51單片機為模型,並啟動器添加STARTUP.A51文件,然後在當前目錄下新建一個C文件,並將其添加入工作路徑。

3. 急,請教!請問AT89S52系列單片機C程序怎麼實現這種功能。

首先定義一個全局變數 什麼類型都可以 初始化為1 如 Int a=1;在你「動一下保護裝置的行程」的動作後肯定會調用行程函數,在行程函數里將這個全局變數a置0,然後下降按鈕動作後調用的函數前面加上判斷條件if(a),在上升按鈕的執行函數里加上 a=1;不就OK了么

4. 80C51單片機的STB埠和CHK埠是指哪一個啊

STB和CHK是信號狀態,你可以向兩個單片機的介面發送這些信號,然後通過中斷處理程序進行操作的

5. 怎樣用51單片機檢測頻率例如怎樣辨別頻率小於10Hz,怎樣有大於等於10Hz

方案1: 不用定時中斷,可以用定時器計數方式吧? 用外部中斷,測量下降沿(或上升沿)和下一個下降沿(或上升沿)之間的時間間隔(用定時器計數更精確,如果頻率很高也可以用軟體模擬的方式 做一個計數), 軟體結構:在下降沿中斷的同時,保存當前計數值,計數清零並重新啟動計數器(如上,既可以是定時器計數,也可以軟體計數), 算得計數的時間 + 中斷響應的時間 就是T(周期) 倒數 就是頻率了
方案2:做一個循環,每次判斷電平是否變化否則就 計數+1 如果跳變就保存計數值 做下一次准備 這樣測量的值是一個周期內的固定電平的寬度值,如果占空比不是50%或固定的話 就
方案3:改動下方案2,判斷的時候同時判斷是否由低變高這樣是測定一個周期
方案4:使用定時中斷,定時為1s,此時計算電平出現變化的次數(最好外部中斷計數,不影響其他操作),這樣算出的就是頻率值,也是最准確的一種測試方法。

6. 單片機CJNE A, 40H, CHK是什麼意思

拍片機上面的這個意思好像是型號不一樣,所以的話它的功能按鍵也是各不相同的。

閱讀全文

與單片機CHK埠相關的資料

熱點內容
鄧倫參加密室逃脫視頻 瀏覽:391
音頻壓縮編碼標准 瀏覽:300
常提到的app是表示什麼 瀏覽:261
天津程序員傳銷 瀏覽:349
下班之後的程序員 瀏覽:71
檢測支持ssl加密演算法 瀏覽:344
衢州發布新聞什麼APP 瀏覽:85
中國移動長沙dns伺服器地址 瀏覽:251
wifi密碼加密了怎麼破解嗎 瀏覽:598
linux命令cpu使用率 瀏覽:67
linux實用命令 瀏覽:240
傳奇引擎修改在線時間命令 瀏覽:109
php取域名中間 瀏覽:898
cad命令欄太小 瀏覽:830
php開發環境搭建eclipse 瀏覽:482
qt文件夾名稱大全 瀏覽:214
金山雲伺服器架構 瀏覽:232
安卓系統筆記本怎麼切換系統 瀏覽:622
u盤加密快2個小時還沒有搞完 瀏覽:94
小米有品商家版app叫什麼 瀏覽:95