![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
|
|
#1 |
|
Đệ tử 3 túi
Tham gia ngày: Aug 2006
Bài gửi: 55
: |
Xin chào!
Sao không thấy ai bàn về cách viết chương trình xuất ra led 7 đoạn bằng ASM nhỉ? Em vừa mới tìm được cách chuyển đổi từ mã nhị phân 8bit sang mã bcd để xuất ra led 7 doan, nhưng em không biết cách để chuyển mã nhị phân 16bit sang mã bcd, mong được các bác chỉ giáo. Đây là cách chuyển mã nhị phân 8bit sang mã bcd ;*********************************************** tram movwf tam clrf tg tram_loop movlw .100 incf tg,f subwf tam,f btfsc STATUS,C goto tram_loop decf tg,w return ;************************************************* chuc movwf tam clrf tg chuc_loop movlw .10 incf tg,f subwf tam,f btfsc STATUS,C goto chuc_loop decf tg,w goto chuc1 chuc1 movwf tg movlw .10 chuc1_loop subwf tg,f btfsc STATUS,C goto chuc1_loop addwf tg,w return ;************************************************* DONVID MOVWF tg DV MOVLW .10 SUBWF tg,F BTFSC STATUS,C GOTO DV MOVLW .10 ADDWF tg,W RETURN ;************************************************* ** các kết quả nằm trong W cám ơn nhiều! |
|
|
|
|
#2 |
|
Trưởng lão PIC bang
|
Thuật toán trực quan:
Ví dụ với số 8-bit, giá trị tối đa là 255, do đó số BCD có 3 chữ số. Tính từ hàng trăm đến hàng đơn vị, lấy số cần chuyển trừ cho 1 đơn vị của hàng trăm (tức là 100) đến khi có kết quả âm thì không trừ nữa, coi như đã chuyển xong hàng trăm, lấy phần dư thực hiện tiếp cho hàng chục, sau đó đến hàng đơn vị. Với số 16-bit, giá trị tối đa là 65535, do đó số BCD có 5 chữ số. Cũng có thể làm theo cách tương tự, nhưng vấn đề ở đây là vi xử lý 8 bit không thể trừ hai số 16-bit với nhau một cách trực tiếp. Do đó cần phải có một số chương trình con để thực hiện các phép toán giữa các số 16-bit. Nếu không muốn đau đầu thì người dùng thường chọn ngôn ngữ cấp cao. Nếu vẫn muốn đau đầu thì tìm trên mạng hay tự viết các chương trình con hợp ngữ cho 16-bit. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|
|
#3 | |
|
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 101
: |
Đổi mã nhị phân 16bit sang 5 byte bcd unpacked
Trích:
Code:
; Đổi mã nhị phân 16bit sang 5byte BCD unpacked
;****************************
;Binary 16 bit to BCD unpacked 5 digit
;****************************
; Input : hex number in Hi, Lo (16bit binary)
; Output : TenK:Thou:Hun:Ten:Ones
bin16tobcdup5:
swapf Hi,w
andlw 0x0F
addlw 0xF0
movwf Thou
addwf Thou,f
addlw .226
movwf Hun
addlw .50
movwf Ones
movf Hi,w
andlw 0x0F
addwf Hun,f
addwf Hun,f
addwf Ones,f
addlw .233
movwf Ten
addwf Ten,f
addwf Ten,f
swapf Lo,w
andlw 0x0F
addwf Ten,f
addwf Ones,f
rlf Ten,f
rlf Ones,f
comf Ones,f
rlf Ones,f
movf Lo,w
andlw 0x0F
addwf Ones,f
rlf Thou,f
movlw 0x07
movwf TenK
movlw .10
Lb1:
addwf Ones,f
decf Ten,f
btfss 3,0
goto Lb1
Lb2:
addwf Ten,f
decf Hun,f
btfss 3,0
goto Lb2
Lb3:
addwf Hun,f
decf Thou,f
btfss 3,0
goto Lb3
Lb4:
addwf Thou,f
decf TenK,f
btfss 3,0
goto Lb4
retlw 0
; Phần khai báo đầu chương trình thêm vào khai báo RAM:
CBLOCK 0x20
TenK
Thou
Hun
Ten
Ones
Hi
Lo
ENDC
; gọi thử chương trình đổi mã nhị phân 16bit sang 5 byte bcd unpacked
movlw 0xff
movwf Hi
movlw 0xff
movwf Lo
call bin16tobcdup5
Notes: Nhờ các Mod edit lại phần code sao cho dễ nhìn hộ em, em chẳng biết làm thế nào!!!Thanks namqn: Chọn phần code cần định dạng, chọn nút có hình dấu '#' trên thanh công cụ (ở trong khung soạn thảo lớn nhé). Cách khác là đặt mã [ code] trước phần code cần định dạng, và mã [ /code] ngay sau phần cần định dạng (nhớ là không có khoảng trắng bên trong các tag [] nhé, tôi phải để khoảng trắng thì các tag mới hiển thị được). thay đổi nội dung bởi: namqn, 03-12-2006 lúc 07:12 PM. |
|
|
|
![]() |
|
|
Similar Threads
|
||||
| Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
| TUT về USART trong PIC16F877A | mafd_47a | MPASM | 16 | 19-02-2025 05:32 AM |
| TUT ve I2C ( pic16f877a ) | mafd_47a | MPASM | 28 | 28-01-2025 10:45 PM |
| Lập nhóm PIC16F877A | nhh | Cơ bản về vi điều khiển và PIC | 285 | 08-03-2017 11:08 PM |
| Bộ so sánh và PWM cho PIC16F877A | anhquangngai | Cơ bản về vi điều khiển và PIC | 24 | 08-09-2012 09:00 AM |
| CCS C for PIC16F877A | nhh | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 405 | 24-04-2008 12:00 PM |