PDA

View Full Version : help: giải thuật PIC và led 7 đoạn


winstarvn
08-03-2009, 12:06 AM
mình mới bắt đầu tìm hiểu vè PIC và chọn pic 16f để bắt đầu.

và đang gặp khó khăn với led7 đoạn vì truớc học 8051 thì có lệnh nhân và chia nhưng chuyển qua pic thì không còn nữa.

ví dụ với 8051: có một số bất kỳ từ 0-99, đuợc lưu trong ô nhớ, và có 2 led 7 đoạn để hiển thị số này, ta sẽ có một ô nhớ để chứa giá trị hàng chục và một ô nhớ chứa giá trị hàng đơn vị.

lấy giá trị ô nhớ con số chia cho 10 và kết quả đuợc lưu trong 2 ô nhớ hàng chục và hàng đơn vị, dùng phuơng pháp tra bảng ta sẽ hiển thị đuợc con số mong muốn.

đó là đối với tập lệnh của 8051, còn của pic16f thì sẽ làm như thế nào?

search trên diễn đàn thì không thấy topic nói về giải thuật để hiển thị.

mong nhận đuợc sự giúp đỡ của mọi người. và quan trọng nữa là mình muốn giải thuật viết bằng assembler nha

thanks all.

namqn
08-03-2009, 03:01 AM
mình mới bắt đầu tìm hiểu vè PIC và chọn pic 16f để bắt đầu.

và đang gặp khó khăn với led7 đoạn vì truớc học 8051 thì có lệnh nhân và chia nhưng chuyển qua pic thì không còn nữa.

ví dụ với 8051: có một số bất kỳ từ 0-99, đuợc lưu trong ô nhớ, và có 2 led 7 đoạn để hiển thị số này, ta sẽ có một ô nhớ để chứa giá trị hàng chục và một ô nhớ chứa giá trị hàng đơn vị.

lấy giá trị ô nhớ con số chia cho 10 và kết quả đuợc lưu trong 2 ô nhớ hàng chục và hàng đơn vị, dùng phuơng pháp tra bảng ta sẽ hiển thị đuợc con số mong muốn.

đó là đối với tập lệnh của 8051, còn của pic16f thì sẽ làm như thế nào?

search trên diễn đàn thì không thấy topic nói về giải thuật để hiển thị.

mong nhận đuợc sự giúp đỡ của mọi người. và quan trọng nữa là mình muốn giải thuật viết bằng assembler nha

thanks all.
Thực ra việc bạn muốn thực hiện là tách giá trị nhị phân 0 - 99 trong 1 byte thành 2 byte riêng biệt, mỗi byte là một số BCD dạng unpacked (mỗi byte chỉ dùng để chứa một số BCD).

Tại PIClist đã có nhiều chương trình mẫu liên quan đến vấn đề này, bạn tham khảo ở đây:
http://www.piclist.com/techref/microchip/math/radix/index.htm

Cụ thể thì bạn có thể xem các chương trình mẫu chuyển số 8-bit sang BCD half-packed, và có thể đơn giản hóa để dùng cho 7-bit (vì các giá trị 0-99 chỉ cần dùng 7 bit để thể hiện).

Thân,

nguyenluong
08-03-2009, 10:52 AM
Theo mình bạn đừng có nhân chia cho 10 mệt lắm. Có cách này ne:
Bạn lưu giá trị ĐV, CHỤC, TRĂM... vào một ô nhớ riêng. Mỗi giây tăng ô nhớ ĐV lên 1, so sánh với sôa 1, nếu = 10 thì xóa ô nhớ ĐV, tăng CHỤC, cứ thế mà làm. Cho ban code ne
DONVI EQU 0X20
CHUC EQU 0X21
TRAM EQU 0X22
;;;;;;;;;;;;;;;;;;;;;;;;;;
; BAN DÙNG NGẮT TIMER CHU KO NÊN DÙNG DELAY NHA;
CHUONG TRINH NGẮT TIMER
TỚI ĐÂY BẠN TWJ VIẾT NHA
CHÀO BAN, CHÚC VUI

winstarvn
08-03-2009, 12:21 PM
Theo mình bạn đừng có nhân chia cho 10 mệt lắm. Có cách này ne:
Bạn lưu giá trị ĐV, CHỤC, TRĂM... vào một ô nhớ riêng. Mỗi giây tăng ô nhớ ĐV lên 1, so sánh với sôa 1, nếu = 10 thì xóa ô nhớ ĐV, tăng CHỤC, cứ thế mà làm. Cho ban code ne
DONVI EQU 0X20
CHUC EQU 0X21
TRAM EQU 0X22
;;;;;;;;;;;;;;;;;;;;;;;;;;
; BAN DÙNG NGẮT TIMER CHU KO NÊN DÙNG DELAY NHA;
CHUONG TRINH NGẮT TIMER
TỚI ĐÂY BẠN TWJ VIẾT NHA
CHÀO BAN, CHÚC VUI

theo như mình hiểu thì cách của bạn dùng để làm bộ đếm hay thời gian thôi, nếu như nhập 1 số ngẫu nhiên thì sao nhỉ ??


to namqn: thanks bạn đã cho link, để nghiên cứu và làm thử xem sao.

nguyenluong
08-03-2009, 08:13 PM
theo như mình hiểu thì cách của bạn dùng để làm bộ đếm hay thời gian thôi, nếu như nhập 1 số ngẫu nhiên thì sao nhỉ ??


to namqn: thanks bạn đã cho link, để nghiên cứu và làm thử xem sao.

//====================================
Nếu bạn nhập một số ngẫu nhiên thì cung vậy thôi. Nó load giá trị đó vào và hiển thị ra LED theo ý mún của mình. Còn bạn mún đếm hay không là do chương trình bạn viết thôi. Bên 89 tôi cũng viết như vậy thôi

satphong
30-06-2010, 12:37 PM
bạn nào có sơ đồ kết nối giữa pic và 8 con led 7 đoạn & các bài tập vế nó(file hex hoặc asm)
không postlên giúp mình với.minh phải nghiên cứu nó mà tìm không được!bạn tận tinh chỉ giúp mong gửi vế địa chỉ email:theminhcddt@gmail.com.Mong các bạn sớm hồi âm