Prop Đồng hồ asm

F

firesky1982

Guest
Tôi cần được giúp đỡ với Trisb portb.Có thể giúp tôi với bất kỳ vấn đề trong các mã số mà tôi có?

 
Mã số:

;--------

; MclockT3.asm - sửa đổi cho 180 độ brush xe máy

; OK để thêm 8. LED - blanked trong bảng và 2 những nơi khác

; Watchdog timer được sử dụng để đảm bảo khởi động theo tất cả các powerups

; "Các Propeller" mechanically quét LED đồng hồ

; Bob Blick February 12, 1997

; Giấy phép theo điều kiện của Giấy phép Công cộng GNU, www.gnu.org

; Không có bảo đảm hoặc ngụ ý bày tỏ

; Bob Blick 18 tháng hai, 2002

;--------

danh sách p = 16F84

radix hex

bao gồm "p16F84.inc"

;--------

; Nhớ để đặt blast-thời gian tùy chọn: OSC = thường xuyên xtal, WDT = Về

; Timings tất cả dựa trên 4 MHz crystal

;--------

; Là những equates đã bao gồm trong các tập tin?
someday tôi sẽ xem xét.

;--------

w equ 0

f equ 1

;--------

; Bắt đầu có sẵn của bộ nhớ RAM.

;--------

cblock 0x0C

safe_w; tạm thời không thực sự, được sử dụng bởi các gián đoạn SVC

safe_s; tạm thời không thực sự, được sử dụng bởi các gián đoạn SVC

period_count; incremented mỗi gián đoạn

period_dup; bản sao của period_count an toàn từ gián đoạn

period_calc; ổn định trong thời gian sau khi hysteresis Calc.

cờ; int b2 = b1 = phút, B4 = cạnh

dot_index; mà cột đang được hiển thị

digit_index; đó là chữ số được hiển thị

giờ; ở định dạng hiển thị, không phải hex (01/12)

phút; 00-59

bigtick_dbl; incremented mỗi gián đoạn

bigtick_hi

bigtick_lo

phím; trọng giá trị

mẻ; mẻ giá trị

đánh dấu; được sử dụng bởi sự chậm trễ

endc

;--------

; Bắt đầu của ROM

;--------

org 0x00; Bắt đầu mã không gian

Goto Bắt đầu

;--------

; Gián đoạn dịch vụ thường xuyên,

;--------

org 0x04; gián vector

Intsvc movwf safe_w; lưu w

TÌNH TRẠNG swapf, w; trao đổi trạng thái, w

movwf safe_s; lưu trạng thái (nibble vùng trao đổi, hãy nhớ)

;--------

; Thực hiện tiết kiệm, bây giờ bắt đầu làm việc

; Increment thời gian truy cập

;--------

incf period_count, f

btfsc STATUS, Z; đặt không có nghĩa là tràn

decf period_count, f

; Watchdog timer rõ ràng để đảm bảo khởi động

clrwdt

; 234375 interrupts mỗi phút.
Increment các bigtick mỗi lần.

incf bigtick_lo, f

btfsc STATUS, Z

incf bigtick_hi, f

btfsc STATUS, Z

incfsz bigtick_dbl, f

Goto Bigtick_out

;--------

; Ở đây?
bigtick đã cán qua không và là một trong những phút đã qua.

; Tải lại bigtick và thiết lập một cờ cho chính cập

;--------

movlw 0xFC; 234375 = 0x039387

movwf bigtick_dbl; 0 - 0x039387 = 0xFC6C79

movlw 0x6C

movwf bigtick_hi

movlw 0x79

movwf bigtick_lo

bsf cờ, 1; thông báo cho Keep_time

Bigtick_out

;--------

; Thực hiện làm việc, bắt đầu khôi phục lại

;--------

swapf safe_s, w; lấy tình trạng, reswap nibbles

movwf STATUS; khôi phục lại tình trạng

swapf safe_w, f; trao đổi nibbles chuẩn bị

swapf safe_w, w; cho vùng trao đổi phục hồi của w

bcf INTCON, 2; cờ gián đoạn rõ ràng trước khi trở về

retfie; trở về từ gián đoạn

;--------

; Character Tìm kiếm TABLE

; Cao, bỏ qua các bit.
đặt = LED tắt, rõ ràng = LED trên, dưới cùng bit0 = LED, LED bit6 = đầu trang

;--------

Char_tbl

addwf PCL, f

dt 0xC1, 0xBE, 0xBE, 0xBE, 0xC1; "O"

dt 0xFF, 0xDE, 0x80, 0xFE, 0xFF; "1"

dt 0xDE, 0xBC, 0xBA, 0xB6, 0xCE; "2"

dt 0xBD, 0xBE, 0xAE, 0x96, 0xB9; "3"

dt 0xF3, 0xEB, 0xDB, 0x80, 0xFB; "4"

dt 0x8D, 0xAE, 0xAE, 0xAE, 0xB1; "5"

dt 0xE1, 0xD6, 0xB6, 0xB6, 0xF9; "6"

dt 0xBF, 0xB8, 0xB7, 0xAF, 0x9F; "7"

dt 0xC9, 0xB6, 0xB6, 0xB6, 0xC9; "8"

dt 0xCF, 0xB6, 0xB6, 0xB5, 0xC3; "9"

dt 0xFF, 0xC9, 0xC9, 0xFF, 0xFF; ":"

Char_tbl_end

;--------

; SUBROUTINES ĐỘI HERE

;--------

; Rõ ràng quan trọng bit của ram

;--------

Ram_init movlw 0x07

movwf phím

movlw 0x12; tại sao đồng hồ luôn luôn bắt đầu

movwf giờ; tại 12:00?

clrf phút

clrf dot_index

clrf digit_index

movlw 0xFC

movwf bigtick_dbl

retlw 0

;--------

; Pins tôi không sử dụng cài đặt để được kết quả đầu ra

;--------

Port_init movlw 0x00; tất cả các sản lượng, không sử dụng = B7

bsf STATUS, RP0; chọn bộ nhớ bank1

movwf TRISB; portB như sản lượng

bcf STATUS, RP0; quay trở lại bank0movlw b'00010111 '; một cổng có 5 pins.
Tôi cần 4 đầu vào

; b0 = phút, b1 = 10mins, b2 = giờ

; B3 = không sử dụng, B4 = xoay vòng chỉ mục

tris porta; trên một cổng

retlw 0

;--------

; Giờ lại nhận được dựa trên interrupts đi

;--------

Timer_init bcf INTCON, 2; rõ ràng TMR0 int cờ

bsf INTCON, 7; bật toàn cầu interrupts

bsf INTCON, 5; bật TMR0 int

clrf TMR0; rõ ràng giờ

clrwdt; này là lý do tại sao cần thiết?
chỉ cần làm điều đó ..

movlw b'11011000 '; thiết lập giờ.
prescaler (bit3) bypassed

lựa chọn; gửi w để lựa chọn.
tạo ra cảnh báo trước.

clrf TMR0; giờ lại bắt đầu

retlw 0

;--------

; Thử nghiệm cho các chỉ mục lưu trữ và luân phiên trong thời gian trong period_dup

;--------

Check_index movf porta, w; nhận được trạng thái của một cổng

xorwf cờ, w; so sánh với các tiểu bang đã lưu

andlw b'00010000 '; chỉ quan tâm đến 4-bit

btfsc STATUS, Z; thử nghiệm cho các cạnh

retlw 0; không phải là một cạnh, giống như tác phẩm mới

xorwf cờ, f; tiết kiệm cho thời gian tới

btfsc cờ, 4; kiểm tra cho rơi xuống cạnh

retlw 0; phải có được một xu hướng cạnh

movf period_count, w; thực hiện một bản sao làm việc

movwf period_dup; gọi là thời kỳ dup

clrf period_count; tươi bắt đầu cho một kế tiếp luân phiên

clrf digit_index; đặt để chữ số đầu tiên

clrf dot_index; cột đầu tiên

; Tính toán một khoảng thời gian mà không run lên hoặc jitter

; Thời gian sẽ không được thay đổi, trừ khi mới thực sự là khoảng thời gian khác nhau

movf period_calc, w

subwf period_dup, w; tìm thấy sự khác biệt

TÌNH TRẠNG btfss, C; mang cờ đặt có nghĩa là không có mượn

Goto Calc_period_neg; phải được theo cách khác

sublw 2; sai cho phép = 3

TÌNH TRẠNG btfss, C; mượn sẽ không bỏ qua

incf period_calc; mới có giá trị lớn hơn nhiều hơn Calc

retlw 0

Calc_period_neg addlw 2; sai cho phép = 3

TÌNH TRẠNG btfss, C; mang theo sẽ bỏ qua

decf period_calc; không mang theo có nghĩa là nó phải được thay đổi

retlw 0

;--------

; LED thay đổi dựa trên mô hình của nhà nước digit_index và dot_index

;--------

Display_now movlw 0x05

xorwf dot_index, w; cho các bài kiểm tra cuối của chữ số

movlw 0xFF; mẫu cho trống cột

btfsc STATUS, Z

Goto D_lookup_3; cần có sự trống

bcf STATUS, C; rõ ràng trước khi thực hiện luân phiên nhau

rlf digit_index, w; đôi chỉ mục, vì mỗi

addwf PCL, f; mất hai hướng dẫn

D_10hr swapf giờ, w

Goto D_lookup; những gì tuyệt vời rush of power

D_1hr movf giờ, w; tôi cảm thấy khi sửa đổi

Goto D_lookup; chương trình cập

D_colon movlw 0x0A

Goto D_lookup

D_10min swapf phút, w

Goto D_lookup

D_1min movf phút, w

Goto D_lookup

D_nothing retlw 0

D_lookup andlw b'00001111 '; dải tắt hi bit

movwf mẻ; nhân này của 5 để tra cứu

addwf mẻ, f; bảng cơ sở vị trí

addwf mẻ, f; này là cheating?

addwf mẻ, f; Tôi nghĩ rằng không.

addwf mẻ, f; Tôi nghĩ rằng đó là năng lượng conserving!

TÌNH TRẠNG btfss, Z; kiểm tra cho số không

Goto D_lookup_2; không phải là một số không

movf digit_index, f; này chỉ là để kiểm tra / thiết lập cờ

movlw 0xFF; trống này tạo ra một mô hình LED

btfsc STATUS, Z; kiểm tra nếu nó là 10 giơ bảo chữ số

Goto D_lookup_3: nó là một số không dẫn đầu

D_lookup_2 movf dot_index, w; lấy cột

addwf mẻ, w; thêm nó vào chữ số cơ sở

Gọi Char_tbl; được chấm mẫu cho các cột này

D_lookup_3 movwf PORTB; gửi nó đến LEDs

bcf STATUS, C; rõ ràng trước khi mang theo cờ luân phiên

rrf period_calc, w; thời gian / 2 được sử dụng để chấm đồng hồ

addlw 0xF4; trừ 12 đến bù cho phí

Gọi Delay; chiều rộng của chữ số này với sự chậm trễ

incf dot_index, f; increment vào cột tiếp theo

movlw 0x06; 6 cột là một chữ số cộng với không gian

xorwf dot_index, w; chữ số kế tiếp kiểm tra

TÌNH TRẠNG btfss, Z

retlw 0; mới không phải là một chữ số

clrf dot_index; mới chữ số thời gian

incf digit_index, f

retlw 0; Display_now làm.

;--------

; Một đoạn ngắn là sự chậm trễ thường xuyên

;--------

Movwf đánh dấu sự chậm trễ

Delay_loop decfsz đánh dấu, f

Goto Delay_loop; w là không bị hư hỏng, do đó, có thể Delay

trở lại; được recalled mà không reloading

;--------

; Thử nghiệm cho các cuộc gọi và bấm phím điều chỉnh thời gian, nếu cần thiết

;--------

Check_keys movf porta, w; cổng nhận được "một"

xorwf phím, w; so sánh với các trang trước

andlw b'00000111 '; chỉ chăm sóc về các nút pins

btfsc STATUS, Z; không đặt = không có nút

retlw 0; trở lại

xorwf phím, f; cửa hàng trọng điểm có giá trị

movlw 0x64; một sự chậm trễ sẽ khá dài

movwf mẻ; ngăn khoá bounces

Key_delay movlw 0xFF

Gọi Delay

decfsz mẻ

Goto Key_delay

btfss phím, 2; thử nghiệm "cách" nút

Goto Inc_mins

btfss phím, 1; thử nghiệm "mười" nút

Goto Inc_tens

btfss phím, 0; thử nghiệm "giờ", nút bấm

Goto Inc_hours

retlw 0; phải là một GLITCH.
yeah, right!

;--------

; Increment mười phút

;--------

Inc_tens movlw 0x0A

movwf mẻ; mẻ đã mười

Inc_tens_loop gọi Inc_mins

decfsz mẻ

Goto Inc_tens_loop; khác được thêm vào phút

retlw 0

;--------

; Increment một giờ

;--------

Inc_hours movlw 0x12

xorwf giờ, w

btfsc STATUS, Z

Goto Inc_hours_12

movlw 0x07; phần này được một ít sloppy

addwf giờ, w

movlw 0x07

TÌNH TRẠNG btfss, DC

movlw 1

addwf giờ, f

retlw 0

Inc_hours_12 movlw 0x01

movwf giờ

retlw 0

;--------

; Increment thời gian dựa trên cờ, 1 là gửi bằng gián đoạn thường xuyên,

; Inc_mins loop cũng được sử dụng theo thời gian cài đặt thường xuyên,

;--------

Keep_time btfss cờ, 1; biên cờ

retlw 0; không phải thời điểm này

bcf cờ, 1; rõ ràng biên cờ

Inc_mins movlw 0x07; incrementing thời gian bắt đầu

addwf phút, w; thêm 7 phút vào w

btfsc STATUS, DC; đã gây thêm 7 chữ số thực hiện?

Goto Sixty_mins; sau đó thử nghiệm cho một giờ thay đổi

incf phút; thêm 1 cách khác cho thực tế

retlw 0; và quay trở lại

Sixty_mins movwf phút; lưu phút

movlw 0x60; kiểm tra cho 60

xorwf phút, w; là ở phút 60?

TÌNH TRẠNG btfss, Z

retlw 0; không?
quay lại

clrf phút; khác không phút

Goto Inc_hours; và increment giờ

;--------

; Cuối subroutines

; Chương trình bắt đầu tại đây

;--------

Bắt đầu gọi Ram_init; thiết lập các biến cho các giá trị tốt đẹp

Gọi Port_init; đặt cổng hướng dẫn

Gọi Timer_init; bắt đầu giờ dựa gián đoạn

;--------

; Xong bắt đầu, bắt đầu những vòng lặp bất tận.

;--------

;

Vòng tròn; bắt đầu lớn loop

;

;--------

; Phát hiện rơi xuống cạnh trên porta, 4, để quyết định quay chỉ mục

; Luân phiên trong thời gian tính toán và lưu giữ trong period_dup

; So sánh với thời gian làm việc (period_calc) và điều chỉnh, nếu theo cách khác nhau

;--------

Gọi Check_index

;--------

; Hiển thị kiểm tra nhà nước và thay đổi nếu cần thiết

;--------

Gọi Display_now

;--------

; Kiểm tra bàn phím và điều chỉnh thời gian

;--------

Gọi Check_keys

;--------

; Phút, kiểm tra cờ và increment thời gian, nếu có một phút trôi qua

;--------

Gọi Keep_time

;--------

; Gentlemen, đó là một đồng hồ, giữ nó lăn

;--------

Goto Circle; bạn nghe người đàn ông, lấy đi!

cuối

;--------

; Cuối của tập tin

;--------
 
firesky1982 đã viết:Mã số:

;--------

; MclockT3.asm - sửa đổi cho 180 độ brush xe máy

; OK để thêm 8. LED - blanked trong bảng và 2 những nơi khác

; Watchdog timer được sử dụng để đảm bảo khởi động theo tất cả các powerups

; "Các Propeller" mechanically quét LED đồng hồ

; Bob Blick February 12, 1997

; Giấy phép theo điều kiện của Giấy phép Công cộng GNU, www.gnu.org

; Không có bảo đảm hoặc ngụ ý bày tỏ

; Bob Blick 18 tháng hai, 2002

;--------

danh sách p = 16F84

radix hex

bao gồm các "p16F84.inc»

;--------

; Nhớ để đặt blast-thời gian tùy chọn: OSC = thường xuyên xtal, WDT = Về

; Timings tất cả dựa trên 4 MHz crystal

;--------

; Là những equates đã bao gồm trong các tập tin?
someday tôi sẽ xem xét.

;--------

w equ 0

f equ 1

;--------

; Bắt đầu có sẵn của bộ nhớ RAM.

;--------

cblock 0x0C

safe_w; tạm thời không thực sự, được sử dụng bởi các gián đoạn SVC

safe_s; tạm thời không thực sự, được sử dụng bởi các gián đoạn SVC

period_count; incremented mỗi gián đoạn

period_dup; bản sao của period_count an toàn từ gián đoạn

period_calc; ổn định trong thời gian sau khi hysteresis Calc.

cờ; int b2 = b1 = phút, B4 = cạnh

dot_index; mà cột đang được hiển thị

digit_index; đó là chữ số được hiển thị

giờ; ở định dạng hiển thị, không phải hex (01/12)

phút; 00-59

bigtick_dbl; incremented mỗi gián đoạn

bigtick_hi

bigtick_lo

phím; trọng giá trị

mẻ; mẻ giá trị

đánh dấu; được sử dụng bởi sự chậm trễ

endc

;--------

; Bắt đầu của ROM

;--------

org 0x00; Bắt đầu mã không gian

Goto Bắt đầu

;--------

; Gián đoạn dịch vụ thường xuyên,

;--------

org 0x04; gián vector

Intsvc movwf safe_w; lưu w

TÌNH TRẠNG swapf, w; trao đổi trạng thái, w

movwf safe_s; lưu trạng thái (nibble vùng trao đổi, hãy nhớ)

;--------

; Thực hiện tiết kiệm, bây giờ bắt đầu làm việc

; Increment thời gian truy cập

;--------

incf period_count, f

btfsc STATUS, Z; đặt không có nghĩa là tràn

decf period_count, f

; Watchdog timer rõ ràng để đảm bảo khởi động

clrwdt

; 234375 interrupts mỗi phút.
Increment các bigtick mỗi lần.

incf bigtick_lo, f

btfsc STATUS, Z

incf bigtick_hi, f

btfsc STATUS, Z

incfsz bigtick_dbl, f

Goto Bigtick_out

;--------

; Ở đây?
bigtick đã cán qua không và là một trong những phút đã qua.

; Tải lại bigtick và thiết lập một cờ cho chính cập

;--------

movlw 0xFC; 234375 = 0x039387

movwf bigtick_dbl; 0 - 0x039387 = 0xFC6C79

movlw 0x6C

movwf bigtick_hi

movlw 0x79

movwf bigtick_lo

bsf cờ, 1; thông báo cho Keep_time

Bigtick_out

;--------

; Thực hiện làm việc, bắt đầu khôi phục lại

;--------

swapf safe_s, w; lấy tình trạng, reswap nibbles

movwf STATUS; khôi phục lại tình trạng

swapf safe_w, f; trao đổi nibbles chuẩn bị

swapf safe_w, w; cho vùng trao đổi phục hồi của w

bcf INTCON, 2; cờ gián đoạn rõ ràng trước khi trở về

retfie; trở về từ gián đoạn

;--------

; Character Tìm kiếm TABLE

; Cao, bỏ qua các bit.
đặt = LED tắt, rõ ràng = LED trên, dưới cùng bit0 = LED, LED bit6 = đầu trang

;--------

Char_tbl

addwf PCL, f

dt 0xC1, 0xBE, 0xBE, 0xBE, 0xC1; "O"

dt 0xFF, 0xDE, 0x80, 0xFE, 0xFF; "1"

dt 0xDE, 0xBC, 0xBA, 0xB6, 0xCE; "2"

dt 0xBD, 0xBE, 0xAE, 0x96, 0xB9; "3"

dt 0xF3, 0xEB, 0xDB, 0x80, 0xFB; "4"

dt 0x8D, 0xAE, 0xAE, 0xAE, 0xB1; "5"

dt 0xE1, 0xD6, 0xB6, 0xB6, 0xF9; "6"

dt 0xBF, 0xB8, 0xB7, 0xAF, 0x9F; "7"

dt 0xC9, 0xB6, 0xB6, 0xB6, 0xC9; "8"

dt 0xCF, 0xB6, 0xB6, 0xB5, 0xC3; "9"

dt 0xFF, 0xC9, 0xC9, 0xFF, 0xFF; ":"

Char_tbl_end

;--------

; SUBROUTINES ĐỘI HERE

;--------

; Rõ ràng quan trọng bit của ram

;--------

Ram_init movlw 0x07

movwf phím

movlw 0x12; tại sao đồng hồ luôn luôn bắt đầu

movwf giờ; tại 12:00?

clrf phút

clrf dot_index

clrf digit_index

movlw 0xFC

movwf bigtick_dbl

retlw 0

;--------

; Pins tôi không sử dụng cài đặt để được kết quả đầu ra

;--------

Port_init movlw 0x00; tất cả các sản lượng, không sử dụng = B7

bsf STATUS, RP0; chọn bộ nhớ bank1

movwf TRISB; portB như sản lượng

bcf STATUS, RP0; quay trở lại bank0movlw b'00010111 '; một cổng có 5 pins.
Tôi cần 4 đầu vào

; b0 = phút, b1 = 10mins, b2 = giờ

; B3 = không sử dụng, B4 = xoay vòng chỉ mục

tris porta; trên một cổng

retlw 0

;--------

; Giờ lại nhận được dựa trên interrupts đi

;--------

Timer_init bcf INTCON, 2; rõ ràng TMR0 int cờ

bsf INTCON, 7; bật toàn cầu interrupts

bsf INTCON, 5; bật TMR0 int

clrf TMR0; rõ ràng giờ

clrwdt; này là lý do tại sao cần thiết?
chỉ cần làm điều đó ..

movlw b'11011000 '; thiết lập giờ.
prescaler (bit3) bypassed

lựa chọn; gửi w để lựa chọn.
tạo ra cảnh báo trước.

clrf TMR0; giờ lại bắt đầu

retlw 0

;--------

; Thử nghiệm cho các chỉ mục lưu trữ và luân phiên trong thời gian trong period_dup

;--------

Check_index movf porta, w; nhận được trạng thái của một cổng

xorwf cờ, w; so sánh với các tiểu bang đã lưu

andlw b'00010000 '; chỉ quan tâm đến 4-bit

btfsc STATUS, Z; thử nghiệm cho các cạnh

retlw 0; không phải là một cạnh, giống như tác phẩm mới

xorwf cờ, f; tiết kiệm cho thời gian tới

btfsc cờ, 4; kiểm tra cho rơi xuống cạnh

retlw 0; phải có được một xu hướng cạnh

movf period_count, w; thực hiện một bản sao làm việc

movwf period_dup; gọi là thời kỳ dup

clrf period_count; tươi bắt đầu cho một kế tiếp luân phiên

clrf digit_index; đặt để chữ số đầu tiên

clrf dot_index; cột đầu tiên

; Tính toán một khoảng thời gian mà không run lên hoặc jitter

; Thời gian sẽ không được thay đổi, trừ khi mới thực sự là khoảng thời gian khác nhau

movf period_calc, w

subwf period_dup, w; tìm thấy sự khác biệt

TÌNH TRẠNG btfss, C; mang cờ đặt có nghĩa là không có mượn

Goto Calc_period_neg; phải được theo cách khác

sublw 2; sai cho phép = 3

TÌNH TRẠNG btfss, C; mượn sẽ không bỏ qua

incf period_calc; mới có giá trị lớn hơn nhiều hơn Calc

retlw 0

Calc_period_neg addlw 2; sai cho phép = 3

TÌNH TRẠNG btfss, C; mang theo sẽ bỏ qua

decf period_calc; không mang theo có nghĩa là nó phải được thay đổi

retlw 0

;--------

; LED thay đổi dựa trên mô hình của nhà nước digit_index và dot_index

;--------

Display_now movlw 0x05

xorwf dot_index, w; cho các bài kiểm tra cuối của chữ số

movlw 0xFF; mẫu cho trống cột

btfsc STATUS, Z

Goto D_lookup_3; cần có sự trống

bcf STATUS, C; rõ ràng trước khi thực hiện luân phiên nhau

rlf digit_index, w; đôi chỉ mục, vì mỗi

addwf PCL, f; mất hai hướng dẫn

D_10hr swapf giờ, w

Goto D_lookup; những gì tuyệt vời rush of power

D_1hr movf giờ, w; tôi cảm thấy khi sửa đổi

Goto D_lookup; chương trình cập

D_colon movlw 0x0A

D_lookup Goto

D_10min swapf phút, w

Goto D_lookup

D_1min movf phút, w

Goto D_lookup

D_nothing retlw 0

D_lookup andlw b'00001111 '; dải tắt hi bit

movwf mẻ; nhân này của 5 để tra cứu

addwf mẻ, f; bảng cơ sở vị trí

addwf mẻ, f; này là cheating?

addwf mẻ, f; Tôi nghĩ rằng không.

addwf mẻ, f; Tôi nghĩ rằng đó là năng lượng conserving!

TÌNH TRẠNG btfss, Z; kiểm tra cho số không

Goto D_lookup_2; không phải là một số không

movf digit_index, f; này chỉ là để kiểm tra / thiết lập cờ

movlw 0xFF; trống này tạo ra một mô hình LED

btfsc STATUS, Z; kiểm tra nếu nó là 10 giơ bảo chữ số

Goto D_lookup_3: nó là một số không dẫn đầu

D_lookup_2 movf dot_index, w; lấy cột

addwf mẻ, w; thêm nó vào chữ số cơ sở

Gọi Char_tbl; được chấm mẫu cho các cột này

D_lookup_3 movwf PORTB; gửi nó đến LEDs

bcf STATUS, C; rõ ràng trước khi mang theo cờ luân phiên

rrf period_calc, w; thời gian / 2 được sử dụng để chấm đồng hồ

addlw 0xF4; trừ 12 đến bù cho phí

Gọi Delay; chiều rộng của chữ số này với sự chậm trễ

incf dot_index, f; increment vào cột tiếp theo

movlw 0x06; 6 cột là một chữ số cộng với không gian

xorwf dot_index, w; chữ số kế tiếp kiểm tra

TÌNH TRẠNG btfss, Z

retlw 0; mới không phải là một chữ số

clrf dot_index; mới chữ số thời gian

incf digit_index, f

retlw 0; Display_now làm.

;--------

; Một đoạn ngắn là sự chậm trễ thường xuyên

;--------

Movwf đánh dấu sự chậm trễ

Delay_loop decfsz đánh dấu, f

Goto Delay_loop; w là không bị hư hỏng, do đó, có thể Delay

trở lại; được recalled mà không reloading

;--------

; Thử nghiệm cho các cuộc gọi và bấm phím điều chỉnh thời gian, nếu cần thiết

;--------

Check_keys movf porta, w; cổng nhận được "một"

xorwf phím, w; so sánh với các trang trước

andlw b'00000111 '; chỉ chăm sóc về các nút pins

btfsc STATUS, Z; không đặt = không có nút

retlw 0; trở lại

xorwf phím, f; cửa hàng trọng điểm có giá trị

movlw 0x64; một sự chậm trễ sẽ khá dài

movwf mẻ; ngăn khoá bounces

Key_delay movlw 0xFF

Gọi Delay

decfsz mẻ

Goto Key_delay

btfss phím, 2; thử nghiệm "cách" nút

Goto Inc_mins

btfss phím, 1; thử nghiệm "mười" nút

Goto Inc_tens

btfss phím, 0; thử nghiệm "giờ", nút bấm

Goto Inc_hours

retlw 0; phải là một GLITCH.
yeah, right!

;--------

; Increment mười phút

;--------

Inc_tens movlw 0x0A

movwf mẻ; mẻ đã mười

Inc_tens_loop gọi Inc_mins

decfsz mẻ

Goto Inc_tens_loop; khác được thêm vào phút

retlw 0

;--------

; Increment một giờ

;--------

Inc_hours movlw 0x12

xorwf giờ, w

btfsc STATUS, Z

Goto Inc_hours_12

movlw 0x07; phần này được một ít sloppy

addwf giờ, w

movlw 0x07

TÌNH TRẠNG btfss, DC

movlw 1

addwf giờ, f

retlw 0

Inc_hours_12 movlw 0x01

movwf giờ

retlw 0

;--------

; Increment thời gian dựa trên cờ, 1 là gửi bằng gián đoạn thường xuyên,

; Inc_mins loop cũng được sử dụng theo thời gian cài đặt thường xuyên,

;--------

Keep_time btfss cờ, 1; biên cờ

retlw 0; không phải thời điểm này

bcf cờ, 1; rõ ràng biên cờ

Inc_mins movlw 0x07; incrementing thời gian bắt đầu

addwf phút, w; thêm 7 phút vào w

btfsc STATUS, DC; đã gây thêm 7 chữ số thực hiện?

Goto Sixty_mins; sau đó thử nghiệm cho một giờ thay đổi

incf phút; thêm 1 cách khác cho thực tế

retlw 0; và quay trở lại

Sixty_mins movwf phút; lưu phút

movlw 0x60; kiểm tra cho 60

xorwf phút, w; là ở phút 60?

TÌNH TRẠNG btfss, Z

retlw 0; không?
quay lại

clrf phút; khác không phút

Goto Inc_hours; và increment giờ

;--------

; Cuối subroutines

; Chương trình bắt đầu tại đây

;--------

Bắt đầu gọi Ram_init; thiết lập các biến cho các giá trị tốt đẹp

Gọi Port_init; đặt cổng hướng dẫn

Gọi Timer_init; bắt đầu giờ dựa gián đoạn

;--------

; Xong bắt đầu, bắt đầu những vòng lặp bất tận.

;--------

;

Vòng tròn; bắt đầu lớn loop

;

;--------

; Phát hiện rơi xuống cạnh trên porta, 4, để quyết định quay chỉ mục

; Luân phiên trong thời gian tính toán và lưu giữ trong period_dup

; So sánh với thời gian làm việc (period_calc) và điều chỉnh, nếu theo cách khác nhau

;--------

Gọi Check_index

;--------

; Hiển thị kiểm tra nhà nước và thay đổi nếu cần thiết

;--------

Gọi Display_now

;--------

; Kiểm tra bàn phím và điều chỉnh thời gian

;--------

Gọi Check_keys

;--------

; Phút, kiểm tra cờ và increment thời gian, nếu có một phút trôi qua

;--------

Gọi Keep_time

;--------

; Gentlemen, đó là một đồng hồ, giữ nó lăn

;--------

Goto Circle; bạn nghe người đàn ông, lấy đi!

cuối

;--------

; Cuối của tập tin

;--------
 

Welcome to EDABoard.com

Sponsor

Back
Top