8051 användare

I

ITP

Guest
Hej alla 8051 användare

Jag ber alla erfarna 8051 användare vänligt post
sina erfarenheter med denna controller samt gemensamma fallgropar
att en nybörjare kan utsättas för.

Tack.
ITP

 
Chociaż różne skandale dość często wybuchają wokół portalu Marka Zuckerberga, to jednak ma się on bardzo dobrze i może pochwalić coraz większymi dochodami.

Read more...
 
; Dear
8.051 användare,

, Detta är en enkel algoritm och 8051 mikrocontroller implimentation
; Konvertera binär till BCD.
; Ändringar mitt nummer är mycket välkommet.Om du gör ändringar i koden
, Posta här.

; Detta alorithm jag fick från följande forum

; ------- Datum: 19970630
; ------- Från: Brian Trial
; ------- Till: Mot-68HC11-Apps (at) freeware.mcu.motsps.com
; ------- Subject: Re: Förenklad metod för att mata ut 24bits i decimalform1.Köp 3 för varje BCD mumsa som är> = 5
2.Skift vänster
; Upprepa tills binära del är alla 0000
;
; Exempel: Konvertera $ F9 till BCD
;
; 0000 0000 0000: 1111 1001
; 0000 0000 0001: 1111 0010 (skift åt vänster)
; 0000 0000 0011: 1110 0100 (skift åt vänster)
; 0000 0000 0111: 1100 1000 (skift åt vänster)
; 0000 0000 1010: 1100 1000 (lägg till 3)
; 0000 0001 0101: 1001 0000 (skift åt vänster)
; 0000 0001 1000: 1001 0000 (lägg till 3)
; 0000 0011 0001: 0010 0000 (skift åt vänster)
; 0000 0110 0010: 0100 0000 (skift åt vänster)
; 0000 1001 0010: 0100 0000 (lägg till 3)
; 0001 0010 0100: 1000 0000 (skift åt vänster)
; 0010 0100 1001: 0000 0000 (skift åt vänster)
;
, Och den vänstra nu innehar BCD 249.
, Mycket lättare än Messing med IDIV och FDIV!; -------------------------------------------------

, 8051 mikrocontroller implimentation av
; ITP (en elektroda eboard medlem)org data_segment; inernal uppgifter

bin_val: DS 2, 16 bitars bin värde som ska konverteras
bcd_val: ds 3, omvandlas 5 siffriga packad BCDorg code_segment; koden börjar här

, 16 bitars binär till BCD konvertering.

bin2bcd:
push acc
push PSW
mov PSW, # 08h; väljer registrera bank 1
mov R0, # bin_val
mov r1, # bcd_val
2CLR en
mov @ R1, en
december r1
mov @ R1, en
december r1
mov @ R1, en
mov r3, # 16, för 16-bitars
again1:
samtal adj_bcd
mov R0, # bin_val
mov r1, # bcd_val
CLR c; flytta bytes
mov a, @ R0
rlc en
mov @ R0, en
inkl R0
mov a, @ R0
rlc en
mov @ R0, en
mov a, @ r1
rlc en
mov @ R1, en
inkl r1
mov a, @ r1
rlc en
mov @ R1, en
inkl r1
mov a, @ r1
rlc en
mov @ R1, en
inkl r1
mov a, @ r1
rlc en
mov @ R1, en
inkl r1
mov a, @ r1
rlc en
mov @ R1, en
skipx:
djnz r3, again1
exit:
pop PSW
pop acc
ret
adj_bcd:
mov r1, # bcd_val
mov b, # 3
igen:
mov a, @ r1
mov r7, en
anl a, # 0fh
cjne en, # 5, ok, a> = 5?
ok:
jc hoppa, om ja lägga 3
lägga till en, # 3
skip:
mov @ R1, en
mov a, r7
anl a, # 0f0h
växl en
cjne en, # 5, ok1
ok1:
jc skip1
lägga till en, # 3
skip1:
växl en
lägga till en, @ r1
mov @ R1, en
inkl r1
djnz b, igen
ret
-------------------------------------/ * C exempel för binär till BCD konvertering * /
/ * Detta använder olika algoritham * /

unsigned int bintobcd (unsigned int binvalue)
(
unsigned char j = 0;
unsigned int h = 0;
göra
(
H = ((binvalue% 10) <<j);
binvalue = binvalue/10;
j = 4;
)
while (binvalue> = 10);
H = ((binvalue) <<j);
återgå h;
)

 
ITP skrev:

Hej alla 8051 användareJag ber alla erfarna 8051 användare vänligt post

sina erfarenheter med denna controller samt gemensamma fallgropar

att en nybörjare kan utsättas för.Tack.

ITP
 
ITP skrev:, Detta är en enkel algoritm och 8051 mikrocontroller implimentation

; Konvertera binär till BCD.

; Ändringar mitt nummer är mycket välkommet.
Om du gör ändringar i koden; Detta alorithm jag fick från följande forum; ------- Datum: 19970630

; ------- Från: Brian Trial

; ------- Till: Mot-68HC11-Apps@freeware.mcu.motsps.com

; ------- Subject: Re: Förenklad metod för att mata ut 24bits i decimalform1.
Köp 3 för varje BCD mumsa som är> = 5

2.
Skift vänster

; Upprepa tills binära del är alla 0000
 
8051 har utmärkta instruktioner för bit manipulation.Om du behöver en viss kontroll flaggor du kan använda bitars variabler i stället för byte variabler och spara UC minne.

Du kan också göra vissa effektiv omvandling med bitars instruktioner.Nästa rutin är effektiv 8051 toupper () funktion.

; Konvertera strängen till stora bokstäver

TO_UPPER:
MOV R1, # STRBUF; ställa R1 pekaren till STRBUF
UPPER_LOOP:
INC R1;
MOV A, @ R1, lagra tecken i ackumulator
CJNE A, # 96, U_NEQ1, om karaktären är inte a.. Z hoppa
U_NEQ1: JC UPPER_CONT;
CJNE A, # 123, U_NEQ2;
U_NEQ2: JNC UPPER_CONT;
CLR ACC.5; konvertera tecken till versaler
MOV @ R1, A; lagra resultatet STRBUF
UPPER_CONT:
JNZ UPPER_LOOP, upprepa tills tecknet == NULL
RET

För röding omställning från lägre till övre fall du bara behöver en cykel instruktion CLR ACC.5!

Vissa nyare 8051 arkitekturer har några arkitektoniska förbättringar som ytterligare uppgifter pekaren.Ytterligare uppgifter pekare möjliggör effektiv manipulationer med 16-bitars adresser.

 
Hej Gunship, yager och Hero,

Tack för svar.

Jag uppskattar "yager" för din kompakt kod för bin2bcd.Tack
ITP

 

Welcome to EDABoard.com

Sponsor

Back
Top