có bạn nào biết cách chuyển chẳng hạn con số 2560 tức 0a00h thành các con số 02h,05h,06h,00h xin chỉ dùm
Thông báo
Collapse
No announcement yet.
Giải thuật chuyển số nhị phân 16 BIT thành các con số BCD không nén
Collapse
X
-
Code:unsigned char result[4];//4 byte chứa số đã chuyển thành không nén result[0]=parameter%10;//parameter biến mà bạn cần chuyển thành BCD không nén kiểu int parameter/=10; result[1]=parameter%10; parameter/=10; result[2]=parameter%10; parameter/=10; result[3]=parameter%10; parameter/=10;
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
-
org 0
mov a,#0a00h ;day la so can chuyen
mov b,#10
div ab
mov r0,b ;so don vi chua trong r0
mov b,#10
div ab
mov r1,b ;so hang chuc chua trong r1
mov b,#10
div ab
mov r2,b ;so hang tram chua trong r2
mov b,#10
div ab
mov r3,b ;so hang ngan chua trong r3
mov r4,a ;so hang chuc ngan chua trong r4
; vi so 16 bit tối đa la 65535 (5 chữ số)
end
Comment
-
;chia con so16 bit cho con so 8 bit
;giai thuat :
; 1. Dat 8bit cao vao R7, 8 bit thap vao R6
; mov r7, high(conso16BIT)
; mov r6, low(conso16BIT)
; 2. dat so chia 8 bit vao b
; mov b,sochia8bit
; 3.0 xoa co nho c (clr c)
; dich trai co nho(rlc) R6 (luc nay R6.0 = 0)
; 3.1 dich trai co nho(rlc) R7 (dua R6.7 vao R7.0)
; 3.2 dich trai co nho (rlc) a (dua R7.7 vao acc.0)
; 4. so sanh a va b neu:
; - a < b quay ve 1.
; - a>= b lay a - b va setb R6.0 sau do quay ve 1.
; 5. qui trinh ket thuc khi da day het 16 bit vao acc.0
; ket qua la con so co : 8 bit cao R7 , 8 bit thap R6 , so du nam o thanh ghi a
Comment
-
Code ASM đây, mình không nhớ là lấy từ nguồn nào
Hex16toBCD:
; Converts 2-digit hex number (r3:r2)
; to 5-digit BCD number (030H:031H:032H:033H:034H).
; Destroys A, B, registers r all.
mov r0, #030H ; r0 = pout
mov dptr, #tab ; r=tab(p)
com1:
clr a ; p <- 0
movc a, @a+dptr ; r <- tab(p)
mov r7, a
inc dptr
clr a
movc a, @a+dptr
mov r6, a
mov r4, #0 ; c <- 0
soma: ; n <- n-r
clr c
mov a, r2
subb a, r6
mov r2, a
mov a, r3
subb a, r7
mov r3, a
jc saida ; if < 0 goto saida
inc r4 ; if >0 then c <- c +1
jmp soma ; goto soma
saida:
mov a, r4
mov @r0, a ; tabout (pout) <- c
mov a, r2
add a, r6 ; n=n+r
mov r2, a
mov a, r3
addc a, r7
mov r3, a
inc r0 ; psaida=psaida +1
clr a
movc a, @a+dptr
cjne a, #1, incrementa ; tab(p) = 1 ?
ret ; if yes, end
incrementa: ; if no, p <- p+1
inc dptr
jmp com1 ; goto com1
tab:
dw 10000
dw 1000
dw 100
dw 10
dw 1Imagine all the people
Living life in peace...
Comment
-
Tui xin bổ sung về giải thuật của đoạn code trên.
Điểm hay của giải thuật là chỉ sử dụng phép trừ mà không sử dụng phép chia cho 10 tìm số dư như các giải thuật khác.
Điều này giúp nó chạy được trên hầu hết các loại MCU (dĩ nhiên phải sửa code lại), vì một số MCU dòng RISC không có lệnh nhân/chia.Imagine all the people
Living life in peace...
Comment
-
cach chuyen so hexa sang BCD la chia so hexa cho 10 lien tiep. Ban co the tham khao o cac quyen sach viet ve VDK 89c51.
Neu ban thuc hien bang AVR thi phai viet 1 chuong trinh con thuc hien phep chia. De viet chuong trinh thuc hien phep chia thi ban dung thuat toan sau:
(ko bit co dung ko 0,5 nam roi)
gia su A:B la hai so nhi phan dc luu trong 2 thanh ghi
BEGIN: dich trai A(1 bit) vao 1 thanh ghi phu(C),
so sanh C va B , neu c<b thi ghi 0 vao thanh ghi ket qua(D) nguoc lai ghi 1 vao thanh ghi kq.
lap lai BEGIN cho den khi A dich het so bit no co.
Sau khi da co chuong trinh chia roi thi ban nap thanh ghi A gia tri so can chuyen, thanh ghi B la 10. sau do viet them phan kiem tra xem A<B ko, neu ko thi goi lai chuong trinh chia.
Good luck!Last edited by dtn0hut; 24-04-2007, 17:03.|
Comment
-
Nguyên văn bởi phamkhuyen Xem bài viết;chia con so16 bit cho con so 8 bit
;giai thuat :
; 1. Dat 8bit cao vao R7, 8 bit thap vao R6
; mov r7, high(conso16BIT)
; mov r6, low(conso16BIT)
; 2. dat so chia 8 bit vao b
; mov b,sochia8bit
; 3.0 xoa co nho c (clr c)
; dich trai co nho(rlc) R6 (luc nay R6.0 = 0)
; 3.1 dich trai co nho(rlc) R7 (dua R6.7 vao R7.0)
; 3.2 dich trai co nho (rlc) a (dua R7.7 vao acc.0)
; 4. so sanh a va b neu:
; - a < b quay ve 1.
; - a>= b lay a - b va setb R6.0 sau do quay ve 1.
; 5. qui trinh ket thuc khi da day het 16 bit vao acc.0
; ket qua la con so co : 8 bit cao R7 , 8 bit thap R6 , so du nam o thanh ghi a
Div16_8:
mov R7,HiByte
mov R6,LoByte
; Mov b,SoChia8Bit
mov count,#00h
Mov Tmp,#00h
DivLoop:
Clr C
mov a,R6;
rlc a; R6.0=0, R6.7 dua vao C flag
mov R6,a
mov a,R7
rlc a; R7.0= C flag, r7.7 dua vao C flag
mov R7,a
mov a, Tmp
rlc a; acc.0 = c flag = R7.7,
mov Tmp,a
inc Count
clr ov
clr c
mov b,SoChia8Bit
mov a,Tmp
subb a,b
jb ov, ANhoHonB
mov Tmp, a
mov a,R6
orl a, #01h
mov R6,a ; setb R6.0
mov p2,a
ANhoHonB:
mov a,Count
cjne a,#16,DivLoop
Mov a,R6 ; ket qua dua vao acc
retLast edited by ngocdq; 20-06-2007, 21:47.|
Comment
-
CHIA CON SỐ 16 BIT CHO CON SỐ 8 BIT .asm
xin lỗi phần trả lời cua tôi mà bạn trích dẫn có chỗ sai : Quay về 3 chứ không phải 1
Sau đây là đoan chương trình tôi viết bạn thử lại xem
Code:$mod51 ;************************************************************************** ;CHUONG TRING : chia16_8 ;Chia con so 16bit cho con so 8 bit ;Nguoi thuc hien : PHAM THANH KHUYEN ; Ngay thuc hien: 20/06/2007 ;Prosessor: 89c51 ;OSC: 12MHz ;************************************************************************** ;giai thuat : ; 1. Dat 8bit cao vao R7, 8 bit thap vao R6 ; mov r7, high(conso16BIT) ; mov r6, low(conso16BIT) ; 2. dat so chia 8 bit vao b ; mov b,sochia8bit ; 3.0 xoa co nho c (clr c) ; dich trai co nho(rlc) R6 (luc nay R6.0 = 0) ; 3.1 dich trai co nho(rlc) R7 (dua R6.7 vao R7.0) ; 3.2 dich trai co nho (rlc) a (dua R7.7 vao acc.0) ; 4. so sanh a va b neu: ; - a < b quay ve 3. ; - a>= b lay a - b va setb R6.0 sau do quay ve 3. ; 5. qui trinh ket thuc khi da day het 16 bit vao acc.0 ; ket qua la con so co : 8 bit cao R7 , 8 bit thap R6 , so du nam o thanh ghi a ;**************************************************************************** ;............................................................................................................... ;vi du chia con so 8564 ( hex=2174h) cho 4 (04h) = 2141 (085dh) ;Dung PROTEUS de kiem tra ;KET QUA : P1 = 00001000 (08) ; P0 = 01011101 (5D) ;................................................................................................................. Byte_h equ 21h Byte_l equ 74h Sochia equ 04h ORG 0000h Ljmp main ORG 0030h main: mov p2, #11001101b mov p0, #0 mov p1, #0 start: call chia16_8 mov p0, r6 mov p1, r7 jmp start ;--------------------------------------------------------------------------------------- ;CHUONG TRINH CHIA CON SO 16 BIT CHO 8 BIT chia16_8: ;buoc1: mov r6, #Byte_l mov r7, #Byte_h ;buoc2: mov b, #sochia clr a mov r2, #16 buoc3: xch a, r6 ; clr c rlc a xch a, r6 ; xch a, r7 ; rlc a xch a, r7 ; rlc a ;buoc4: mov r0, a clr c subb a, b jnc a_lonORbang_b mov a, r0 jmp xoay a_lonORbang_b: xch a, r6 add a, #1 xch a, r6 xoay: djnz r2, buoc3 xch a, b RET end
Attached Files
Comment
-
298 = 2*100+9*10+8*1
298 = 100101010
100 = 1100100
10 = 1010
1 = 0001
298 =100101010 = X*1100100 +Y*1010+Z*0001
100101010 / 1100100 = 0010 DƯ 1100010 >> X=0010
1100010 / 1010 =1001 DƯ 1000 >> Y =0010
1000 / 1 =1000 , HEÁT DÖ >> Z = 1000
VAÄY: X=0010 BCD = 2
Y=0010 BCD = 9
Z=1000 BCD = 8
QUA MOI LẦN KIỂM TRA (CP) VÀ CHIA (DIV) HOẶC TRừ (SUB) LIÊN TIẾP KẾT QUả LưU VàO THANH GHI RỒI NHÉt (STR) VẦO SRAM THEO THỨ TỰ X,Y,Z SAU ĐÓ LẤY RA THEO THỨ TỰ BẰNG CÁCH LUI CON TRỎ Z LẠI ĐỂ TRUY CẬP SRAM . LẤY Z,Y,X RỒI XUẤT LẦN LƯỢT RA PORT DATA CÙNG VỚI QUÉT CỘT TƯƠNG ỨNG NHƯ LÀ MỘT INTERUPT_TIMER0 _ISR ( KHỎANG 5MS) SẼ LÀM CHO 3 LED 7SEG SAU KHI QUA 7447 SẼ SÁNG LÊN CÁC CON SỐ 2 – 9 – 8 .
KHÔNG THỂ NÓI LẤY MỘT KẾT QUẢ NHỊ PHÂN 8 BIT CỦA MỘT ADC CHẲNG HẠN RỒI CHIA LIÊN TIẾP CHO 10 (MƯỜI). VÌ VẬY CẦN GIẢI THÍCH RÕ RÀNG NHƯ VẬY.
VẤN ĐỀ kosovo ĐÃ ĐƯỢC GIẢI QUYẾT. NẾU AI CÓ HỌC VDK THÌ CÓ THỂ CÙNG TRAO ĐỔI
TG: 0902989240.
http://www.youtube.com/watch?v=gPjYL...eature=related
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Tìm linh kiện sửa loa vi tính.bởi nhathung1101Ra cửa hàng điện tử bất kỳ.
Dõng dạc hét lên:
- Cho 1 con 4558.
Có luôn. Nó chỉ là con Opamp cùi bắp thông thường thôi mà. Giá 2k hay 3k gì đó.
Nếu muốn âm thanh hay hơn, thì mua NE5535, mất 2 cốc beer thôi.-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 22:38 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi nhathung1101Mạch dùng được, nhưng phải kết hợp với Transistor NPN công suất bên ngoài. Loại chịu điện áp cao, dòng lớn.
Loại mạch này nhái theo cái loại IC họ STR trong mấy cái ti vi cổ lỗ ngày xưa thôi mà. Còn được gọi là "ổn áp...-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 22:28 -
-
Trả lời cho Tìm linh kiện sửa loa vi tính.bởi Nikon57
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 21:36 -
-
bởi Nikon57Bộ loa vi tính Microlap cũ của tôi tầng tiền khuyêchs đại bị lỗi. Sau kiểm tra , nguyên nhân là do con chíp 4558D JRC 0077C chết nóng rực. Không thêt tìm được con IC đúng nguyên mã như vậy, để thay thế tôi có thể thay bawngfcon IC 4558 JRC 0058T được không? Mong các bác thành thạo cho ý kiến.
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 21:36 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi dinhthuong80Mạch trên nếu dùng vào việc khác ( theo người thiết kế ra nó) thì cũng được: làm mạch tiền khuếch đại (pre-Amply) cho "con sò công suất" hay mạch công suất, để chạy cái loa cũng tạm ok.
Các chữ E,B,C trên mạch trên gắn...-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 16:47 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi iTronvây là mình đã hiểu lí do vì sao ông ấy lại đưa mình nguyên hộp có hơn chục cái mạch này trong đó...
-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 12:21 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi mèomướpDạ mạch này hông dùng được ạ. Chú sang chị hàng xóm mượn cái cuốc kiếm góc nào trong bản có nhìu người qua lại để trồng 1 cây cải ngồng, ngày ngày chú chịu khó qua đấy tưới chăm cho nó lớn ạ, vài tháng sau nó to chú mang ra chợ bán...
-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 12:13 -
-
bởi iTronEm được ông anh cho mạch như hình, nhờ ace trong diễn đàn xem giúp mạch này dùng ổn ko và dùng linh kiện công suất nào thì phù hợp.
Xin cảm ơn...-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 11:27 -
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Vì sản phẩm của họ dân mình có dùng, và có lẽ cũng không phải là không phổ biến, nên ĐT quyết định gởi thư điện tử tiếng Anh cho họ như sau, ( đã sửa vài từ như được góp ý, vì nếu lịch sự thì dù vòng vo cũng nên phản hồi, vì...
-
Channel: Tâm tình dân kỹ thuật
25-02-2025, 16:36 -
-
Trả lời cho Tiếng Anh cho người Việtbởi tuyennhanCái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .-
Channel: Tâm tình dân kỹ thuật
23-02-2025, 07:44 -
Comment