久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

[榨干芯片性能]STC15F104E/W 8腳單片機(jī) MD5算法移植+軟串口發(fā)送源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
ID:57657 發(fā)表于 2020-7-12 10:16 | 只看該作者 |只看大圖 回帖獎勵 |正序?yàn)g覽 |閱讀模式
本帖最后由 npn 于 2020-7-23 22:43 編輯

STC15F104E/STC15F104W 單片機(jī)芯片,字符串寫入EEPROM的第1個(gè)扇區(qū) (限511字節(jié),最后1字節(jié)為空字符0)。
由于該型號芯片的RAM容量有限,使用EEPROM的第2個(gè)扇區(qū)擴(kuò)展RAM空間。
晶振頻率:11.0592Mhz 波特率:9600,如有問題請?jiān)跇窍赂貜?fù)。
(2020-07-23) V1.1 刪改部分函數(shù)變量,優(yōu)化RAM占用。



單片機(jī)源程序如下:

  1. #include "stc15f104e.h"
  2. #include "intrins.h"
  3. #define ReverseIntBytes(l) l<<24|l>>24|(l&0xFF0000)>>8|(l&0xFF00)<<8;
  4. #define XchgVar(A,B) A=A^B;B=A^B;A=A^B;
  5. #define U8 unsigned char
  6. #define U16 unsigned int
  7. #define U32 unsigned long
  8. U8 code  *eeprom = 0x1000;
  9. U32 code *eeprom32 = 0x1000;
  10. U32 code ti[]={
  11.         0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,
  12.         0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,0x698098d8,
  13.         0x8b44f7af,0xffff5bb1,0x895cd7be,0x6b901122,0xfd987193,
  14.         0xa679438e,0x49b40821,0xf61e2562,0xc040b340,0x265e5a51,
  15.         0xe9b6c7aa,0xd62f105d,0x02441453,0xd8a1e681,0xe7d3fbc8,
  16.         0x21e1cde6,0xc33707d6,0xf4d50d87,0x455a14ed,0xa9e3e905,
  17.         0xfcefa3f8,0x676f02d9,0x8d2a4c8a,0xfffa3942,0x8771f681,
  18.         0x6d9d6122,0xfde5380c,0xa4beea44,0x4bdecfa9,0xf6bb4b60,
  19.         0xbebfbc70,0x289b7ec6,0xeaa127fa,0xd4ef3085,0x04881d05,
  20.         0xd9d4d039,0xe6db99e5,0x1fa27cf8,0xc4ac5665,0xf4292244,
  21.         0x432aff97,0xab9423a7,0xfc93a039,0x655b59c3,0x8f0ccc92,
  22.         0xffeff47d,0x85845dd1,0x6fa87e4f,0xfe2ce6e0,0xa3014314,
  23.         0x4e0811a1,0xf7537e82,0xbd3af235,0x2ad7d2bb,0xeb86d391
  24.         };

  25. U8 code ss[4][4]={
  26.         {7,12,17,22},{5,9,14,20},{4,11,16,23},{6,10,15,21}
  27. };

  28. union md5_key {
  29.         U32 l[4];
  30.         U8 c[16];
  31. };

  32. union udata {
  33.         U32 l;
  34.         U8 c[4];
  35. };

  36. union udata2 {
  37.         U32 l[2];
  38.         U8 c[8];
  39. };

  40.         sbit txd = P3^1;
  41.         void delay_uart(){
  42.             U8 data a,b;
  43.             for(b=3;b>0;b--)
  44.                 for(a=94;a>0;a--);
  45.         }

  46.         void txd_data(U8 i) {
  47.                 U8 j = 1;
  48.                 delay_uart();
  49.                 txd = 0;
  50.                 do {
  51.                         delay_uart();
  52.                         txd = i & j;
  53.                         j <<= 1;
  54.                 } while (j);
  55.                 delay_uart();
  56.                 txd = 1;
  57.         }

  58.         void send_text(U8 *text){
  59.                 for(;*text;text++){
  60.                         txd_data(*text);
  61.             }
  62.         }

  63. void eeprom_open(){
  64.         IAP_CONTR = 0x83;
  65.         IAP_CMD = 0;
  66.         IAP_ADDRH        = 0x00;
  67.         IAP_ADDRL        = 0x00;
  68. }

  69. void eeprom_close(){
  70.         IAP_CONTR = 0;
  71.         IAP_CMD = 0;
  72.         IAP_TRIG = 0;
  73.         IAP_ADDRH = 0;
  74.         IAP_ADDRL = 0;
  75. }

  76. void eeprom_write(U16 addr,U8 dat){
  77.         IAP_CONTR = 0x83;
  78.         IAP_CMD = 2;
  79.         IAP_ADDRL = addr;
  80.         IAP_ADDRH = addr >> 8;
  81.         IAP_DATA = dat;
  82.         IAP_TRIG = 0x5a;
  83.         IAP_TRIG = 0xa5;
  84.         _nop_();_nop_();_nop_();
  85. }

  86. void eeprom_erase(U16 addr){
  87.     IAP_CONTR = 0x83;
  88.     IAP_CMD = 3;
  89.     IAP_ADDRL = addr;
  90.     IAP_ADDRH = addr >> 8;
  91.     IAP_TRIG = 0x5a;
  92.     IAP_TRIG = 0xa5;
  93.     _nop_(); _nop_();_nop_();
  94. }

  95. U8 block = 0;

  96. void witre_md5_data(U8 address,U8 byte){
  97.         eeprom_write(0x200|((block<<6)|address),byte);
  98. }

  99. U8* md5(U8 *i){
  100.         union md5_key md5_key;
  101.         union udata2 md;
  102.         U32 A,B,C,D,g;
  103.         U16 z,pc=0,len=0,gn;
  104.         U8 a,c,r,m;
  105.         bit f,s128=0;
  106.         md5_key.l[0] = 0x67452301;
  107.         md5_key.l[1] = 0xefcdab89;   
  108.         md5_key.l[2] = 0x98badcfe;
  109.         md5_key.l[3] = 0x10325476;
  110.         for(;*i;i++) len++;
  111.         gn=((len+8)>>6)+1;
  112.         i -= len;
  113.                 for(z=1;z<=gn;z++){
  114.                         for(c = 0;c < (z == gn ? 56 : 64); c++){
  115.                         f = pc >= len;
  116.                         a = pc & 63 ^ 3;
  117.                         if(f && !s128){
  118.                                  s128=1;
  119.                                 witre_md5_data(a,128);
  120.                         } else {
  121.                                 witre_md5_data(a,f ? 0 : *i++);
  122.                         }
  123.                         pc++;
  124.                 }
  125.         if(z == gn) {
  126.                 md.l[0]=len;md.l[1]=0;
  127.                 for(a=0;a<3;a++){
  128.                         f = 0;
  129.                         for(c=0;c<8;c++){
  130.                                 m=md.c[c^3];
  131.                                 r= m<<1|f;
  132.                                 f= m>>7;
  133.                                 md.c[c^3]=r;
  134.                         }
  135.                 }
  136.                 for(c=0;c<8;c++){
  137.                         witre_md5_data(56|c,md.c[c]);
  138.                 }
  139.         }

  140.         A=md5_key.l[0];B=md5_key.l[1];
  141.         C=md5_key.l[2];D=md5_key.l[3];
  142.         for(a=0;a<64;a++){
  143.                 switch(a>>4){
  144.                         case 0:{g=(B&C)|((~B)&D);c=a;break;}
  145.                         case 1:{g=(D&B)|((~D)&C);c=5*a+1;break;}
  146.                         case 2:{g=B^C^D;c=3*a+5;break;}
  147.                         case 3:{g=C^(B|(~D));c=7*a;break;}
  148.                 }

  149.         A=B+_lrol_(A+g + eeprom32[0x80 | (block << 4) | (c & 15)] + ti[a],ss[a>>4][a&3]);
  150.         XchgVar(A, D); XchgVar(B, D); XchgVar(C, D);
  151.         }
  152.                 if(++block > 7){
  153.                         eeprom_erase(0x200);
  154.                         block = 0;
  155.                 }

  156.         md5_key.l[0]+=A;md5_key.l[1]+=B;
  157.         md5_key.l[2]+=C;md5_key.l[3]+=D;
  158.                 }

  159.                 for(c=0;c<4;c++){
  160.                         md5_key.l[c]=ReverseIntBytes(md5_key.l[c]);
  161.                 }
  162.         return md5_key.c;
  163. }

  164. void main(){
  165. U8 z;
  166. U8* md5_answer;
  167. eeprom_open();
  168. eeprom_erase(0x200);
  169. send_text("STC15F104E MD5 V1.1\r\n");
  170. send_text("md5(\"");
  171. send_text(eeprom);
  172. send_text("\")=");
  173. md5_answer = md5(eeprom);
  174. for (z = 0; z < 16; z++) {
  175.         txd_data(((md5_answer[z] >> 4) < 10 ? 48 : 87) + (md5_answer[z] >> 4));
  176.         txd_data(((md5_answer[z] & 15) < 10 ? 48 : 87) + (md5_answer[z] & 0xF));
  177. }

  178. send_text("\r\n");
  179. eeprom_close();
  180. while (1) {
  181.         WDT_CONTR = 0x37;
  182. }


  183. }

復(fù)制代碼


所有資料51hei提供下載:

MD5-STC15F104E V1.1.zip (13.15 KB, 下載次數(shù): 39)

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

地板
ID:57657 發(fā)表于 2020-7-24 22:47 | 只看該作者
szb314 發(fā)表于 2020-7-24 15:32
EEPROM 當(dāng)RAM用會不會很慢

添加IO口賦值語句,然后用邏輯分析儀測量即可。
回復(fù)

使用道具 舉報(bào)

板凳
ID:807591 發(fā)表于 2020-7-24 15:32 | 只看該作者
EEPROM 當(dāng)RAM用會不會很慢
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:17647 發(fā)表于 2020-7-13 15:45 | 只看該作者
正在找STC15F104E/W 軟串口發(fā)送源程序,謝謝了!
回復(fù)

使用道具 舉報(bào)

樓主
ID:328014 發(fā)表于 2020-7-12 16:43 | 只看該作者
這個(gè)牛逼啊,單片機(jī)居然能干這么高端的事情
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 伊人免费在线观看 | 亚洲国产精品一区二区久久 | 99精品久久久久久中文字幕 | 久久久91 | 久久精品免费观看 | 欧美日韩精品一区 | 看真人视频一级毛片 | av无遮挡 | 性高湖久久久久久久久 | 精品久久香蕉国产线看观看亚洲 | 欧美日韩一区在线播放 | 日韩在线观看一区 | 精品国产伦一区二区三区观看体验 | 色欧美综合| 精品国模一区二区三区欧美 | 污污的网站在线观看 | 免费欧美视频 | 亚洲欧洲精品在线 | 成人在线精品 | 欧美综合国产精品久久丁香 | 中文字幕不卡 | 在线日韩福利 | 国产视频一区二区 | 国产欧美精品一区二区三区 | 免费大黄视频 | 韩日视频在线观看 | 国产一区二区欧美 | 亚洲一区二区三区桃乃木香奈 | 精品久久精品 | 日本黄色大片免费看 | 97色在线视频 | 成人亚洲视频 | 国产色在线 | 一区二区三区免费 | 国产乱码精品一区二三赶尸艳谈 | 成人免费精品 | 日韩国产一区 | 亚洲一区二区在线 | 亚洲精品成人在线 | 欧美成人一区二区 | 国产小视频在线观看 |