![]() |
Xin giúp dùm Hàm Nhân Chia trong ASM
Tôi muốn chia một số 125 ra ba số 1, 2, 5, để hiển thị ra LCD nhưng không biết phải làm sau.
Nếu dùng kthuật so sánh rồi tra bảng thì dài quá, vì tôi muốn hiển thị bất kỳ một số nào từ 0 đến 255 ra LCD, xin mọi người giúp dùm Thanks ! |
cái này dễ ẹt
Số ban đầu là A giá trị từ 0 - 255. Bước 1 : (A : 10) = B dư C cộng C với 30H để có mã ASCII tương ứng của nó. rồi gửi ra LCD => chữ số hàng đơn vị Bước 2 : (B : 10) = D dư E cộng E với 30H để có mã ASCII tương ứng của nó. rồi gửi ra LCD => chữ số hàng chục Bước 3 : (B : 10) = 0 dư G cộng G với 30H để có mã ASCII tương ứng của nó. rồi gửi ra LCD => chữ số hàng trăm Hàm chia như sau (hàm này không làm việc với số âm được nha). Khi dùng phải nạp số bị chia và số chia. Nhớ rằng : (Số bị chia / số chia) = thương và số dư HAMCHIA: ;------------------ghi chu-------------------------------------------- ; HAM CHIA 8 BIT ; HAM CHIA DUNG 2 BIEN VAO SOBICHIA VA SOCHIA ; 2 BIEN RA LA SODU VA THUONG ; TRUOC KHI GOI HAM NAY PHAI NAP : ; SO BI CHIA VAO BIEN SOBICHIA ; SO CHIA VAO BIEN SOCHIA ;------------------------------------------------------------------------- ;KIEMTRALOICHIACHOSO"0" CLRF WREG;----------------------WREG = 0 CPFSEQ SOCHIA;-----------------NEU SOCHIA LA "0" THI KHONG CHIA MA THOAT LUON GOTO BEGINHC;------------------THUC HIEN HAM CHIA NEU KHAC "0" RETURN;-------------------------THOAT NEU SOCHIA LA 0 ;------------------------------------------------------------------------- BEGINHC: CLRF SODU CLRF THUONG MOVFF SOCHIA, WREG;----------- LUU SO CHIA VAO WREG DE SO SANH CPFSLT SOBICHIA;--------------- SOBICHIA < SOCHIA ? GOTO CHIA;---------------------- NEU LON HON THI THUC HIEN CHIA ;--------------------------------- NEU NHO HON THI KHONG THUC HIEN CHIA GANSODU: MOVFF SOBICHIA, SODU;---------- NEU NHO HON THI SO DU LA SO BI CHIA ;---------------------------------- THUONG SO VAN LA 0 RETURN;-------------------------- THOAT ;-------------------------------------------------------------------------------------- CHIA: SUBWF SOBICHIA,1;-------------- SOBICHIA = SOBICHIA - SOCHIA ; VI WREG = SOCHIA INCF THUONG;------------------- TANG THUONG SO LEN CPFSLT SOBICHIA;---------------- SOBICHIA < SOCHIA ? GOTO CHIA;----------------------NEU VAN LON HON HAY BANG SOCHIA THI CHIA TIEP MOVFF SOBICHIA, SODU ;--------- NEU NHO HON GAN SOBICHIA CHO SODU ;---------------------------------THUONG SO DA CO DO TA TANG LEN MOI LAN TRU RETURN;--------------------------THOAT |
hi đúng cái mình cần, mình cũng đang gặp trở ngại việc đếm 1 bộ counter rùi xuất ra led, ô nhớ từ 0 đến 255, trước làm bên 89 thì cứ DIV AB còn qua Pic ko hỗ trợ hàm nhân chia nên đang bí lù :P
|
Trích:
http://www.piclist.com/techref/micro...adix/index.htm Phần mà bạn cần nằm ở khu vực "binary to ASCII", "8bit to Decimal ASCII 3 digits". Không nhất thiết phải dùng hàm nhân chia ở đây. Thân, |
pó tay, mớ code trên xài cho con 18F, mình xài 16F không có lệnh so sánh, không biết sao nữa, hix hix
|
Trích:
Thân, |
Trích:
|
hehe, sau một hồi ngồi lọ mọ tìm giải thuật 1 byte Hex sang 3 số BCD không có hoặc có mà đọc không hiểu gì ??? mình đã tự code ngon lành, share lên cho mọi người dùng chung và bug giúp mình, đã test tốt bằng proteus để chế độ xem PIC CPU memory Data để xem kết quả đạt được trong các ô nhớ, kết quả rất tốt
Code:
Hướng dẫn sử dụng: - Nạp giá trị hex cần đổi sang BCD vào biến SOCHIA - Kết quả sau khi chuyển đổi được lưu vào 3 biến H_TRAM, H_CHUC, H_DV từ đó bạn có thể xuất ra Led 7 đoạn ... Giải thuật - PIC không có hàm nhân/chia nên ta sẽ làm phép chia 100, chia 10 từ phép trừ (như hùi học mẫu giáo hay cấp 1 í :D ) ++ giả sử có số chia = 23, số bị chia = 10 - lấy số chia - số bị chia = 23 - 10 = 13, lấy kq gán vào số chia - thương ban đầu = 0 - thương = thương + 1 = 1 - kiểm tra cờ C trong status, nếu cờ C = 1 thì phép trừ có kết quả dương => tiếp tục lặp lại phép trừ: 13 - 10 = 3 - thương = 1 + 1 = 2 - kiểm tra cờ C, vẫn = 1 do kết quả trừ là dương 3 - tiếp tục trừ, 03 - 10 = F3 (-7), đây là kết quả âm, cờ C = 0 => dừng phép trừ, gán số 3 trước đó vào hàng đơn vị ====> vậy ta có hàng chục = 2, hàng đơn vị = 3 Giải thuật hơi dài nhưng dễ hiểu :D |
Chao
xin hãy chỉ cho mình biết làm cách nào để cộng, trừ, nhân, chia các số lớn hơn 8 bit. Vì mình cần cái đó để tính toán độ ẩm và nhiệt độ của IC SHT10. |
hình như C= 1 là kết quả phép trừ âm hay sao chứ bạn,ví dụ như 3-5 sẽ tác động lên msb mà. code của unisa viết đúng ý mình thế không biết
|
đúng thứ mình đang cần. Cám ơn các sư huynh rất nhiều :d
|
Múi giờ GMT. Hiện tại là 09:50 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam