導航:首頁 > 操作系統 > 51單片機算hmacsha1

51單片機算hmacsha1

發布時間:2023-09-13 15:01:21

A. 為什麼51單片機還在使用

為什麼不能繼續使用呢?存在就有器必然的道理,一是簡單,入手很快,普及性很強。二是生活中90%以上的東西其實都不需要那麼復雜的控制。8位機足夠了,何況51這個8位機現在性能也很強大了。三是;成本很低,這包括開發成本和製造成本。

B. stc89c52單片機和51單片機的區別

1、種類不同:51系列單片機是指51內核,stc89c5X基本都是51內核的種類。

2、大小不同:最後一個數字表示E2prom的大小,E2prom=X*4K,c51就是4K,c52就是8k。

3、配件不同:52還多了一個定時器,所以可以說52是51(這個51是塌帶指stc89c51,不是51內核)的增強型。

如下圖,可以很清晰的看出兩者之間的差別:

向左轉|向右轉

(2)51單片機算hmacsha1擴展閱讀:

單片機(Microcontrollers)改祥作為計算機發展的一個重要分支領域,根據發展情況,從不同角度,單片機大致可以分為通用型/專用型、匯流排型/非匯流排型及工控型/家電型。

通用型

這是按單片機(Microcontrollers)適用范圍來區分的。例如,80C51式通用型單片機,它不是為某種專門用途設計的;專用型單片機是針對一類產品甚至某一個產品設計生產的,例如為了滿足電子體溫計的要求,在片內集成ADC介面等功能的溫度測量控制電路。

匯流排型

這是按單片機(Microcontrollers)是否提供並行匯流排來區分的。匯流排型單片機普遍設置有並行地址匯流排、 數據匯流排、控制匯流排,這些引腳用以擴展並行外圍器件都可通過串列口與單片機連接,另外,許多單片機已把所需要的外圍器件及外設介面集成一片內,因此在許多情況下可以不要並行擴展匯流排,大大減省封裝成本和晶元體積,這類單片機稱團殲蘆為非匯流排型單片機。

控制型

這是按照單片機(Microcontrollers)大致應用的領域進行區分的。一般而言,工控型定址范圍大,運算能力強;用於家電的單片機多為專用型,通常是小封裝、低價格,外圍器件和外設介面集成度高。 顯然,上述分類並不是惟一的和嚴格的。例如,80C51類單片機既是通用型又是匯流排型,還可以作工控用。

C. 51單片機中有哪些中斷源

mcs-51單片機有5個中斷源,分別為:

1、外部中斷0(INT0):默認中斷級別最高纖慎,中斷入口地址0003H;

2、定時/計數器0(T1):默認中斷級別第2,中斷入口地址000BH;

3、外部中斷1(INT1):默認中斷級別第3,中斷入口地址0013H;

4、串列口中斷(TX/RX):默認中斷級別第4,中斷入口地址0023H;

5、定敏豎世時/計數器1(T1):默認中斷級別最低,中斷入口地址001BH。

(3)51單片機算hmacsha1擴展閱讀:

51單片機的特點:

1、從內部的硬體到軟體有一套完整的按位操作系統,稱作位處理器,處理對象不是字或位元組而是位。不但橋肢能對片內某些特殊功能寄存器的某位進行處理,如傳送、置位、清零、測試等,還能進行位的邏輯運算,功能十分完備。

2、同時在片內RAM區間還特別開辟了一個雙重功能的地址區間,使用極為靈活,這一功能無疑給使用者提供了極大的方便。

3、具有乘法和除法指令,給編程帶來了便利。其他很多的八位單片機都不具備乘法除法功能,作乘除法時還需要編輯一段程序來進行調用,十分不便。

參考資料來源:網路-51單片機

D. 51單片機設計的簡易的計算器

我以前做過4x4鍵盤控制電動機轉速,用數碼管顯示電機轉速的程序,程序如下:
AD EQU 30H
RTR EQU 31H
LTR EQU 32H
STR EQU 33H
BW EQU 34H
BWS EQU 35H
SHW EQU 36H
SHWS EQU 37H
GW EQU 38H
GWS EQU 39H
WSHR EQU 3AH;WSHR=BWS*100+SHWS*10+GWS
sz EQU 3BH;數字與代碼對應程序的數字變數
xsm EQU 3CH;數字與代碼對應程序的代碼變數
TODH EQU 3DH;計算的10進位數的高位*電機的要求轉速高位
TODL EQU 3EH;計算的10進位數的低位*電機的要求轉速低位
TODHT EQU 3FH;測試後電機的實際轉速高位
TODLT EQU 40H;測試後電機的實際轉速低位
PCK EQU 41H;pc口當前的狀態植
TOH EQU 42H;定時器高位數
T0L EQU 43H;定時器低位數
pink1 EQU 44H;電機轉動1/4圈定時器1的奇數次數
pink2 EQU 45H
VTIMES EQU 46H;速度顯示次數
T1H EQU 47H
T1L EQU 48H
TESTK DATA 49H ;高電平脈沖的個數
TTH0 EQU 1AH
TTL0 EQU 4BH
SUBNOW EQU 4CH

ORG 0000H
LJMP MAIN

ORG 03H
AJMP INTR0;中段0,用來計算電機轉速

ORG 0BH
MOV A,PCK
ANL A,#00000111B
MOV PCK,A
MOV A,#00000110B
CJNE A,PCK,INTT0LF
LJMP INTT0L;

ORG 1BH;pwm停轉子程序
AJMP INTT0H

ORG 0040H
;**************************定時器中斷子程序****************************
;****電機停止程序
INTT0H:
mov th0,TOH
mov tl0,T0L
SETB TR0;定時器0開始計數
CLR TR1;定時器1禁止計數
INC pink1
MOV DPTR,#7F02H; b地址
MOV A, #00000000B;電機停止運動
MOVX @DPTR,A
reti

;****電動機正轉子程序
INTT0L:
mov th1,T1H
mov tl1,T1L
SETB TR1;定時器1開始計數
CLR TR0;定時器0禁止計數
MOV DPTR,#7F02H; b地址
MOV A, #11001100B;C口輸出片選號燈
MOVX @DPTR,A
reti

;****電動機反轉
INTT0LF:
mov th1,T1H
mov tl1,T1L
SETB TR1;定時器1開始計數
CLR TR0;定時器0禁止計數
MOV DPTR,#7F02H; b地址
MOV A, #10101100B;C口輸出片選號燈
MOVX @DPTR,A
reti

;*************************計算電機轉速************************
;R2R3R4R5/ R6R7=R4R5餘R2R3////(R2R3R4/R7)=(R2)R3R4 余數R7
INTR0:
MOV R2,#00H
MOV R3,#0EH
MOV R4,#0A6H
MOV R7,pink1
MOV pink1,#0
MOV A,#10
CLR CY
SUBB A,R7
JNB CY,OUTINT0
LCALL NDIV31
MOV TODHT, R3
MOV TODLT,R4
MOV R6,TODH
MOV R7,TODL
CLR CY
MOV A,R4
SUBB A,R7
MOV SUBNOW,A
JB CY,ADV
LCALL SUBV
JMP OUTINT0
ADV:
LCALL ADDV
OUTINT0:
LCALL JSW;計算各位的數值毫時大大約600個始周期 ;MOV TODLT,TOH
;LCALL JSW;計算各位的數值毫時大大約600個始周期
RETI;***********************************************************************************************
;***************************************************************************************************
;***************************************************************************************************

COMP_M:
MOV A,#0FDH
SUBB A,TOH
JNB CY,OUT_PMM
MOV TOH,#0FDH
MOV T1H,#85
OUT_PMM:
RET

;***************加速子程序**********************
ADDV:
CLR EA
CLR TR1
CLR TR0
MOV R1,SUBNOW
MOV R0,#10000000B
FRT:
MOV A,R0
RL A
MOV R0,A
MOV A,R1
ANL A,R0
JZ FRT
MOV A,TOH
ADD A,R0
JC VMAX
MOV TOH,A
MOV A,T1H
SUBB A,R0
MOV T1H,A
JMP TXT
VMAX:
MOV TOH,#0FDH
MOV T1H,#85
TXT:
SETB TR0
SETB TR1
SETB EA
RET

;************減加速子程序*************************
SUBV:
CLR EA
CLR TR1
CLR TR0
MOV R1,SUBNOW
MOV R0,#10000000B
FRT1:
MOV A,R0
RL A
MOV R0,A
MOV A,R1
ANL A,R0
JZ FRT1
MOV A,TOH
SUBB A,R0
JC VMAX1
MOV TOH,A
MOV A,T1H
ADD A,R0
MOV T1H,A
JMP TXT1
VMAX1:
MOV TOH,#85
MOV T1H,#0FDH
TXT1:
SETB TR0
SETB TR1
SETB EA
RET

;*****************************主程序**************************************
MAIN:
MOV BW,#7DH
MOV SHW,#7DH
MOV GW,#7DH
MOV BWS,#0
MOV SHWS,#0
MOV GWS,#0
MOV SP,#0A0H
MOV TOH,#0A1h;******************************************************************
MOV T0L,#0h;******************************************************************
MOV T1H,#0E1h;*******************************************************************
MOV T1L,#37h;*******************************************************************
MOV TMOD,#00H;定時器0在模式1下工作
MOV RTR,#00110110B
MOV LTR,#00101101B
MOV PCK,#00H
MOV TODHT,#2
MOV TODLT,#25H
MOV TODH,#0
MOV TODL,#0
;LCALL JSTIM;計算總值TODH;TODL
MOV pink2,#0
MOV pink1,#0
SETB EX0
SETB IT0

START:
MOV DPTR,#7F00H; 狀態字地址
MOV A, #00111111B;設A,B,C口均為輸出
MOVX @DPTR,A
LCALL DISPLAY;顯示
LCALL KEYSC;掃描鍵盤
;MOV TESTK,#44H;************************************************TEST*************************************************
ACALL DISPKEYV ;確定鍵盤
;LCALL JSTIM;計算總值TODH;TODL
;LCALL JSW;計算各位的數值毫時大大約600個始周期
LCALL JSEHW;計算各個代碼******************************
JMP START

;*************************鍵盤掃描程序**************************
KEYSC:
MOV TESTK,#0
mov p1,#0FH ;p10-3輸出1,作為輸入位
mov a ,p1
ANL A,#0FH
CJNE A,#0FH,DELAY
RET
DELAY: ACALL DELAY1 ; 延時去鍵抖
mov a ,p1
ANL A,#0FH
CJNE A,#0FH,HAVE
RET
HAVE:
MOV A,#0EFH ;行掃描碼
NEXT:
MOV B,A
MOV P1,A
MOV A,p1
ANL A,#0FH ;檢測列
CJNE A,#0FH,YES
MOV A,B
RL A
CJNE A,#0FEH,NEXT

YES: orl a,#0f0h ;高四位置1
CPL A
mov r2,#00h
MOV R2,A ;存列碼
MOV A,B ;取行碼,

CPL A
ORL A,R2 ;列碼+行碼=鍵植
MOV AD,#00H
MOV TESTK,A
RET

;****************************確定鍵盤程序******************************
DISPKEYV:MOV A,TESTK
KEY0:CJNE A,#11H,KEY1
acall WORD0
KEY1:CJNE A,#12H,KEY2
acall WORD1
KEY2:CJNE A,#14H,KEY3
acall WORD2
KEY3:CJNE A,#18H,KEY4
acall WORD3
KEY4:CJNE A,#21H,KEY5
acall WORD4
KEY5:CJNE A,#22H,KEY6
acall WORD5
KEY6:CJNE A,#24H,KEY7
acall WORD6
KEY7:CJNE A,#28H,KEY8
acall WORD7
KEY8:CJNE A,#41H,KEY9
acall WORD8
KEY9:CJNE A,#42H,KEY10
acall WORD9
KEY10:CJNE A,#44H,KEY11
acall WORD10
KEY11:CJNE A,#48H,KEY12
acall WORD11
KEY12:CJNE A,#81H,KEY13
acall WORD12
KEY13:CJNE A,#82H,KEY14
acall WORD13
KEY14:CJNE A,#84H,KEY15
acall WORD14
KEY15:
CJNE A,#88H,PASS
AJMP WORD15
PASS:RET

WORD0:
lCALL MOVE
MOV A,#0
MOV GWS,A
LCALL JSTIM;計算總值TODH;TODL
MOV R0,TESTK
TSTK0:
LCALL KEYSC
MOV A,R0
CJNE A,TESTK,OUT0
JMP TSTK0
OUT0:
MOV R0,#0
RET

WORD1:
lCALL MOVE
MOV A,#1
MOV GWS,A
LCALL JSTIM;計算總值TODH;TODL
MOV R0,TESTK
TSTK1:
LCALL KEYSC
MOV A,R0
CJNE A,TESTK,OUT1
JMP TSTK1
OUT1:
MOV R0,#0
RET

WORD2:
lCALL MOVE
MOV A,#2
MOV GWS,A
LCALL JSTIM;計算總值TODH;TODL
MOV R0,TESTK
TSTK2:
LCALL KEYSC
MOV A,R0
CJNE A,TESTK,OUT2
JMP TSTK2
OUT2:
MOV R0,#0
ACALL JSEHW;計算各個位的顯示代碼
RET

WORD3:
lCALL MOVE
MOV A,#3
MOV GWS,A
LCALL JSTIM;計算總值TODH;TODL
MOV R0,TESTK
TSTK3:
LCALL KEYSC
MOV A,R0
CJNE A,TESTK,OUT3
JMP TSTK3
OUT3:
MOV R0,#0
ACALL JSEHW;計算各個位的顯示代碼
RET

WORD4:
lCALL MOVE
MOV A,#4
MOV GWS,A
LCALL JSTIM;計算總值TODH;TODL
MOV A,TESTK
TSTK4:
LCALL KEYSC
CJNE A,TESTK,OUT4
JMP TSTK4
OUT4:
ACALL JSEHW;計算各個位的顯示代碼
RET

WORD5:
lCALL MOVE
MOV A,#5
MOV GWS,A
LCALL JSTIM;計算總值TODH;TODL
MOV A,TESTK
TSTK5:
LCALL KEYSC
CJNE A,TESTK,OUT5
JMP TSTK5
OUT5:
ACALL JSEHW;計算各個位的顯示代碼
RET

WORD6:
lCALL MOVE
MOV A,#6
MOV GWS,A
LCALL JSTIM;計算總值TODH;TODL
MOV A,TESTK
TSTK6:
LCALL KEYSC
CJNE A,TESTK,OUT6
JMP TSTK6
OUT6:
ACALL JSEHW;計算各個位的顯示代碼
RET

WORD7:
lCALL MOVE
MOV A,#7
MOV GWS,A
LCALL JSTIM;計算總值TODH;TODL
MOV A,TESTK
TSTK7:
LCALL KEYSC
CJNE A,TESTK,OUT7
JMP TSTK7
OUT7:
ACALL JSEHW;計算各個位的顯示代碼
RET

WORD8:
lCALL MOVE
MOV A,#8
MOV GWS,A
LCALL JSTIM;計算總值TODH;TODL
MOV A,TESTK
TSTK8:
LCALL KEYSC
CJNE A,TESTK,OUT8
JMP TSTK8
OUT8:
ACALL JSEHW;計算各個位的顯示代碼
RET

WORD9:
lCALL MOVE
MOV A,#9
MOV GWS,A
LCALL JSTIM;計算總值TODH;TODL
MOV A,TESTK
TSTK9:
LCALL KEYSC
CJNE A,TESTK,OUT9
JMP TSTK9
OUT9:
ACALL JSEHW;計算各個位的顯示代碼
RET

WORD10:
CLR EA
CLR ET0
CLR TR0
mov th0,TOH
mov tl0,T0L
MOV PCK,#00000110B
SETB EA;打開所有中斷
SETB ET0;定時器允許中斷
SETB TR0;定時器0開始計數
CLR TR1;定時器1禁止計數
SETB ET1;定時器1允許中斷
RET

WORD11:
CLR EA
CLR ET0
CLR TR0
mov th0,TOH
mov tl0,T0L
MOV PCK,#00000101B
SETB EA;打開所有中斷
SETB ET0;定時器允許中斷
SETB TR0;定時器0開始計數
CLR TR1;定時器1禁止計數
SETB ET1;定時器1允許中斷
RET

WORD12:
LCALL ADDV
MOV TODLT,TOH
LCALL JSW;計算各位的數值毫時大大約600個始周期
MOV A,TESTK
TSTK12:
LCALL KEYSC
CJNE A,TESTK,OUT12
JMP TSTK12
OUT12:
RET
WORD13:
LCALL SUBV
MOV TODLT,TOH
LCALL JSW;計算各位的數值毫時大大約600個始周期
MOV A,TESTK
TSTK11:
LCALL KEYSC
CJNE A,TESTK,OUT11
JMP TSTK11
OUT11:
RET
WORD14:
CLR ET0;使能定時器0中斷
CLR ET1;使能定時器1中斷
CLR EA;使能總中斷
CLR TR1;關閉T1計時
CLR TR0;關閉T0計時
MOV PCK,#00H
MOV BW,#7DH
MOV SHW,#7DH
MOV GW,#77H
RET
WORD15:JB EA,MID15
MOV BWS,#0
MOV SHWS,#0
MOV GWS,#0
JMP OUT15
MID15:
CLR EA

MOV A,TESTK
TSTK15:
LCALL KEYSC
CJNE A,TESTK,OUT15
JMP TSTK15
MOV TODLT,TOH
LCALL JSW;計算各位的數值毫時大大約600個始周期
OUT15:
SETB EA
RET

;***********************計算各個代碼******************************
JSEHW:
MOV SZ,BWS
ACALL js
MOV BW,xsm

MOV SZ,SHWS
ACALL js
MOV SHW,xsm

MOV SZ,GWS
ACALL js
MOV GW,xsm
RET

js:
mov a,sz
js0:cjne a,#0,js1
mov xsm,#7dh
js1:cjne a,#1,js2
mov xsm,#14h
js2:cjne a,#2,js3
mov xsm,#6eh
js3:cjne a,#3,js4
mov xsm,#3eh
js4:cjne a,#4,js5
mov xsm,#17h
js5:cjne a,#5,js6
mov xsm,#3bh
js6:cjne a,#6,js7
mov xsm,#7bh
js7:cjne a,#7,js8
mov xsm,#00011100B
js8:cjne a,#8,js9
mov xsm,#7fh
js9:cjne a,#9,js10
mov xsm,#3fh
js10:ret

;***************************計算各位的數值毫時大大約600個始周期**************************************
JSW:;(R2R3R4/R7)=(R2)R3R4 余數R7
MOV R2,#0
MOV R3,TODHT
MOV R4, TODLT
MOV R7,#100
LCALL NDIV31
MOV BWS,R4
MOV A,R7;
MOV R4,A
MOV R3,#0
MOV R2,#0
MOV R7,#10
LCALL NDIV31
MOV SHWS,R4
MOV GWS,R7
RET

;***************************計算十進制結果****************************
JSTIM:
MOV TODL,#0
MOV TODH,#0
MOV A,GWS
MOV B,#1
ACALL JSHL

MOV A,SHWS
MOV B,#10
ACALL JSHL

MOV A,BWS
MOV B,#100
ACALL JSHL

RET

JSHW:
JB OV,JSGW
CLR OV
RET
JSGW:
INC TODH;TEST DATE
RET
JSHL:
MUL AB
MOV R1,B
ADD A,TODL
MOV TODL,A
MOV A,B
ADDC A,TODH
MOV TODH,A
ACALL JSHW
RET

;*****************************單位元組的除法*********************
;****************************(R2R3R4/R7)=(R2)R3R4 余數R7
NDIV31 :MOV A,R2
MOV B,R7
DIV AB
MOV R2,B
MOV B,#10H
NDV311 :CLR C
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV F0,C
CLR C
SUBB A,R7
JB F0,NDV312
JC NDV313
NDV312 :MOV R2,A
INC R4
NDV313 :DJNZ B,NDV311
CLR OV
JZ NDV314
SETB OV
NDV314 :XCH A,R2
MOV R7,A
RET

;*******************雙位元組減法***(R3R4-R6R7)=(R3R4)*******
NSUB :MOV A,R4
CLR C
SUBB A,R7
MOV R4,A
MOV A,R3
SUBB A,R6
MOV R3,A
RET

DELAY1:
MOV R5,#10
D1: MOV R6,#250
DJNZ R6, $
DJNZ R5,D1
RET

DELAY_BS:
MOV R5,#5
D2: MOV R6,#99
D3: MOV R7,#99
DJNZ R7, $
DJNZ R6,D3
DJNZ R5,D2
RET

;*****************************顯示器顯示子程序***********************************
DISPLAY:
MOV DPTR,#7F01H;
MOV A, BW;
MOVX @DPTR,A
MOV DPTR,#7F03H; c地址
MOV A, #00011000B;C口輸出片選號燈
MOV R0,PCK;pck=********
ORL A,R0;a=***11***
MOV R0,#00011111B;a=00011***
ANL A,R0
MOVX @DPTR,A
ACALL D_40ms

MOV DPTR,#7F01H;
MOV A, SHW;
MOVX @DPTR,A
MOV DPTR,#7F03H; c地址
MOV A,#00101000B
ORL A,R0
MOV R0,#00101111B
ANL A,R0
MOVX @DPTR,A
ACALL D_40ms

MOV DPTR,#7F01H;
MOV A, GW;
MOVX @DPTR,A
MOV DPTR,#7F03H; c地址
MOV A, #00110000B;C口輸出片選號燈
ORL A,R0
MOV R0,#00110111B
ANL A,R0
MOVX @DPTR,A
ACALL D_40ms
mov a,#0ffh
MOVX @DPTR,A
RET

D_40ms:
MOV R7,#10
DELAYBB:
MOV R6,#10
NOP
DELAYNN:

DJNZ R6,DELAYNN; 2X198+2=398
DJNZ R7,DELAYBB; (398+2)X200+1=80ms
RET

;****************************各個位移位自程序***************************
MOVE:
MOV A,SHWS
MOV BWS,A
MOV A,GWS
MOV SHWS,A
RET
END

E. MCS-51單片機查表程序

16和7是查表指令時的PC與數據表格之間的位元組數

MOV A ,@R0 ;取R0指向的地址中的數據到A
ANL A,#0FH ;高四位清零
ADD A,#16 ;加16
MOVC A, @A+PC ;查表,表的首地址為絕對地址PC+A

MOVC A,@A+PC就需要1個位元組啊

查表指令距離表首地址的長度是位元組數

用DPTR的匯編程序:

ORG 0100H
MOV 30H,#12H
MOV 31H,#34H
MOV 32H,#56H
MOV 33H,#78H
LCALL SUBRTE
ORG 1000H
SUBRTE: MOV R0,#30H ; ;置地址指針R0初值
MOV R1,#40H ; ;置地址指針R1初值
MOV R2,#4 ; ;置位元組數
LOOP: MOV A,@R0 ; ;取16進制數
ANL A,#0FH ; ;屏蔽高4位
MOV DPTR,#TABLE ; ;
MOVC A,@A+DPTR ; ;查表低4位轉換為ASCⅡ碼
MOV @R1,A ; ;送結果
INC R1 ; ;修改指針
MOV A,@R0 ; ;從新取16進制數
SWAP A ; ;高4位與低4位互換
ANL A,#0FH ; ;取高4位
ADD A,#7
MOVC A,@A+PC ; ;查表高4位轉換為ASCⅡ碼
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP
DEC R1
RET
TABLE: DB '012345678'
DB '9ABCDEF'
END

閱讀全文

與51單片機算hmacsha1相關的資料

熱點內容
rdlcpdf 瀏覽:109
鏈表實現快速排序python 瀏覽:590
php輸出命令 瀏覽:987
d站app叫什麼名字 瀏覽:172
oppor系列如何解除應用加密 瀏覽:601
程序員那麼可愛姜逸城初戀 瀏覽:499
modbustcp編程 瀏覽:493
實況為什麼安卓看不了 瀏覽:129
Java多線程Queue 瀏覽:95
雲伺服器499元三年 瀏覽:980
nbd源碼 瀏覽:847
x86在arm上編譯 瀏覽:8
linux怎麼配置網路 瀏覽:307
程序員想要的小禮物 瀏覽:187
java獲取網頁url 瀏覽:626
怎麼做解壓神器泡泡版 瀏覽:967
自己動手做一個c編譯器 瀏覽:932
手機如何鏈接谷歌伺服器地址 瀏覽:138
廢掉一個程序員的武功 瀏覽:251
java樹形演算法 瀏覽:642