欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 32786|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STC89C52RC單片機(jī)的特點(diǎn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:198176 發(fā)表于 2017-5-8 15:51 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
STC89C52RC 單片機(jī)介紹
      STC89C52RC 單片機(jī)是宏晶科技推出的新一代高速/低功耗/超強(qiáng)抗干擾的單 片機(jī),指令代碼完全兼容傳統(tǒng) 8051 單片機(jī),12 時(shí)鐘/機(jī)器周期和 6 時(shí)鐘/機(jī)器周 期可以任意選擇。
     主要特性如下:
         1. 增強(qiáng)型 8051 單片機(jī),6 時(shí)鐘/機(jī)器周期和 12 時(shí)鐘/機(jī)器周期可以任 意選擇,指令代碼完全兼容傳統(tǒng) 8051.
         2. 工作電壓:5.5V3.3V5V 單片機(jī))/3.8V2.0V3V 單片機(jī))
         3. 工作頻率范圍:040MHz,相當(dāng)于普通 8051 080MHz,實(shí)際工 作頻率可達(dá) 48MHz
         4. 用戶應(yīng)用程序空間為 8K 字節(jié)
         5. 片上集成 512 字節(jié) RAM
         6. 通用 I/O 口 (32 個(gè)) 復(fù)位后為: , P1/P2/P3/P4 是準(zhǔn)雙向口/弱上拉, P0 口是漏極開(kāi)路輸出,作為總線擴(kuò)展用時(shí),不用加上拉電阻,作為 I/O 口用時(shí),需加上拉電阻。
         7. ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程) ,無(wú)需專用編程器,無(wú) 需專用仿真器,可通過(guò)串口(RxD/P3.0,TxD/P3.1)直接下載用戶程 序,數(shù)秒即可完成一片
         8. 具有 EEPROM 功能
         9. 具有看門狗功能
         10. 3 個(gè) 16 位定時(shí)器/計(jì)數(shù)器。即定時(shí)器 T0T1T2
         11. 外部中斷 4 路,下降沿中斷或低電平觸發(fā)電路,Power Down 模式可 由外部中斷低電平觸發(fā)中斷方式喚醒
         12. 通用異步串行口(UART) ,還可用定時(shí)器軟件實(shí)現(xiàn)多個(gè) UART
         13. 工作溫度范圍:-40+85℃(工業(yè)級(jí))/075℃(商業(yè)級(jí))
         14. PDIP 封裝
STC89C52RC 單片機(jī)的工作模式
   掉電模式:典型功耗<0.1μA,可由外部中斷喚醒,中斷返回后,繼續(xù)執(zhí)行原 程序
       空閑模式:典型功耗 2mA 典型功耗
   正常工作模式:典型功耗 4Ma7mA 典型功耗
   掉電模式可由外部中斷喚醒,適用于水表、氣表等電池供電系統(tǒng)及便攜設(shè)備
    STC89C52RC 引腳功能說(shuō)明
   VCC40 引腳):電源電壓
   VS S20 引腳):接地
   P0 端口(P0.0P0.7 P0.73932 引腳) :P0 口是一個(gè)漏極開(kāi)路的 8 位雙向 I/O 口。作為輸出端口,每個(gè)引腳能驅(qū)動(dòng) 8 個(gè) TTL 負(fù)載,對(duì)端口 P0 寫入 每個(gè)引腳能驅(qū)動(dòng) 寫入“1”時(shí),可 以作為高阻抗輸入。在訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí) 在訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0 口也可以提供低 8 位 地址和 8 位數(shù)據(jù)的復(fù)用總線 位數(shù)據(jù)的復(fù)用總線。此時(shí),P0 口內(nèi)部上拉電阻有效。在 Flash ROM 編 在 程時(shí),P0 端口接收指令字節(jié) 端口接收指令字節(jié);而在校驗(yàn)程序時(shí),則輸出指令字節(jié) 則輸出指令字節(jié)。驗(yàn)證時(shí),要求外接上拉電阻。
   P1 端口(P1.0P1.718 引腳) :P1 口是一個(gè)帶內(nèi)部上拉電阻的 8 位雙向 I/O 口。P1 的輸出緩沖器可驅(qū)動(dòng)(吸收或者輸出電流方式)4 個(gè) TTL 輸入。對(duì)端 口寫入 1 時(shí),通過(guò)內(nèi)部的上拉電阻把端口拉到高電位,這是可用作輸入口。P1 口作輸入口使用時(shí),因?yàn)橛袃?nèi)部上拉電阻,那些被外部拉低的引腳會(huì)輸出一個(gè)電 流( ) 。
       此外,P1.0 P1.1 還可以作為定時(shí)器/計(jì)數(shù)器 2 的外部技術(shù)輸入(P1.0/T2) 和定時(shí)器/計(jì)數(shù)器 2 的觸發(fā)輸入(P1.1/T2EX) ,具體參見(jiàn)下表:
       在對(duì) Flash ROM 編程和程序校驗(yàn)時(shí),P1 接收低 8 位地址。
       XX  P1.0 P1.1 引腳復(fù)用功能
       P2 端口(P2.0P2.72128 引腳) :P2 口是一個(gè)帶內(nèi)部上拉電阻的 8 位雙 向 I/O 端口。P2 的輸出緩沖器可以驅(qū)動(dòng)(吸收或輸出電流方式)4 個(gè) TTL 輸入。 對(duì)端口寫入 1 時(shí),通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,這時(shí)可用作輸入口。 P2 作為輸入口使用時(shí),因?yàn)橛袃?nèi)部的上拉電阻,那些被外部信號(hào)拉低的引腳會(huì) 輸出一個(gè)電流(I
           在訪問(wèn)外部程序存儲(chǔ)器和 16 位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行“MOVX @DPTR”指令)時(shí),P2 送出高 8 位地址。在訪問(wèn) 8 位地址的外部數(shù)據(jù)存儲(chǔ)器(如 執(zhí)行“MOVX @R1”指令)時(shí),P2 口引腳上的內(nèi)容(就是專用寄存器(SFR)區(qū) 中的 P2 寄存器的內(nèi)容) ,在整個(gè)訪問(wèn)期間不會(huì)改變。
            在對(duì) Flash ROM 編程和程序校驗(yàn)期間, P2也接收高位地址和一些控制信號(hào)。
             P3 端口(P3.0P3.71017 引腳) :P3 是一個(gè)帶內(nèi)部上拉電阻的 8 位雙向 I/O 端口。P3 的輸出緩沖器可驅(qū)動(dòng)(吸收或輸出電流方式)4 個(gè) TTL 輸入。對(duì)端 口寫入 1 時(shí),通過(guò)內(nèi)部的上拉電阻把端口拉到高電位,這時(shí)可用作輸入口。P3 做輸入口使用時(shí),因?yàn)橛袃?nèi)部的上拉電阻,那些被外部信號(hào)拉低的引腳會(huì)輸入一 個(gè)電流( ) 。
           在對(duì) Flash ROM 編程或程序校驗(yàn)時(shí),P3 還接收一些控制信號(hào)。
           P3 口除作為一般 I/O 口外,還有其他一些復(fù)用功能,如下表所示:
XX  P3 口引腳復(fù)用功能 復(fù)用功能
           RST9 引腳) :復(fù)位輸入。當(dāng)輸入連續(xù)兩個(gè)機(jī)器周期以上高電平時(shí)為有效, 用來(lái)完成單片機(jī)單片機(jī)的復(fù)位初始化操作。看門狗計(jì)時(shí)完成后,RST 引腳輸出 96 個(gè)晶振周期的高電平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功 能無(wú)效。DISRTO 默認(rèn)狀態(tài)下,復(fù)位高電平有效。
           ALE/ ROG 30 引腳) 地址鎖存控制信號(hào) : (ALE) 是訪問(wèn)外部程序存儲(chǔ)器時(shí), 鎖存低 8 位地址的輸出脈沖。在 Flash 編程時(shí),此引腳( ROG)也用作編程輸入 脈沖。
          在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來(lái)作為外部 定時(shí)器或時(shí)鐘使用。然而,特別強(qiáng)調(diào),在每次訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE 脈沖 將會(huì)跳過(guò)。
          如果需要,通過(guò)將地址位 8EH SFR 的第 0 位置“1” ALE 操作將無(wú)效。這 一位置“1” ALE 僅在執(zhí)行 MOVX MOV 指令時(shí)有效。否則,ALE 將被微弱拉 高。這個(gè) ALE 使能標(biāo)志位(地址位 8EH SFR 的第 0 位)的設(shè)置對(duì)微控制器處于 外部執(zhí)行模式下無(wú)效。
:外部程序存儲(chǔ)器選通信號(hào)( SEN)是外部程序存儲(chǔ)器選 SEN29 引腳)
通信號(hào)。當(dāng) AT89C51RC 從外部程序存儲(chǔ)器執(zhí)行外部代碼時(shí), SEN在每個(gè)機(jī)器周 期被激活兩次,而訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí), SEN將不被激活。 A/VPP 31 引腳) 訪問(wèn)外部程序存儲(chǔ)器控制信號(hào)。 : 為使能從 0000H FFFFH 的外部程序存儲(chǔ)器讀取指令, A必須接 GND。注意加密方式 1 時(shí), A將內(nèi)部鎖 定位 RESET。為了執(zhí)行內(nèi)部程序指令, A應(yīng)該接 VCC。在 Flash 編程期間, A也 接收 12 VPP 電壓。 XTAL119 引腳) :振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。 XTAL218 引腳) :振蕩器反相放大器的輸入端。
#include <reg51.h>
#include <stc89c52_eeprom.h>                     //_nop_();延時(shí)函數(shù)用
#define  uchar unsigned char
#define  uint  unsigned int
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit temp_out=P1^5;
sbit humi_out=P1^6;
sbit IO= P3^2 ;
uint count;
uchar ds1,ds2,ds3,ds4;
uchar set_temp_H,set_temp_H_shi,set_temp_H_ge;//設(shè)定溫度的變量
uchar set_temp_L,set_temp_L_shi,set_temp_L_ge;//設(shè)定溫度的變量
uchar set_humi_H,set_humi_H_ge,set_humi_H_shi;//設(shè)置濕度的變量
uchar set_humi_L,set_humi_L_ge,set_humi_L_shi;//設(shè)置濕度的變量
uchar   U8FLAG,k,flag;
uchar   U8count,U8temp;
uchar   U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
uchar   U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
uchar   U8comdata;
uint    U16temp1,U16temp2;
uchar ser[]={0,0};                  
uchar i;
uchar code dis_7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共陽(yáng)LED段碼表      "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"              
void Delay1(uint j)
{
uchar i;
for(;j>0;j--)
{
for(i=0;i<35;i++);
}
}
void Delay_10us(void)
{
uchar i=6;
for(;i>0;i--);
}
void COM(void)
{
uchar i;
for(i=0;i<8;i++)
{
U8FLAG=2;
//---------------------
while((!IO)&&U8FLAG++);
Delay_10us();
Delay_10us();
// Delay_10us();
U8temp=0;
if(IO)U8temp=1;
U8FLAG=2;
while((IO)&&U8FLAG++);
//----------------------
if(U8FLAG==1)break;
U8comdata<<=1;
U8comdata|=U8temp;
}
}
//--------------------------------
void RH(void)
{
IO=0;
Delay1(50);
IO=1;
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
IO=1;
if(!IO)
{
U8FLAG=2;
while((!IO)&&U8FLAG++);
U8FLAG=2;
while((IO)&&U8FLAG++);
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
IO=1;
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
        {
        U8RH_data_H=U8RH_data_H_temp;
        U8RH_data_L=U8RH_data_L_temp;
        U8T_data_H=U8T_data_H_temp;
        U8T_data_L=U8T_data_L_temp;
        U8checkdata=U8checkdata_temp;
        }
  }
}
void xiaoyin()
{P2=0XFF;
P0=0XFF;
Delay_10us();
}
void disp()
{
P2=0xfe;
P0=dis_7[ds1];
Delay1(5);
xiaoyin();
P2=0xfd;
P0=dis_7[ds2];
Delay1(5);
xiaoyin();
P2=0xfb;
P0=dis_7[ds3];
Delay1(5);
xiaoyin();
P2=0xf7;
P0=dis_7[ds4];
Delay1(5);
xiaoyin();
}
void disp_settemp_H()
{
P2=0xfe;
P0=0x87;
Delay1(1);
xiaoyin();
P2=0xfd;
P0=0x89;
Delay1(1);
xiaoyin();
P2=0xf7;
P0=dis_7[set_temp_H_ge];
Delay1(1);
xiaoyin();
P2=0xfb;
P0=dis_7[set_temp_H_shi];
Delay1(1);
xiaoyin();
}
void disp_settemp_L()
{
P2=0xfe;
P0=0x87;
Delay1(1);
xiaoyin();
P2=0xfd;
P0=0xc7;
Delay1(1);
xiaoyin();
P2=0xf7;
P0=dis_7[set_temp_L_ge];
Delay1(1);
xiaoyin();
P2=0xfb;
P0=dis_7[set_temp_L_shi];
Delay1(1);
xiaoyin();
}
void disp_sethumi_H()
{
P2=0xfe;
P0=0x89;
Delay1(1);
xiaoyin();
P2=0xfd;
P0=0x89;
Delay1(1);
xiaoyin();
P2=0xf7;
P0=dis_7[set_humi_H_ge];
Delay1(1);
xiaoyin();
P2=0xfb;
P0=dis_7[set_humi_H_shi];
Delay1(1);
xiaoyin();
}
void disp_sethumi_L()
{P2=0xfe;
P0=0x89;
Delay1(1);
xiaoyin();
P2=0xfd;
P0=0xc7;
Delay1(1);
xiaoyin();
P2=0xf7;
P0=dis_7[set_humi_L_ge];
Delay1(1);
xiaoyin();
P2=0xfb;
P0=dis_7[set_humi_L_shi];
Delay1(1);
xiaoyin();
}
void key_scan()
{
if(k1==0)
  {       
    while(k1==0);
    flag++;
     if(flag==5)
      flag=0;
          }      
   
   if(flag==1)
   {
    while(k1==1)
     {
        if(k2==0)
           {while(k2==0);
             set_temp_H++;
           if(set_temp_H==100)
              set_temp_H=0;}
        if(k3==0)
           {while(k3 ==0);
            set_temp_H--;
           if(set_temp_H==-1)
           set_temp_H=100;}
      
         set_temp_H_ge=set_temp_H%10;
         set_temp_H_shi=set_temp_H/10;
         disp_settemp_H();
     }
          iapEraseSector(0x02000);
      iapProgramByte(0x02008,set_temp_H);
          delay(20);                         
  }
if(flag==2)
   {
    while(k1==1)
     {
        if(k2==0)
           {while(k2==0);
             set_temp_L++;
           if(set_temp_L==100)
              set_temp_L=0;}
        if(k3==0)
           {while(k3==0);
             set_temp_L--;
           if(set_temp_L==-1)
           set_temp_L=100;}
      
         set_temp_L_ge=set_temp_L%10;
         set_temp_L_shi=set_temp_L/10;
         disp_settemp_L();
     }
          iapEraseSector(0x02200);
      iapProgramByte(0x02208,set_temp_L);
         delay(20);                         
  }
//
   if(flag==3)
   {
    while(k1==1)
     {
        if(k2==0)
           {while(k2==0);
            set_humi_H++;
           if(set_humi_H==100)
           set_humi_H=0;}
        if(k3==0)
           {while(k3==0);
            set_humi_H--;
           if(set_humi_H==-1)
           set_humi_H=100;}
      
         set_humi_H_ge=set_humi_H%10;
         set_humi_H_shi=set_humi_H/10;
         disp_sethumi_H();
     }
          iapEraseSector(0x02400);
      iapProgramByte(0x02408,set_humi_H);
          delay(20);
  }
//
if(flag==4)
   {
    while(k1==1)
     {
        if(k2==0)
           { while(k2==0);
             set_humi_L++;
           if(set_humi_L==100)
           set_humi_L=0;}
        if(k3==0)
           {while(k3==0);
           set_humi_L--;
           if(set_humi_L==-1)
           set_humi_L=100;}
      
         set_humi_L_ge=set_humi_L%10;
         set_humi_L_shi=set_humi_L/10;
         disp_sethumi_L();
     }
          iapEraseSector(0x02600);
      iapProgramByte(0x02608,set_humi_L);
          delay(20);
  }
}
void convdat()
{   
   ds1=U8RH_data_H/10;
   ds2=U8RH_data_H%10;
   ds3=U8T_data_H/10;
   ds4=U8T_data_H%10;
}
void bijiao()
{
if(U8RH_data_H<set_humi_L)
humi_out=0;
if(U8RH_data_H>set_humi_H)
humi_out=1;
if(U8T_data_H<set_temp_L)
temp_out=0;
if(U8T_data_H>set_temp_H)
temp_out=1;
}
/****************主函數(shù)************************/
void main()
{          
     set_temp_H=iapReadByte(0x02008);
         set_temp_L=iapReadByte(0x02208);
         set_humi_H=iapReadByte(0x02408);
         set_humi_L=iapReadByte(0x02608);
  while(1)
  {  key_scan();
         RH();
         convdat();
     disp();     
     bijiao();
      
  }                  
}
//
//***********************結(jié)束**************************//

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表