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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2260|回復: 0
收起左側

關于STC12C2052單片機掉電存儲EEPROM程序

[復制鏈接]
ID:977804 發表于 2022-1-8 19:44 | 顯示全部樓層 |閱讀模式
網上研究了關天,各種STC12C的EEPROM使用,最后都沒成功,都沒辦法了,想起STC89C52兼容舊8051,那STC12C2052會兼容STC89C52嗎?
因為之前測試過STC89C52的掉電存儲,成功了,所以有現成的資源 ,
親測可用,STC12C2052可以套用STC89C52的EEPROM,但在寫程序后,要重新開啟EA,原程序在使用時關閉了。
以下附年STC89C52的EEPROM代碼,直接套用到STC12C2052就行。

單片機源程序如下:
  1. #include <STC89C52RC.H>
  2. #include <intrins.h>
  3. #define uchar unsigned char   
  4. #define uint unsigned int
  5. sbit LED1 = P1^1;
  6. sbit led=P3^3;
  7. sbit LED2 = P1^2;
  8. sbit K1   = P3^2;          //按鈕1
  9. sbit K2   = P3^3;          //按鈕2
  10. void  cc(uint addr);
  11. void  xcx(uint addr,uchar dat);
  12. uchar dcx(uint addr);
  13. void  Q0();
  14. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  15. 函數:主程序
  16. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  17. void main(void)
  18. {
  19.         led=0;
  20.   // uchar V;
  21.    P1= dcx(0x2000);         // 開機讀取EEPROM區2002h數據,還原關電前LED的亮滅狀況
  22.    while(1)
  23.      {
  24.       if(!K1)
  25.    {
  26.      while(!K1);
  27.     // LED1=0;LED2=1;
  28.      cc(0x2000);         // 擦除第1個扇區(2000h~21FFh)
  29.      xcx(0x2000,4);         // 對EEPROM區2002h寫入2
  30.    }
  31.      }
  32. }
  33. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  34. 函數:擦除某一扇區(每個扇區512字節)
  35. 入口:addr = 某一扇區首地址         
  36. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  37. void cc(uint addr)
  38. {
  39.          // 0x83(晶振<5M)   0x82(晶振<10M)   0x81(晶振<20M)   0x80(晶振<40M)
  40.     ISP_CONTR = 0x81;             // 打開 IAP 功能(ISPEN(ISP_CONTR.7)=1:允許編程改變Flash, 設置 Flash 操作等待時間。
  41.     ISP_CMD   = 0x03;         // 用戶可以對"Data Flash/EEPROM區"進行扇區擦除
  42.     ISP_ADDRL = addr;         // ISP/IAP操作時的地址寄存器低八位,
  43.     ISP_ADDRH = addr>>8;      // ISP/IAP操作時的地址寄存器高八位。
  44. EA =0;   
  45.     ISP_TRIG = 0x46;          // 在ISPEN(ISP_CONTR.7)=1時,對ISP_TRIG先寫入46h,
  46.     ISP_TRIG = 0xB9;          // 再寫入B9h,ISP/IAP命令才會生效。
  47.     _nop_();
  48.     Q0();         // 關閉ISP/IAP
  49. }
  50. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  51. 函數:寫一字節
  52. 入口:addr = 扇區單元地址 , dat = 待寫入數據
  53. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  54. void xcx(uint addr,uchar dat)
  55. {
  56.     ISP_CONTR = 0x81;         
  57.     ISP_CMD   = 0x02;             // 用戶可以對"Data Flash/EEPROM區"進行字節編程
  58.     ISP_ADDRL = addr;        
  59.     ISP_ADDRH = addr>>8;      
  60.     ISP_DATA  = dat;          // 數據進ISP_DATA
  61.     EA = 0;
  62.     ISP_TRIG = 0x46;         
  63.     ISP_TRIG = 0xB9;         
  64.     _nop_();
  65.     Q0();         // 關閉ISP/IAP
  66. }
  67. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  68. 函數:讀一字節
  69. 入口:addr = 扇區單元地址
  70. 出口:dat  = 讀出的數據
  71. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  72. uchar dcx(uint addr)
  73. {   
  74.     uchar dat;
  75. ISP_CONTR = 0x81;         
  76.     ISP_CMD   = 0x01;         // 用戶可以對"Data Flash/EEPROM區"進行字節讀
  77.     ISP_ADDRL = addr;         
  78.     ISP_ADDRH = addr>>8;      
  79.     EA = 0;
  80.     ISP_TRIG = 0x46;         
  81.     ISP_TRIG = 0xB9;         
  82.     _nop_();
  83.     dat = ISP_DATA;         // 取出數據
  84. Q0();         // 關閉ISP/IAP         
  85. return dat;
  86. }
  87. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  88. 函數:關閉ISP/IAP操作
  89. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  90. void Q0()
  91. {
  92.     ISP_CONTR = 0;            // 關閉IAP功能
  93.     ISP_CMD   = 0;            // 待機模式,無ISP操作
  94.     ISP_TRIG  = 0;            // 關閉IAP功能, 清與ISP有關的特殊功能寄存器
  95. }
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表